diff --git a/.github/workflows/examples-cc13x2x7_26x2x7.yaml b/.github/workflows/examples-cc13x2x7_26x2x7.yaml
index 608465b..91f1107 100644
--- a/.github/workflows/examples-cc13x2x7_26x2x7.yaml
+++ b/.github/workflows/examples-cc13x2x7_26x2x7.yaml
@@ -33,10 +33,7 @@
             BUILD_TYPE: gn_cc26x2x7
 
         runs-on: ubuntu-latest
-        # This CI is disabled because running out of flash and a solution was not found in time, see https://github.com/project-chip/connectedhomeip/pull/26186
-        # An issue was opened at https://github.com/project-chip/connectedhomeip/issues/26957
-        # TODO : Enable this once we have a way to run without out of flash failure or remove platform if it cannot support the SDK
-        if: github.actor != 'restyled-io[bot]' && false
+        if: github.actor != 'restyled-io[bot]'
 
         container:
             image: ghcr.io/project-chip/chip-build-ti:1
@@ -61,9 +58,10 @@
                       ./scripts/build/build_examples.py \
                       --target ti-cc13x2x7_26x2x7-lock-mtd \
                       --target ti-cc13x2x7_26x2x7-pump-mtd \
-                      --target ti-cc13x2x7_26x2x7-lighting \
+                      --target ti-cc13x2x7_26x2x7-lighting-mtd \
                       --target ti-cc13x2x7_26x2x7-pump-controller-mtd \
-                      --target ti-cc13x4_26x4-lighting \
+                      --target ti-cc13x4_26x4-lighting-ftd \
+                      --target ti-cc13x4_26x4-lighting-mtd \
                       --target ti-cc13x4_26x4-lock-ftd \
                       --target ti-cc13x4_26x4-lock-mtd \
                       --target ti-cc13x4_26x4-pump-mtd \
@@ -79,13 +77,13 @@
                     cc13x2_26x2 LP_CC2652R7 lock-mtd \
                     out/artifacts/ti-cc13x2x7_26x2x7-lock-mtd/chip-LP_CC2652R7-lock-example.out \
                     /tmp/bloat_reports/
-            - name: Get Pump App size stats
+            - name: Get Pump MTD size stats
               run: |
                   .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                     cc13x2_26x2 LP_CC2652R7 pump-app \
                     out/artifacts/ti-cc13x2x7_26x2x7-pump-mtd/chip-LP_CC2652R7-pump-example.out \
                     /tmp/bloat_reports/
-            - name: Get Pump Controller App size stats
+            - name: Get Pump Controller MTD size stats
               run: |
                   .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                     cc13x2_26x2 LP_CC2652R7 pump-controller-app \
@@ -109,17 +107,17 @@
                     cc13x4_26x4 LP_EM_CC1354P10_6 pump-app \
                     out/artifacts/ti-cc13x4_26x4-pump-mtd/chip-LP_EM_CC1354P10_6-pump-example.out \
                     /tmp/bloat_reports/
-            - name: Get Pump Controller App size stats
+            - name: Get Pump Controller MTD size stats
               run: |
                   .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                     cc13x4_26x4 LP_EM_CC1354P10_6 pump-controller-app \
                     out/artifacts/ti-cc13x4_26x4-pump-controller-mtd/chip-LP_EM_CC1354P10_6-pump-controller-example.out \
                     /tmp/bloat_reports/
-            - name: Get Lighting App size stats
+            - name: Get Lighting FTD size stats
               run: |
                   .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                     cc13x4_26x4 LP_EM_CC1354P10_6 lighting-app \
-                    out/artifacts/ti-cc13x4_26x4-lighting/chip-LP_EM_CC1354P10_6-lighting-example.out \
+                    out/artifacts/ti-cc13x4_26x4-lighting-mtd/chip-LP_EM_CC1354P10_6-lighting-example.out \
                     /tmp/bloat_reports/
             - name: Uploading Size Reports
               uses: ./.github/actions/upload-size-reports
diff --git a/examples/all-clusters-app/cc13x4_26x4/args.gni b/examples/all-clusters-app/cc13x4_26x4/args.gni
index c54b13b..5d97a9c 100644
--- a/examples/all-clusters-app/cc13x4_26x4/args.gni
+++ b/examples/all-clusters-app/cc13x4_26x4/args.gni
@@ -30,6 +30,7 @@
 chip_enable_ota_requestor = false
 
 openthread_external_platform = "${chip_root}/third_party/openthread/platforms/cc13x4_26x4:libopenthread-cc13x4_cc26x4"
+chip_openthread_ftd = true
 
 # Disable CHIP Logging
 #chip_progress_logging = false
diff --git a/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn b/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn
index aec1e66..86c9229 100644
--- a/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn
@@ -34,8 +34,6 @@
 }
 
 ti_sysconfig("sysconfig") {
-  sources = [ "${project_dir}/chip.syscfg" ]
-
   outputs = [
     "ti_radio_config.c",
     "ti_radio_config.h",
@@ -45,20 +43,18 @@
     "ti_ble_config.h",
     "ti_dmm_application_policy.c",
     "ti_dmm_application_policy.h",
-
-    # disabled until upstream generation is aligned
-    #"tiop_config.h",
-    #"tiop_config.c",
-
-    # not traditional source files
-    #"ti_utils_build_linker.cmd.genlibs",
-    #"syscfg_c.rov.xs",
-    #"ti_utils_runtime_model.gv",
-    #"ti_utils_runtime_Makefile",
-    #"ti_ble_app_config.opt",
-    #"ti_build_config.opt",
   ]
 
+  if (chip_enable_ota_requestor) {
+    sources = [ "${project_dir}/chip_ota.syscfg" ]
+  } else {
+    sources = [ "${project_dir}/chip.syscfg" ]
+    outputs += [
+      "ti_devices_config.c",
+      "ti_devices_config.h",
+    ]
+  }
+
   public_configs = [ ":sdk_dmm_config" ]
 
   cflags = [
diff --git a/examples/lighting-app/cc13x2x7_26x2x7/args.gni b/examples/lighting-app/cc13x2x7_26x2x7/args.gni
index 9e64039..56695a5 100644
--- a/examples/lighting-app/cc13x2x7_26x2x7/args.gni
+++ b/examples/lighting-app/cc13x2x7_26x2x7/args.gni
@@ -36,7 +36,7 @@
 chip_progress_logging = false
 
 #chip_detail_logging = false
-#chip_automation_logging = false
+chip_automation_logging = false
 
 # BLE options
 chip_config_network_layer_ble = true
diff --git a/examples/lighting-app/cc13x2x7_26x2x7/chip.syscfg b/examples/lighting-app/cc13x2x7_26x2x7/chip.syscfg
index 995ad22..d190703 100644
--- a/examples/lighting-app/cc13x2x7_26x2x7/chip.syscfg
+++ b/examples/lighting-app/cc13x2x7_26x2x7/chip.syscfg
@@ -84,8 +84,7 @@
     CCFG[setting] = ccfgSettings[setting];
 }
 
-// Disable CCFG generation, this is added by the BIM project
-CCFG.enableCodeGeneration = false;
+CCFG.enableCodeGeneration = true;
 
 /* NVS */
 NVS1.$name                      = "CONFIG_NVSINTERNAL";
diff --git a/examples/lighting-app/cc13x2x7_26x2x7/chip_ota.syscfg b/examples/lighting-app/cc13x2x7_26x2x7/chip_ota.syscfg
new file mode 100644
index 0000000..995ad22
--- /dev/null
+++ b/examples/lighting-app/cc13x2x7_26x2x7/chip_ota.syscfg
@@ -0,0 +1,238 @@
+/*
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2020 Texas Instruments Incorporated
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+
+/* Modules */
+var AESCCM      = scripting.addModule("/ti/drivers/AESCCM");
+var AESECB      = scripting.addModule("/ti/drivers/AESECB");
+var Button      = scripting.addModule("/ti/drivers/apps/Button");
+var LED         = scripting.addModule("/ti/drivers/apps/LED");
+var NVS         = scripting.addModule("/ti/drivers/NVS");
+var RF          = scripting.addModule("/ti/drivers/RF");
+var RFDesign    = scripting.addModule("ti/devices/radioconfig/rfdesign");
+var RFCustom    = scripting.addModule("/ti/devices/radioconfig/custom");
+var TRNG        = scripting.addModule("/ti/drivers/TRNG");
+var SHA2        = scripting.addModule("/ti/drivers/SHA2");
+var UART2       = scripting.addModule("/ti/drivers/UART2");
+var ble         = scripting.addModule("/ti/ble5stack/ble");
+var dmm         = scripting.addModule("/ti/dmm/dmm");
+var AESCTRDRBG  = scripting.addModule("/ti/drivers/AESCTRDRBG");
+var ECDH        = scripting.addModule("/ti/drivers/ECDH");
+
+/* Instances */
+var AESCCM1     = AESCCM.addInstance();
+var AESECB1     = AESECB.addInstance();
+var AESECB2     = AESECB.addInstance();
+var Button1     = Button.addInstance();
+var Button2     = Button.addInstance();
+var NVS1        = NVS.addInstance();
+var NVS2        = NVS.addInstance();
+var SHA21       = SHA2.addInstance();
+var LED1        = LED.addInstance();
+var LED2        = LED.addInstance();
+var TRNG1       = TRNG.addInstance();
+var TRNG2       = TRNG.addInstance();
+var TRNG3       = TRNG.addInstance();
+var UART2      = UART2.addInstance();
+var AESCTRDRBG1 = AESCTRDRBG.addInstance();
+var ECDH1       = ECDH.addInstance();
+
+AESCTRDRBG1.$name              = "CONFIG_AESCTRDRBG_0";
+
+AESCCM1.$name = "CONFIG_AESCCM0";
+
+AESECB1.$name = "CONFIG_AESECB0";
+AESECB2.$name = "CONFIG_AESECB_1";
+
+ECDH1.$name = "CONFIG_ECDH0";
+
+/* Left Button */
+Button1.$name                       = "CONFIG_BTN_LEFT";
+Button1.$hardware                   = system.deviceData.board.components["BTN-1"];
+Button1.gpioPin.$name               = "CONFIG_GPIO_BTN1";
+Button1.gpioPin.pull                = "Pull Up";
+Button1.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* Left Button */
+Button2.$name                       = "CONFIG_BTN_RIGHT";
+Button2.$hardware                   = system.deviceData.board.components["BTN-2"];
+Button2.gpioPin.$name               = "CONFIG_GPIO_BTN2";
+Button2.gpioPin.pull                = "Pull Up";
+Button2.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* ======== CCFG ======== */
+var CCFG  = scripting.addModule("/ti/devices/CCFG");
+const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings;
+for(var setting in ccfgSettings)
+{
+    CCFG[setting] = ccfgSettings[setting];
+}
+
+// Disable CCFG generation, this is added by the BIM project
+CCFG.enableCodeGeneration = false;
+
+/* NVS */
+NVS1.$name                      = "CONFIG_NVSINTERNAL";
+NVS1.internalFlash.regionBase = 0xAA000;
+NVS1.internalFlash.regionSize = 0x4000;
+
+NVS2.$name                                 = "CONFIG_NVSEXTERNAL";
+NVS2.nvsType                               = "External"; // NVS Region Type
+NVS2.$hardware                             = system.deviceData.board.components.MX25R8035F;
+
+/* RF */
+/* if an antenna component exists, assign it to the rf instance */
+if (system.deviceData.board && system.deviceData.board.components.RF) {
+    RF.$hardware = system.deviceData.board.components.RF;
+}
+
+const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings;
+for(var setting in rfDesignSettings)
+{
+    RFDesign[setting] = rfDesignSettings[setting];
+}
+
+/* Handling for RF frontend characterization */
+if(RFDesign.rfDesign.match(/LP_CC2652PSIP/))
+{
+    RFCustom.ieee = ["ieee154p10"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154p10.codeExportConfig
+}
+else
+{
+    RFCustom.ieee = ["ieee154"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154.codeExportConfig
+}
+
+var cmdList = [
+    "cmdIeeeTx",
+    "cmdIeeeRx",
+    "cmdIeeeCsma",
+    "cmdIeeeEdScan",
+    "cmdIeeeRxAck",
+    "cmdTxTest"
+];
+
+rfCodeExportConfig.useConst     = true;
+rfCodeExportConfig.useMulti     = true;
+rfCodeExportConfig.symGenMethod = "Custom";
+
+const deviceId = system.deviceData.deviceId;
+
+// Add high PA options if present
+if(deviceId.match(/CC(265[12]R|2674R|1352R1|1354R)/))
+{
+    cmdList.push("cmdRadioSetup");
+    rfCodeExportConfig.cmdRadioSetup = "RF_cmdIeeeRadioSetup";
+}
+else if(deviceId.match(/CC(265[12]P|2674P|1352P)/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    rfCodeExportConfig.paExport = "combined";
+}
+else if(deviceId.match(/CC(265[34]|1354)P/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    // currently not characterized for high PA
+}
+else
+{
+    throw new Error("Could not match platform to any known platform types");
+}
+
+rfCodeExportConfig.cmdList_ieee_15_4 = cmdList;
+
+/* Red LED */
+LED1.$name                      = "CONFIG_LED_RED";
+LED1.$hardware                  = system.deviceData.board.components.LED_RED;
+LED1.gpioPin.$name              = "CONFIG_GPIO_RLED";
+LED1.gpioPin.mode               = "Output";
+LED1.gpioPin.callbackFunction   = "";
+
+/* Green LED */
+LED2.$name                      = "CONFIG_LED_GREEN";
+LED2.$hardware                  = system.deviceData.board.components.LED_GREEN;
+LED2.gpioPin.$name              = "CONFIG_GPIO_GLED";
+LED2.gpioPin.mode               = "Output";
+LED2.gpioPin.callbackFunction   = "";
+
+/* Debug UART  */
+UART2.$hardware     = system.deviceData.board.components.XDS110UART;
+UART2.$name         = "CONFIG_UART2_DEBUG";
+
+/* TRNG */
+TRNG1.$name     = "CONFIG_TRNG_0";
+TRNG2.$name     = "CONFIG_TRNG_THREAD";
+TRNG3.$name     = "CONFIG_TRNG_APP";
+
+/* BLE */
+ble.addressMode                                           = "ADDRMODE_RP_WITH_PUBLIC_ID";
+ble.maxConnNum                                            = 1;
+ble.numOfAdvSets                                          = 1;
+ble.lockProject                                           = true;
+ble.oneLibSizeOpt                                         = true;
+ble.maxPDUSize                                            = 255;
+ble.radioConfig.codeExportConfig.$name                    = "ti_devices_radioconfig_code_export_param2";
+ble.connUpdateParamsPeripheral.$name                      = "ti_ble5stack_general_ble_conn_update_params0";
+ble.connUpdateParamsPeripheral.reqMinConnInt               = 30;
+ble.connUpdateParamsPeripheral.reqMaxConnInt               = 50;
+
+
+ble.advSet1.$name                                         = "ti_ble5stack_broadcaster_advertisement_set0";
+ble.advSet1.advParam1.$name                               = "ti_ble5stack_broadcaster_advertisement_params0";
+
+/* DMM */
+dmm.project                                          = "ti_thread_thermostat_remote_display";
+dmm.stackRoles                                       = ["blePeripheral","threadFTD"];
+dmm.lockStackRoles                                   = true;
+dmm.numApplicationStates                             = 10;
+dmm.applicationState0                                = "ANY";
+dmm.applicationState1                                = "DMMPOLICY_BLE_IDLE";
+dmm.applicationState2                                = "DMMPOLICY_BLE_ADV";
+dmm.applicationState3                                = "DMMPOLICY_BLE_CONNECTING";
+dmm.applicationState4                                = "DMMPOLICY_BLE_HIGH_BANDWIDTH";
+dmm.applicationState5                                = "DMMPOLICY_BLE_CONNECTED";
+dmm.applicationState6                                = "DMMPOLICY_BLE_OAD";
+dmm.applicationState7                                = "DMMPOLICY_THREAD_IDLE";
+dmm.applicationState8                                = "DMMPOLICY_THREAD_LINK_EST";
+dmm.applicationState9                                = "DMMPOLICY_THREAD_DATA";
+dmm.policyArray.create(4);
+dmm.policyArray[0].$name                             = "ti_dmm_policy_dmm_policy0";
+dmm.policyArray[0].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble0";
+dmm.policyArray[0].blePeripheral.applicationStates   = ["applicationState6"];
+dmm.policyArray[0].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread0";
+dmm.policyArray[0].threadFTD.pause                   = "DMMPOLICY_PAUSED";
+dmm.policyArray[1].$name                             = "ti_dmm_policy_dmm_policy1";
+dmm.policyArray[1].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble1";
+dmm.policyArray[1].blePeripheral.applicationStates   = ["applicationState3","applicationState4"];
+dmm.policyArray[1].blePeripheral.weight              = 25;
+dmm.policyArray[1].blePeripheral.appliedActivity     = ["DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION"];
+dmm.policyArray[1].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread1";
+dmm.policyArray[2].$name                             = "ti_dmm_policy_dmm_policy2";
+dmm.policyArray[2].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble2";
+dmm.policyArray[2].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread2";
+dmm.policyArray[2].threadFTD.weight                  = 30;
+dmm.policyArray[2].threadFTD.applicationStates       = ["applicationState8"];
+dmm.policyArray[2].threadFTD.appliedActivity         = ["DMMPOLICY_APPLIED_ACTIVITY_ALL"];
+dmm.policyArray[3].$name                             = "ti_dmm_policy_dmm_policy3";
+dmm.policyArray[3].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble3";
+dmm.policyArray[3].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread3";
+dmm.policyArray[3].threadFTD.weight                  = 1;
diff --git a/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn b/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn
index 0bd2dfe..1bbb257 100644
--- a/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn
@@ -34,8 +34,6 @@
 }
 
 ti_sysconfig("sysconfig") {
-  sources = [ "${project_dir}/chip.syscfg" ]
-
   outputs = [
     "ti_radio_config.c",
     "ti_radio_config.h",
@@ -45,20 +43,18 @@
     "ti_ble_config.h",
     "ti_dmm_application_policy.c",
     "ti_dmm_application_policy.h",
-
-    # disabled until upstream generation is aligned
-    #"tiop_config.h",
-    #"tiop_config.c",
-
-    # not traditional source files
-    #"ti_utils_build_linker.cmd.genlibs",
-    #"syscfg_c.rov.xs",
-    #"ti_utils_runtime_model.gv",
-    #"ti_utils_runtime_Makefile",
-    #"ti_ble_app_config.opt",
-    #"ti_build_config.opt",
   ]
 
+  if (chip_enable_ota_requestor) {
+    sources = [ "${project_dir}/chip_ota.syscfg" ]
+  } else {
+    sources = [ "${project_dir}/chip.syscfg" ]
+    outputs += [
+      "ti_devices_config.c",
+      "ti_devices_config.h",
+    ]
+  }
+
   public_configs = [ ":sdk_dmm_config" ]
 
   cflags = [
diff --git a/examples/lock-app/cc13x2x7_26x2x7/args.gni b/examples/lock-app/cc13x2x7_26x2x7/args.gni
index 52ad321..8c7a4eb 100644
--- a/examples/lock-app/cc13x2x7_26x2x7/args.gni
+++ b/examples/lock-app/cc13x2x7_26x2x7/args.gni
@@ -36,7 +36,7 @@
 chip_progress_logging = false
 
 #chip_detail_logging = false
-chip_automation_logging = false
+#chip_automation_logging = false
 
 # BLE options
 chip_config_network_layer_ble = true
diff --git a/examples/lock-app/cc13x2x7_26x2x7/chip.syscfg b/examples/lock-app/cc13x2x7_26x2x7/chip.syscfg
index 995ad22..d190703 100644
--- a/examples/lock-app/cc13x2x7_26x2x7/chip.syscfg
+++ b/examples/lock-app/cc13x2x7_26x2x7/chip.syscfg
@@ -84,8 +84,7 @@
     CCFG[setting] = ccfgSettings[setting];
 }
 
-// Disable CCFG generation, this is added by the BIM project
-CCFG.enableCodeGeneration = false;
+CCFG.enableCodeGeneration = true;
 
 /* NVS */
 NVS1.$name                      = "CONFIG_NVSINTERNAL";
diff --git a/examples/lock-app/cc13x2x7_26x2x7/chip_ota.syscfg b/examples/lock-app/cc13x2x7_26x2x7/chip_ota.syscfg
new file mode 100644
index 0000000..995ad22
--- /dev/null
+++ b/examples/lock-app/cc13x2x7_26x2x7/chip_ota.syscfg
@@ -0,0 +1,238 @@
+/*
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2020 Texas Instruments Incorporated
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+
+/* Modules */
+var AESCCM      = scripting.addModule("/ti/drivers/AESCCM");
+var AESECB      = scripting.addModule("/ti/drivers/AESECB");
+var Button      = scripting.addModule("/ti/drivers/apps/Button");
+var LED         = scripting.addModule("/ti/drivers/apps/LED");
+var NVS         = scripting.addModule("/ti/drivers/NVS");
+var RF          = scripting.addModule("/ti/drivers/RF");
+var RFDesign    = scripting.addModule("ti/devices/radioconfig/rfdesign");
+var RFCustom    = scripting.addModule("/ti/devices/radioconfig/custom");
+var TRNG        = scripting.addModule("/ti/drivers/TRNG");
+var SHA2        = scripting.addModule("/ti/drivers/SHA2");
+var UART2       = scripting.addModule("/ti/drivers/UART2");
+var ble         = scripting.addModule("/ti/ble5stack/ble");
+var dmm         = scripting.addModule("/ti/dmm/dmm");
+var AESCTRDRBG  = scripting.addModule("/ti/drivers/AESCTRDRBG");
+var ECDH        = scripting.addModule("/ti/drivers/ECDH");
+
+/* Instances */
+var AESCCM1     = AESCCM.addInstance();
+var AESECB1     = AESECB.addInstance();
+var AESECB2     = AESECB.addInstance();
+var Button1     = Button.addInstance();
+var Button2     = Button.addInstance();
+var NVS1        = NVS.addInstance();
+var NVS2        = NVS.addInstance();
+var SHA21       = SHA2.addInstance();
+var LED1        = LED.addInstance();
+var LED2        = LED.addInstance();
+var TRNG1       = TRNG.addInstance();
+var TRNG2       = TRNG.addInstance();
+var TRNG3       = TRNG.addInstance();
+var UART2      = UART2.addInstance();
+var AESCTRDRBG1 = AESCTRDRBG.addInstance();
+var ECDH1       = ECDH.addInstance();
+
+AESCTRDRBG1.$name              = "CONFIG_AESCTRDRBG_0";
+
+AESCCM1.$name = "CONFIG_AESCCM0";
+
+AESECB1.$name = "CONFIG_AESECB0";
+AESECB2.$name = "CONFIG_AESECB_1";
+
+ECDH1.$name = "CONFIG_ECDH0";
+
+/* Left Button */
+Button1.$name                       = "CONFIG_BTN_LEFT";
+Button1.$hardware                   = system.deviceData.board.components["BTN-1"];
+Button1.gpioPin.$name               = "CONFIG_GPIO_BTN1";
+Button1.gpioPin.pull                = "Pull Up";
+Button1.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* Left Button */
+Button2.$name                       = "CONFIG_BTN_RIGHT";
+Button2.$hardware                   = system.deviceData.board.components["BTN-2"];
+Button2.gpioPin.$name               = "CONFIG_GPIO_BTN2";
+Button2.gpioPin.pull                = "Pull Up";
+Button2.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* ======== CCFG ======== */
+var CCFG  = scripting.addModule("/ti/devices/CCFG");
+const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings;
+for(var setting in ccfgSettings)
+{
+    CCFG[setting] = ccfgSettings[setting];
+}
+
+// Disable CCFG generation, this is added by the BIM project
+CCFG.enableCodeGeneration = false;
+
+/* NVS */
+NVS1.$name                      = "CONFIG_NVSINTERNAL";
+NVS1.internalFlash.regionBase = 0xAA000;
+NVS1.internalFlash.regionSize = 0x4000;
+
+NVS2.$name                                 = "CONFIG_NVSEXTERNAL";
+NVS2.nvsType                               = "External"; // NVS Region Type
+NVS2.$hardware                             = system.deviceData.board.components.MX25R8035F;
+
+/* RF */
+/* if an antenna component exists, assign it to the rf instance */
+if (system.deviceData.board && system.deviceData.board.components.RF) {
+    RF.$hardware = system.deviceData.board.components.RF;
+}
+
+const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings;
+for(var setting in rfDesignSettings)
+{
+    RFDesign[setting] = rfDesignSettings[setting];
+}
+
+/* Handling for RF frontend characterization */
+if(RFDesign.rfDesign.match(/LP_CC2652PSIP/))
+{
+    RFCustom.ieee = ["ieee154p10"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154p10.codeExportConfig
+}
+else
+{
+    RFCustom.ieee = ["ieee154"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154.codeExportConfig
+}
+
+var cmdList = [
+    "cmdIeeeTx",
+    "cmdIeeeRx",
+    "cmdIeeeCsma",
+    "cmdIeeeEdScan",
+    "cmdIeeeRxAck",
+    "cmdTxTest"
+];
+
+rfCodeExportConfig.useConst     = true;
+rfCodeExportConfig.useMulti     = true;
+rfCodeExportConfig.symGenMethod = "Custom";
+
+const deviceId = system.deviceData.deviceId;
+
+// Add high PA options if present
+if(deviceId.match(/CC(265[12]R|2674R|1352R1|1354R)/))
+{
+    cmdList.push("cmdRadioSetup");
+    rfCodeExportConfig.cmdRadioSetup = "RF_cmdIeeeRadioSetup";
+}
+else if(deviceId.match(/CC(265[12]P|2674P|1352P)/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    rfCodeExportConfig.paExport = "combined";
+}
+else if(deviceId.match(/CC(265[34]|1354)P/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    // currently not characterized for high PA
+}
+else
+{
+    throw new Error("Could not match platform to any known platform types");
+}
+
+rfCodeExportConfig.cmdList_ieee_15_4 = cmdList;
+
+/* Red LED */
+LED1.$name                      = "CONFIG_LED_RED";
+LED1.$hardware                  = system.deviceData.board.components.LED_RED;
+LED1.gpioPin.$name              = "CONFIG_GPIO_RLED";
+LED1.gpioPin.mode               = "Output";
+LED1.gpioPin.callbackFunction   = "";
+
+/* Green LED */
+LED2.$name                      = "CONFIG_LED_GREEN";
+LED2.$hardware                  = system.deviceData.board.components.LED_GREEN;
+LED2.gpioPin.$name              = "CONFIG_GPIO_GLED";
+LED2.gpioPin.mode               = "Output";
+LED2.gpioPin.callbackFunction   = "";
+
+/* Debug UART  */
+UART2.$hardware     = system.deviceData.board.components.XDS110UART;
+UART2.$name         = "CONFIG_UART2_DEBUG";
+
+/* TRNG */
+TRNG1.$name     = "CONFIG_TRNG_0";
+TRNG2.$name     = "CONFIG_TRNG_THREAD";
+TRNG3.$name     = "CONFIG_TRNG_APP";
+
+/* BLE */
+ble.addressMode                                           = "ADDRMODE_RP_WITH_PUBLIC_ID";
+ble.maxConnNum                                            = 1;
+ble.numOfAdvSets                                          = 1;
+ble.lockProject                                           = true;
+ble.oneLibSizeOpt                                         = true;
+ble.maxPDUSize                                            = 255;
+ble.radioConfig.codeExportConfig.$name                    = "ti_devices_radioconfig_code_export_param2";
+ble.connUpdateParamsPeripheral.$name                      = "ti_ble5stack_general_ble_conn_update_params0";
+ble.connUpdateParamsPeripheral.reqMinConnInt               = 30;
+ble.connUpdateParamsPeripheral.reqMaxConnInt               = 50;
+
+
+ble.advSet1.$name                                         = "ti_ble5stack_broadcaster_advertisement_set0";
+ble.advSet1.advParam1.$name                               = "ti_ble5stack_broadcaster_advertisement_params0";
+
+/* DMM */
+dmm.project                                          = "ti_thread_thermostat_remote_display";
+dmm.stackRoles                                       = ["blePeripheral","threadFTD"];
+dmm.lockStackRoles                                   = true;
+dmm.numApplicationStates                             = 10;
+dmm.applicationState0                                = "ANY";
+dmm.applicationState1                                = "DMMPOLICY_BLE_IDLE";
+dmm.applicationState2                                = "DMMPOLICY_BLE_ADV";
+dmm.applicationState3                                = "DMMPOLICY_BLE_CONNECTING";
+dmm.applicationState4                                = "DMMPOLICY_BLE_HIGH_BANDWIDTH";
+dmm.applicationState5                                = "DMMPOLICY_BLE_CONNECTED";
+dmm.applicationState6                                = "DMMPOLICY_BLE_OAD";
+dmm.applicationState7                                = "DMMPOLICY_THREAD_IDLE";
+dmm.applicationState8                                = "DMMPOLICY_THREAD_LINK_EST";
+dmm.applicationState9                                = "DMMPOLICY_THREAD_DATA";
+dmm.policyArray.create(4);
+dmm.policyArray[0].$name                             = "ti_dmm_policy_dmm_policy0";
+dmm.policyArray[0].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble0";
+dmm.policyArray[0].blePeripheral.applicationStates   = ["applicationState6"];
+dmm.policyArray[0].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread0";
+dmm.policyArray[0].threadFTD.pause                   = "DMMPOLICY_PAUSED";
+dmm.policyArray[1].$name                             = "ti_dmm_policy_dmm_policy1";
+dmm.policyArray[1].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble1";
+dmm.policyArray[1].blePeripheral.applicationStates   = ["applicationState3","applicationState4"];
+dmm.policyArray[1].blePeripheral.weight              = 25;
+dmm.policyArray[1].blePeripheral.appliedActivity     = ["DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION"];
+dmm.policyArray[1].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread1";
+dmm.policyArray[2].$name                             = "ti_dmm_policy_dmm_policy2";
+dmm.policyArray[2].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble2";
+dmm.policyArray[2].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread2";
+dmm.policyArray[2].threadFTD.weight                  = 30;
+dmm.policyArray[2].threadFTD.applicationStates       = ["applicationState8"];
+dmm.policyArray[2].threadFTD.appliedActivity         = ["DMMPOLICY_APPLIED_ACTIVITY_ALL"];
+dmm.policyArray[3].$name                             = "ti_dmm_policy_dmm_policy3";
+dmm.policyArray[3].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble3";
+dmm.policyArray[3].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread3";
+dmm.policyArray[3].threadFTD.weight                  = 1;
diff --git a/examples/lock-app/cc13x4_26x4/args.gni b/examples/lock-app/cc13x4_26x4/args.gni
index c34d0cf..1d6fca5 100644
--- a/examples/lock-app/cc13x4_26x4/args.gni
+++ b/examples/lock-app/cc13x4_26x4/args.gni
@@ -29,7 +29,7 @@
 
 chip_enable_ota_requestor = false
 
-chip_openthread_ftd = false
+chip_openthread_ftd = true
 openthread_external_platform = "${chip_root}/third_party/openthread/platforms/cc13x4_26x4:libopenthread-cc13x4_cc26x4"
 
 # Disable CHIP Logging
diff --git a/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn b/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn
index 5a9aed0..525133b 100644
--- a/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn
@@ -33,8 +33,6 @@
 }
 
 ti_sysconfig("sysconfig") {
-  sources = [ "${project_dir}/chip.syscfg" ]
-
   outputs = [
     "ti_radio_config.c",
     "ti_radio_config.h",
@@ -44,20 +42,18 @@
     "ti_ble_config.h",
     "ti_dmm_application_policy.c",
     "ti_dmm_application_policy.h",
-
-    # disabled until upstream generation is aligned
-    #"tiop_config.h",
-    #"tiop_config.c",
-
-    # not traditional source files
-    #"ti_utils_build_linker.cmd.genlibs",
-    #"syscfg_c.rov.xs",
-    #"ti_utils_runtime_model.gv",
-    #"ti_utils_runtime_Makefile",
-    #"ti_ble_app_config.opt",
-    #"ti_build_config.opt",
   ]
 
+  if (chip_enable_ota_requestor) {
+    sources = [ "${project_dir}/chip_ota.syscfg" ]
+  } else {
+    sources = [ "${project_dir}/chip.syscfg" ]
+    outputs += [
+      "ti_devices_config.c",
+      "ti_devices_config.h",
+    ]
+  }
+
   public_configs = [ ":sdk_dmm_config" ]
 
   cflags = [
diff --git a/examples/pump-app/cc13x2x7_26x2x7/chip.syscfg b/examples/pump-app/cc13x2x7_26x2x7/chip.syscfg
index 995ad22..d190703 100644
--- a/examples/pump-app/cc13x2x7_26x2x7/chip.syscfg
+++ b/examples/pump-app/cc13x2x7_26x2x7/chip.syscfg
@@ -84,8 +84,7 @@
     CCFG[setting] = ccfgSettings[setting];
 }
 
-// Disable CCFG generation, this is added by the BIM project
-CCFG.enableCodeGeneration = false;
+CCFG.enableCodeGeneration = true;
 
 /* NVS */
 NVS1.$name                      = "CONFIG_NVSINTERNAL";
diff --git a/examples/pump-app/cc13x2x7_26x2x7/chip_ota.syscfg b/examples/pump-app/cc13x2x7_26x2x7/chip_ota.syscfg
new file mode 100644
index 0000000..995ad22
--- /dev/null
+++ b/examples/pump-app/cc13x2x7_26x2x7/chip_ota.syscfg
@@ -0,0 +1,238 @@
+/*
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2020 Texas Instruments Incorporated
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+
+/* Modules */
+var AESCCM      = scripting.addModule("/ti/drivers/AESCCM");
+var AESECB      = scripting.addModule("/ti/drivers/AESECB");
+var Button      = scripting.addModule("/ti/drivers/apps/Button");
+var LED         = scripting.addModule("/ti/drivers/apps/LED");
+var NVS         = scripting.addModule("/ti/drivers/NVS");
+var RF          = scripting.addModule("/ti/drivers/RF");
+var RFDesign    = scripting.addModule("ti/devices/radioconfig/rfdesign");
+var RFCustom    = scripting.addModule("/ti/devices/radioconfig/custom");
+var TRNG        = scripting.addModule("/ti/drivers/TRNG");
+var SHA2        = scripting.addModule("/ti/drivers/SHA2");
+var UART2       = scripting.addModule("/ti/drivers/UART2");
+var ble         = scripting.addModule("/ti/ble5stack/ble");
+var dmm         = scripting.addModule("/ti/dmm/dmm");
+var AESCTRDRBG  = scripting.addModule("/ti/drivers/AESCTRDRBG");
+var ECDH        = scripting.addModule("/ti/drivers/ECDH");
+
+/* Instances */
+var AESCCM1     = AESCCM.addInstance();
+var AESECB1     = AESECB.addInstance();
+var AESECB2     = AESECB.addInstance();
+var Button1     = Button.addInstance();
+var Button2     = Button.addInstance();
+var NVS1        = NVS.addInstance();
+var NVS2        = NVS.addInstance();
+var SHA21       = SHA2.addInstance();
+var LED1        = LED.addInstance();
+var LED2        = LED.addInstance();
+var TRNG1       = TRNG.addInstance();
+var TRNG2       = TRNG.addInstance();
+var TRNG3       = TRNG.addInstance();
+var UART2      = UART2.addInstance();
+var AESCTRDRBG1 = AESCTRDRBG.addInstance();
+var ECDH1       = ECDH.addInstance();
+
+AESCTRDRBG1.$name              = "CONFIG_AESCTRDRBG_0";
+
+AESCCM1.$name = "CONFIG_AESCCM0";
+
+AESECB1.$name = "CONFIG_AESECB0";
+AESECB2.$name = "CONFIG_AESECB_1";
+
+ECDH1.$name = "CONFIG_ECDH0";
+
+/* Left Button */
+Button1.$name                       = "CONFIG_BTN_LEFT";
+Button1.$hardware                   = system.deviceData.board.components["BTN-1"];
+Button1.gpioPin.$name               = "CONFIG_GPIO_BTN1";
+Button1.gpioPin.pull                = "Pull Up";
+Button1.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* Left Button */
+Button2.$name                       = "CONFIG_BTN_RIGHT";
+Button2.$hardware                   = system.deviceData.board.components["BTN-2"];
+Button2.gpioPin.$name               = "CONFIG_GPIO_BTN2";
+Button2.gpioPin.pull                = "Pull Up";
+Button2.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* ======== CCFG ======== */
+var CCFG  = scripting.addModule("/ti/devices/CCFG");
+const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings;
+for(var setting in ccfgSettings)
+{
+    CCFG[setting] = ccfgSettings[setting];
+}
+
+// Disable CCFG generation, this is added by the BIM project
+CCFG.enableCodeGeneration = false;
+
+/* NVS */
+NVS1.$name                      = "CONFIG_NVSINTERNAL";
+NVS1.internalFlash.regionBase = 0xAA000;
+NVS1.internalFlash.regionSize = 0x4000;
+
+NVS2.$name                                 = "CONFIG_NVSEXTERNAL";
+NVS2.nvsType                               = "External"; // NVS Region Type
+NVS2.$hardware                             = system.deviceData.board.components.MX25R8035F;
+
+/* RF */
+/* if an antenna component exists, assign it to the rf instance */
+if (system.deviceData.board && system.deviceData.board.components.RF) {
+    RF.$hardware = system.deviceData.board.components.RF;
+}
+
+const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings;
+for(var setting in rfDesignSettings)
+{
+    RFDesign[setting] = rfDesignSettings[setting];
+}
+
+/* Handling for RF frontend characterization */
+if(RFDesign.rfDesign.match(/LP_CC2652PSIP/))
+{
+    RFCustom.ieee = ["ieee154p10"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154p10.codeExportConfig
+}
+else
+{
+    RFCustom.ieee = ["ieee154"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154.codeExportConfig
+}
+
+var cmdList = [
+    "cmdIeeeTx",
+    "cmdIeeeRx",
+    "cmdIeeeCsma",
+    "cmdIeeeEdScan",
+    "cmdIeeeRxAck",
+    "cmdTxTest"
+];
+
+rfCodeExportConfig.useConst     = true;
+rfCodeExportConfig.useMulti     = true;
+rfCodeExportConfig.symGenMethod = "Custom";
+
+const deviceId = system.deviceData.deviceId;
+
+// Add high PA options if present
+if(deviceId.match(/CC(265[12]R|2674R|1352R1|1354R)/))
+{
+    cmdList.push("cmdRadioSetup");
+    rfCodeExportConfig.cmdRadioSetup = "RF_cmdIeeeRadioSetup";
+}
+else if(deviceId.match(/CC(265[12]P|2674P|1352P)/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    rfCodeExportConfig.paExport = "combined";
+}
+else if(deviceId.match(/CC(265[34]|1354)P/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    // currently not characterized for high PA
+}
+else
+{
+    throw new Error("Could not match platform to any known platform types");
+}
+
+rfCodeExportConfig.cmdList_ieee_15_4 = cmdList;
+
+/* Red LED */
+LED1.$name                      = "CONFIG_LED_RED";
+LED1.$hardware                  = system.deviceData.board.components.LED_RED;
+LED1.gpioPin.$name              = "CONFIG_GPIO_RLED";
+LED1.gpioPin.mode               = "Output";
+LED1.gpioPin.callbackFunction   = "";
+
+/* Green LED */
+LED2.$name                      = "CONFIG_LED_GREEN";
+LED2.$hardware                  = system.deviceData.board.components.LED_GREEN;
+LED2.gpioPin.$name              = "CONFIG_GPIO_GLED";
+LED2.gpioPin.mode               = "Output";
+LED2.gpioPin.callbackFunction   = "";
+
+/* Debug UART  */
+UART2.$hardware     = system.deviceData.board.components.XDS110UART;
+UART2.$name         = "CONFIG_UART2_DEBUG";
+
+/* TRNG */
+TRNG1.$name     = "CONFIG_TRNG_0";
+TRNG2.$name     = "CONFIG_TRNG_THREAD";
+TRNG3.$name     = "CONFIG_TRNG_APP";
+
+/* BLE */
+ble.addressMode                                           = "ADDRMODE_RP_WITH_PUBLIC_ID";
+ble.maxConnNum                                            = 1;
+ble.numOfAdvSets                                          = 1;
+ble.lockProject                                           = true;
+ble.oneLibSizeOpt                                         = true;
+ble.maxPDUSize                                            = 255;
+ble.radioConfig.codeExportConfig.$name                    = "ti_devices_radioconfig_code_export_param2";
+ble.connUpdateParamsPeripheral.$name                      = "ti_ble5stack_general_ble_conn_update_params0";
+ble.connUpdateParamsPeripheral.reqMinConnInt               = 30;
+ble.connUpdateParamsPeripheral.reqMaxConnInt               = 50;
+
+
+ble.advSet1.$name                                         = "ti_ble5stack_broadcaster_advertisement_set0";
+ble.advSet1.advParam1.$name                               = "ti_ble5stack_broadcaster_advertisement_params0";
+
+/* DMM */
+dmm.project                                          = "ti_thread_thermostat_remote_display";
+dmm.stackRoles                                       = ["blePeripheral","threadFTD"];
+dmm.lockStackRoles                                   = true;
+dmm.numApplicationStates                             = 10;
+dmm.applicationState0                                = "ANY";
+dmm.applicationState1                                = "DMMPOLICY_BLE_IDLE";
+dmm.applicationState2                                = "DMMPOLICY_BLE_ADV";
+dmm.applicationState3                                = "DMMPOLICY_BLE_CONNECTING";
+dmm.applicationState4                                = "DMMPOLICY_BLE_HIGH_BANDWIDTH";
+dmm.applicationState5                                = "DMMPOLICY_BLE_CONNECTED";
+dmm.applicationState6                                = "DMMPOLICY_BLE_OAD";
+dmm.applicationState7                                = "DMMPOLICY_THREAD_IDLE";
+dmm.applicationState8                                = "DMMPOLICY_THREAD_LINK_EST";
+dmm.applicationState9                                = "DMMPOLICY_THREAD_DATA";
+dmm.policyArray.create(4);
+dmm.policyArray[0].$name                             = "ti_dmm_policy_dmm_policy0";
+dmm.policyArray[0].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble0";
+dmm.policyArray[0].blePeripheral.applicationStates   = ["applicationState6"];
+dmm.policyArray[0].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread0";
+dmm.policyArray[0].threadFTD.pause                   = "DMMPOLICY_PAUSED";
+dmm.policyArray[1].$name                             = "ti_dmm_policy_dmm_policy1";
+dmm.policyArray[1].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble1";
+dmm.policyArray[1].blePeripheral.applicationStates   = ["applicationState3","applicationState4"];
+dmm.policyArray[1].blePeripheral.weight              = 25;
+dmm.policyArray[1].blePeripheral.appliedActivity     = ["DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION"];
+dmm.policyArray[1].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread1";
+dmm.policyArray[2].$name                             = "ti_dmm_policy_dmm_policy2";
+dmm.policyArray[2].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble2";
+dmm.policyArray[2].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread2";
+dmm.policyArray[2].threadFTD.weight                  = 30;
+dmm.policyArray[2].threadFTD.applicationStates       = ["applicationState8"];
+dmm.policyArray[2].threadFTD.appliedActivity         = ["DMMPOLICY_APPLIED_ACTIVITY_ALL"];
+dmm.policyArray[3].$name                             = "ti_dmm_policy_dmm_policy3";
+dmm.policyArray[3].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble3";
+dmm.policyArray[3].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread3";
+dmm.policyArray[3].threadFTD.weight                  = 1;
diff --git a/examples/pump-app/cc13x4_26x4/args.gni b/examples/pump-app/cc13x4_26x4/args.gni
index 93f1bd1..6ce8fc0 100644
--- a/examples/pump-app/cc13x4_26x4/args.gni
+++ b/examples/pump-app/cc13x4_26x4/args.gni
@@ -30,6 +30,7 @@
 chip_enable_ota_requestor = false
 
 openthread_external_platform = "${chip_root}/third_party/openthread/platforms/cc13x4_26x4:libopenthread-cc13x4_cc26x4"
+chip_openthread_ftd = true
 
 # Disable CHIP Logging
 #chip_progress_logging = false
diff --git a/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn b/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn
index 0155ff6..8d0d2d4 100644
--- a/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn
@@ -34,8 +34,6 @@
 }
 
 ti_sysconfig("sysconfig") {
-  sources = [ "${project_dir}/chip.syscfg" ]
-
   outputs = [
     "ti_radio_config.c",
     "ti_radio_config.h",
@@ -45,20 +43,18 @@
     "ti_ble_config.h",
     "ti_dmm_application_policy.c",
     "ti_dmm_application_policy.h",
-
-    # disabled until upstream generation is aligned
-    #"tiop_config.h",
-    #"tiop_config.c",
-
-    # not traditional source files
-    #"ti_utils_build_linker.cmd.genlibs",
-    #"syscfg_c.rov.xs",
-    #"ti_utils_runtime_model.gv",
-    #"ti_utils_runtime_Makefile",
-    #"ti_ble_app_config.opt",
-    #"ti_build_config.opt",
   ]
 
+  if (chip_enable_ota_requestor) {
+    sources = [ "${project_dir}/chip_ota.syscfg" ]
+  } else {
+    sources = [ "${project_dir}/chip.syscfg" ]
+    outputs += [
+      "ti_devices_config.c",
+      "ti_devices_config.h",
+    ]
+  }
+
   public_configs = [ ":sdk_dmm_config" ]
 
   cflags = [
diff --git a/examples/pump-controller-app/cc13x2x7_26x2x7/chip.syscfg b/examples/pump-controller-app/cc13x2x7_26x2x7/chip.syscfg
index 995ad22..d190703 100644
--- a/examples/pump-controller-app/cc13x2x7_26x2x7/chip.syscfg
+++ b/examples/pump-controller-app/cc13x2x7_26x2x7/chip.syscfg
@@ -84,8 +84,7 @@
     CCFG[setting] = ccfgSettings[setting];
 }
 
-// Disable CCFG generation, this is added by the BIM project
-CCFG.enableCodeGeneration = false;
+CCFG.enableCodeGeneration = true;
 
 /* NVS */
 NVS1.$name                      = "CONFIG_NVSINTERNAL";
diff --git a/examples/pump-controller-app/cc13x2x7_26x2x7/chip_ota.syscfg b/examples/pump-controller-app/cc13x2x7_26x2x7/chip_ota.syscfg
new file mode 100644
index 0000000..995ad22
--- /dev/null
+++ b/examples/pump-controller-app/cc13x2x7_26x2x7/chip_ota.syscfg
@@ -0,0 +1,238 @@
+/*
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2020 Texas Instruments Incorporated
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+
+/* Modules */
+var AESCCM      = scripting.addModule("/ti/drivers/AESCCM");
+var AESECB      = scripting.addModule("/ti/drivers/AESECB");
+var Button      = scripting.addModule("/ti/drivers/apps/Button");
+var LED         = scripting.addModule("/ti/drivers/apps/LED");
+var NVS         = scripting.addModule("/ti/drivers/NVS");
+var RF          = scripting.addModule("/ti/drivers/RF");
+var RFDesign    = scripting.addModule("ti/devices/radioconfig/rfdesign");
+var RFCustom    = scripting.addModule("/ti/devices/radioconfig/custom");
+var TRNG        = scripting.addModule("/ti/drivers/TRNG");
+var SHA2        = scripting.addModule("/ti/drivers/SHA2");
+var UART2       = scripting.addModule("/ti/drivers/UART2");
+var ble         = scripting.addModule("/ti/ble5stack/ble");
+var dmm         = scripting.addModule("/ti/dmm/dmm");
+var AESCTRDRBG  = scripting.addModule("/ti/drivers/AESCTRDRBG");
+var ECDH        = scripting.addModule("/ti/drivers/ECDH");
+
+/* Instances */
+var AESCCM1     = AESCCM.addInstance();
+var AESECB1     = AESECB.addInstance();
+var AESECB2     = AESECB.addInstance();
+var Button1     = Button.addInstance();
+var Button2     = Button.addInstance();
+var NVS1        = NVS.addInstance();
+var NVS2        = NVS.addInstance();
+var SHA21       = SHA2.addInstance();
+var LED1        = LED.addInstance();
+var LED2        = LED.addInstance();
+var TRNG1       = TRNG.addInstance();
+var TRNG2       = TRNG.addInstance();
+var TRNG3       = TRNG.addInstance();
+var UART2      = UART2.addInstance();
+var AESCTRDRBG1 = AESCTRDRBG.addInstance();
+var ECDH1       = ECDH.addInstance();
+
+AESCTRDRBG1.$name              = "CONFIG_AESCTRDRBG_0";
+
+AESCCM1.$name = "CONFIG_AESCCM0";
+
+AESECB1.$name = "CONFIG_AESECB0";
+AESECB2.$name = "CONFIG_AESECB_1";
+
+ECDH1.$name = "CONFIG_ECDH0";
+
+/* Left Button */
+Button1.$name                       = "CONFIG_BTN_LEFT";
+Button1.$hardware                   = system.deviceData.board.components["BTN-1"];
+Button1.gpioPin.$name               = "CONFIG_GPIO_BTN1";
+Button1.gpioPin.pull                = "Pull Up";
+Button1.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* Left Button */
+Button2.$name                       = "CONFIG_BTN_RIGHT";
+Button2.$hardware                   = system.deviceData.board.components["BTN-2"];
+Button2.gpioPin.$name               = "CONFIG_GPIO_BTN2";
+Button2.gpioPin.pull                = "Pull Up";
+Button2.gpioPin.interruptTrigger    = "Falling Edge";
+
+/* ======== CCFG ======== */
+var CCFG  = scripting.addModule("/ti/devices/CCFG");
+const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings;
+for(var setting in ccfgSettings)
+{
+    CCFG[setting] = ccfgSettings[setting];
+}
+
+// Disable CCFG generation, this is added by the BIM project
+CCFG.enableCodeGeneration = false;
+
+/* NVS */
+NVS1.$name                      = "CONFIG_NVSINTERNAL";
+NVS1.internalFlash.regionBase = 0xAA000;
+NVS1.internalFlash.regionSize = 0x4000;
+
+NVS2.$name                                 = "CONFIG_NVSEXTERNAL";
+NVS2.nvsType                               = "External"; // NVS Region Type
+NVS2.$hardware                             = system.deviceData.board.components.MX25R8035F;
+
+/* RF */
+/* if an antenna component exists, assign it to the rf instance */
+if (system.deviceData.board && system.deviceData.board.components.RF) {
+    RF.$hardware = system.deviceData.board.components.RF;
+}
+
+const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings;
+for(var setting in rfDesignSettings)
+{
+    RFDesign[setting] = rfDesignSettings[setting];
+}
+
+/* Handling for RF frontend characterization */
+if(RFDesign.rfDesign.match(/LP_CC2652PSIP/))
+{
+    RFCustom.ieee = ["ieee154p10"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154p10.codeExportConfig
+}
+else
+{
+    RFCustom.ieee = ["ieee154"];
+    var rfCodeExportConfig = RFCustom.radioConfigieee154.codeExportConfig
+}
+
+var cmdList = [
+    "cmdIeeeTx",
+    "cmdIeeeRx",
+    "cmdIeeeCsma",
+    "cmdIeeeEdScan",
+    "cmdIeeeRxAck",
+    "cmdTxTest"
+];
+
+rfCodeExportConfig.useConst     = true;
+rfCodeExportConfig.useMulti     = true;
+rfCodeExportConfig.symGenMethod = "Custom";
+
+const deviceId = system.deviceData.deviceId;
+
+// Add high PA options if present
+if(deviceId.match(/CC(265[12]R|2674R|1352R1|1354R)/))
+{
+    cmdList.push("cmdRadioSetup");
+    rfCodeExportConfig.cmdRadioSetup = "RF_cmdIeeeRadioSetup";
+}
+else if(deviceId.match(/CC(265[12]P|2674P|1352P)/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    rfCodeExportConfig.paExport = "combined";
+}
+else if(deviceId.match(/CC(265[34]|1354)P/))
+{
+    cmdList.push("cmdRadioSetupPa");
+    rfCodeExportConfig.cmdRadioSetupPa = "RF_cmdIeeeRadioSetup";
+    // currently not characterized for high PA
+}
+else
+{
+    throw new Error("Could not match platform to any known platform types");
+}
+
+rfCodeExportConfig.cmdList_ieee_15_4 = cmdList;
+
+/* Red LED */
+LED1.$name                      = "CONFIG_LED_RED";
+LED1.$hardware                  = system.deviceData.board.components.LED_RED;
+LED1.gpioPin.$name              = "CONFIG_GPIO_RLED";
+LED1.gpioPin.mode               = "Output";
+LED1.gpioPin.callbackFunction   = "";
+
+/* Green LED */
+LED2.$name                      = "CONFIG_LED_GREEN";
+LED2.$hardware                  = system.deviceData.board.components.LED_GREEN;
+LED2.gpioPin.$name              = "CONFIG_GPIO_GLED";
+LED2.gpioPin.mode               = "Output";
+LED2.gpioPin.callbackFunction   = "";
+
+/* Debug UART  */
+UART2.$hardware     = system.deviceData.board.components.XDS110UART;
+UART2.$name         = "CONFIG_UART2_DEBUG";
+
+/* TRNG */
+TRNG1.$name     = "CONFIG_TRNG_0";
+TRNG2.$name     = "CONFIG_TRNG_THREAD";
+TRNG3.$name     = "CONFIG_TRNG_APP";
+
+/* BLE */
+ble.addressMode                                           = "ADDRMODE_RP_WITH_PUBLIC_ID";
+ble.maxConnNum                                            = 1;
+ble.numOfAdvSets                                          = 1;
+ble.lockProject                                           = true;
+ble.oneLibSizeOpt                                         = true;
+ble.maxPDUSize                                            = 255;
+ble.radioConfig.codeExportConfig.$name                    = "ti_devices_radioconfig_code_export_param2";
+ble.connUpdateParamsPeripheral.$name                      = "ti_ble5stack_general_ble_conn_update_params0";
+ble.connUpdateParamsPeripheral.reqMinConnInt               = 30;
+ble.connUpdateParamsPeripheral.reqMaxConnInt               = 50;
+
+
+ble.advSet1.$name                                         = "ti_ble5stack_broadcaster_advertisement_set0";
+ble.advSet1.advParam1.$name                               = "ti_ble5stack_broadcaster_advertisement_params0";
+
+/* DMM */
+dmm.project                                          = "ti_thread_thermostat_remote_display";
+dmm.stackRoles                                       = ["blePeripheral","threadFTD"];
+dmm.lockStackRoles                                   = true;
+dmm.numApplicationStates                             = 10;
+dmm.applicationState0                                = "ANY";
+dmm.applicationState1                                = "DMMPOLICY_BLE_IDLE";
+dmm.applicationState2                                = "DMMPOLICY_BLE_ADV";
+dmm.applicationState3                                = "DMMPOLICY_BLE_CONNECTING";
+dmm.applicationState4                                = "DMMPOLICY_BLE_HIGH_BANDWIDTH";
+dmm.applicationState5                                = "DMMPOLICY_BLE_CONNECTED";
+dmm.applicationState6                                = "DMMPOLICY_BLE_OAD";
+dmm.applicationState7                                = "DMMPOLICY_THREAD_IDLE";
+dmm.applicationState8                                = "DMMPOLICY_THREAD_LINK_EST";
+dmm.applicationState9                                = "DMMPOLICY_THREAD_DATA";
+dmm.policyArray.create(4);
+dmm.policyArray[0].$name                             = "ti_dmm_policy_dmm_policy0";
+dmm.policyArray[0].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble0";
+dmm.policyArray[0].blePeripheral.applicationStates   = ["applicationState6"];
+dmm.policyArray[0].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread0";
+dmm.policyArray[0].threadFTD.pause                   = "DMMPOLICY_PAUSED";
+dmm.policyArray[1].$name                             = "ti_dmm_policy_dmm_policy1";
+dmm.policyArray[1].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble1";
+dmm.policyArray[1].blePeripheral.applicationStates   = ["applicationState3","applicationState4"];
+dmm.policyArray[1].blePeripheral.weight              = 25;
+dmm.policyArray[1].blePeripheral.appliedActivity     = ["DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION"];
+dmm.policyArray[1].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread1";
+dmm.policyArray[2].$name                             = "ti_dmm_policy_dmm_policy2";
+dmm.policyArray[2].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble2";
+dmm.policyArray[2].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread2";
+dmm.policyArray[2].threadFTD.weight                  = 30;
+dmm.policyArray[2].threadFTD.applicationStates       = ["applicationState8"];
+dmm.policyArray[2].threadFTD.appliedActivity         = ["DMMPOLICY_APPLIED_ACTIVITY_ALL"];
+dmm.policyArray[3].$name                             = "ti_dmm_policy_dmm_policy3";
+dmm.policyArray[3].blePeripheral.$name               = "ti_dmm_policy_stack_dmm_stack_ble3";
+dmm.policyArray[3].threadFTD.$name                   = "ti_dmm_policy_stack_dmm_stack_thread3";
+dmm.policyArray[3].threadFTD.weight                  = 1;
diff --git a/examples/pump-controller-app/cc13x4_26x4/args.gni b/examples/pump-controller-app/cc13x4_26x4/args.gni
index 680e5ea..012565c 100644
--- a/examples/pump-controller-app/cc13x4_26x4/args.gni
+++ b/examples/pump-controller-app/cc13x4_26x4/args.gni
@@ -30,6 +30,7 @@
 chip_enable_ota_requestor = false
 
 openthread_external_platform = "${chip_root}/third_party/openthread/platforms/cc13x4_26x4:libopenthread-cc13x4_cc26x4"
+chip_openthread_ftd = true
 
 # Disable CHIP Logging
 #chip_progress_logging = false
diff --git a/src/platform/cc13xx_26xx/cc13x2_26x2/cc13x2x7_cc26x2x7_freertos.lds b/src/platform/cc13xx_26xx/cc13x2_26x2/cc13x2x7_cc26x2x7_freertos.lds
index c5d4aa8..e174101 100644
--- a/src/platform/cc13xx_26xx/cc13x2_26x2/cc13x2x7_cc26x2x7_freertos.lds
+++ b/src/platform/cc13xx_26xx/cc13x2_26x2/cc13x2x7_cc26x2x7_freertos.lds
@@ -1,345 +1,273 @@
-/*
- * Copyright (c) 2020, Texas Instruments Incorporated
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * *  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * *  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * *  Neither the name of Texas Instruments Incorporated nor the names of
- *    its contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- *  ======== CC26X2R1_LAUNCHXL_FREERTOS.lds ========
- *  Default Linker script for the Texas Instruments CC26X2R1
- */
-
-
- FLASH_ROM_BUILD  = 2;
- FLASH_BASE = 0x00000000    ;
- GPRAM_BASE = 0x11000000    ;
- RAM_BASE   = 0x20000000    ;
- ROM_BASE   = 0x10000000    ;
-
- FLASH_SIZE = 0x00058000    ;
- GPRAM_SIZE = 0x00002000    ;
- RAM_SIZE   = 0x00014000    ;
- ROM_SIZE   = 0x00040000    ;
-
- RTOS_RAM_SIZE           = 0x0000012C;
- RESERVED_RAM_SIZE_ROM_1 = 0x00000B08;
- RESERVED_RAM_SIZE_ROM_2 = 0x00000EB3;
-
- PAGE_SIZE        =          0x2000;
-RTOS_RAM_SIZE = 0x0000012C;
-RESERVED_RAM_SIZE_ROM_2 = 0x00000EB3;
-
-
- RESERVED_RAM_SIZE_AT_START = (RTOS_RAM_SIZE + RESERVED_RAM_SIZE_ROM_2);
- RESERVED_RAM_SIZE_AT_END  = 0;
-
-
- RAM_START   =   (RAM_BASE + RESERVED_RAM_SIZE_AT_START);
-
-
- RAM_END   =   (RAM_BASE + RAM_SIZE - RESERVED_RAM_SIZE_AT_END - 1);
-
-
-/* For ROM 2 devices, the following section needs to be allocated and reserved */
- RTOS_RAM_START = RAM_BASE;
- RTOS_RAM_END  = (RAM_BASE + RTOS_RAM_SIZE - 1);
-
- FLASH_START       =         FLASH_BASE;
- WORD_SIZE        =          4;
-
- FLASH_MEM_ALIGN    =      WORD_SIZE;
-
- PAGE_MASK       =           0xFFFFE000;
-
- NUM_RESERVED_FLASH_PAGES =  1;
- RESERVED_FLASH_SIZE    =    (NUM_RESERVED_FLASH_PAGES * PAGE_SIZE);
-
-  FLASH_END          =      (FLASH_BASE + FLASH_SIZE - RESERVED_FLASH_SIZE - 1);
-
-  FLASH_LAST_PAGE_START   =   (FLASH_SIZE - PAGE_SIZE);
-
-/*
-__STACK_TOP = __stack + __STACK_SIZE;
-
-
-__UNUSED_SRAM_start__ = RAM_BASE;
-__UNUSED_SRAM_end__ = RAM_BASE + RAM_SIZE;
-
-__UNUSED_FLASH_start__ = FLASH_BASE;
-__UNUSED_FLASH_end__ = FLASH_BASE + FLASH_SIZE;
-*/
-
-
-MEMORY
-{
-    FLASH (RX)      : ORIGIN = FLASH_START, LENGTH = (FLASH_END - FLASH_START + 1)
-    /*
-     * Customer Configuration Area and Bootloader Backdoor configuration in
-     * flash, 40 bytes
-     */
-   /* FLASH_CCFG (RX) : ORIGIN = FLASH_LAST_PAGE_START, LENGTH = PAGE_SIZE */
-    FLASH_CCFG (RX) : ORIGIN = 0x00057fa8, LENGTH = 0x00000058
-
-
-    RTOS_SRAM (RWX) : ORIGIN = RTOS_RAM_START, LENGTH = (RTOS_RAM_END - RTOS_RAM_START + 1)
-    SRAM (RWX)      : ORIGIN = 0x20000000 + RESERVED_RAM_SIZE_ROM_2 + RTOS_RAM_SIZE, LENGTH = (RAM_END - RAM_START + 1)
-  /*  GPRAM (RWX)     : ORIGIN = 0x11000000, LENGTH = 0x00002000 */
-}
-
-REGION_ALIAS("REGION_TEXT", FLASH);
-REGION_ALIAS("REGION_BSS", SRAM);
-REGION_ALIAS("REGION_DATA", SRAM);
-REGION_ALIAS("REGION_STACK", SRAM);
-REGION_ALIAS("REGION_HEAP", SRAM);
-REGION_ALIAS("REGION_ARM_EXIDX", FLASH);
-REGION_ALIAS("REGION_ARM_EXTAB", FLASH);
-
-SECTIONS {
-
-    PROVIDE (_intvecs_base_address =
-        DEFINED(_intvecs_base_address) ? _intvecs_base_address : 0x0);
-
-    .resetVecs (_intvecs_base_address) : AT (_intvecs_base_address) {
-        KEEP (*(.resetVecs))
-    } > REGION_TEXT
-
-    PROVIDE (_vtable_base_address =
-        DEFINED(_vtable_base_address) ? _vtable_base_address : 0x20000000 + RESERVED_RAM_SIZE_ROM_2 + RTOS_RAM_SIZE);
-
-    .ramVecs (_vtable_base_address) (NOLOAD) : {
-        KEEP (*(.ramVecs))
-    } > REGION_DATA
-
-    /* if a ROM-only symbol is present, then ROM is being used.
-     * Reserve memory for surgically placed module states.
-     */
-    _rom_data_start = 0x20000100;
-    _rom_data_size = DEFINED(ROM_DATA_SIZE) ? 12 : DEFINED(ROM_DATA_SIZE_NO_OAD) ? 0x108 : 0;
-
-    .rom_data_reserve (_rom_data_start): {
-        . += _rom_data_size;
-    } > REGION_DATA
-
-    /*
-     * UDMACC26XX_CONFIG_BASE below must match UDMACC26XX_CONFIG_BASE defined
-     * by ti/drivers/dma/UDMACC26XX.h
-     * The user is allowed to change UDMACC26XX_CONFIG_BASE to move it away from
-     * the default address 0x2000_1800, but remember it must be 1024 bytes aligned.
-     */
-    UDMACC26XX_CONFIG_BASE = 0x20001800;
-
-    /*
-     * Define absolute addresses for the DMA channels.
-     * DMA channels must always be allocated at a fixed offset from the DMA base address.
-     * --------- DO NOT MODIFY -----------
-     */
-    DMA_UART0_RX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x10);
-    DMA_UART0_TX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x20);
-    DMA_SPI0_RX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x30);
-    DMA_SPI0_TX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x40);
-    DMA_UART1_RX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x50);
-    DMA_UART1_TX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x60);
-    DMA_ADC_PRI_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x70);
-    DMA_GPT0A_PRI_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x90);
-    DMA_SPI1_RX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x100);
-    DMA_SPI1_TX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x110);
-
-    DMA_UART0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x210);
-    DMA_UART0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x220);
-    DMA_SPI0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x230);
-    DMA_SPI0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x240);
-    DMA_UART1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x250);
-    DMA_UART1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x260);
-    DMA_ADC_ALT_CONTROL_TABLE_ENTRY_ADDRESS      = (UDMACC26XX_CONFIG_BASE + 0x270);
-    DMA_GPT0A_ALT_CONTROL_TABLE_ENTRY_ADDRESS    = (UDMACC26XX_CONFIG_BASE + 0x290);
-    DMA_SPI1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x300);
-    DMA_SPI1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x310);
-
-    /*
-     * Allocate UART0, UART1, SPI0, SPI1, ADC, and GPTimer0 DMA descriptors at absolute addresses.
-     * --------- DO NOT MODIFY -----------
-     */
-    UDMACC26XX_uart0RxControlTableEntry_is_placed = 0;
-    .dmaUart0RxControlTableEntry DMA_UART0_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0RxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_uart0TxControlTableEntry_is_placed = 0;
-    .dmaUart0TxControlTableEntry DMA_UART0_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0TxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi0RxControlTableEntry_is_placed = 0;
-    .dmaSpi0RxControlTableEntry DMA_SPI0_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0RxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi0TxControlTableEntry_is_placed = 0;
-    .dmaSpi0TxControlTableEntry DMA_SPI0_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0TxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_uart1RxControlTableEntry_is_placed = 0;
-    .dmaUart1RxControlTableEntry DMA_UART1_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1RxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_uart1TxControlTableEntry_is_placed = 0;
-    .dmaUart1TxControlTableEntry DMA_UART1_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1TxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaADCPriControlTableEntry_is_placed = 0;
-    .dmaADCPriControlTableEntry DMA_ADC_PRI_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_ADC_PRI_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaADCPriControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaGPT0APriControlTableEntry_is_placed = 0;
-    .dmaGPT0APriControlTableEntry DMA_GPT0A_PRI_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_GPT0A_PRI_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaGPT0APriControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi1RxControlTableEntry_is_placed = 0;
-    .dmaSpi1RxControlTableEntry DMA_SPI1_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1RxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi1TxControlTableEntry_is_placed = 0;
-    .dmaSpi1TxControlTableEntry DMA_SPI1_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1TxControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_uart0RxAltControlTableEntry_is_placed = 0;
-    .dmaUart0RxAltControlTableEntry DMA_UART0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0RxAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_uart0TxAltControlTableEntry_is_placed = 0;
-    .dmaUart0TxAltControlTableEntry DMA_UART0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0TxAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi0RxAltControlTableEntry_is_placed = 0;
-    .dmaSpi0RxAltControlTableEntry DMA_SPI0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0RxAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi0TxAltControlTableEntry_is_placed = 0;
-    .dmaSpi0TxAltControlTableEntry DMA_SPI0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0TxAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_uart1RxAltControlTableEntry_is_placed = 0;
-    .dmaUart1RxAltControlTableEntry DMA_UART1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1RxAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_uart1TxAltControlTableEntry_is_placed = 0;
-    .dmaUart1TxAltControlTableEntry DMA_UART1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1TxAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaADCAltControlTableEntry_is_placed = 0;
-    .dmaADCAltControlTableEntry DMA_ADC_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_ADC_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaADCAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaGPT0AAltControlTableEntry_is_placed = 0;
-    .dmaGPT0AAltControlTableEntry DMA_GPT0A_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_GPT0A_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaGPT0AAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi1RxAltControlTableEntry_is_placed = 0;
-    .dmaSpi1RxAltControlTableEntry DMA_SPI1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1RxAltControlTableEntry)} > REGION_DATA
-
-    UDMACC26XX_dmaSpi1TxAltControlTableEntry_is_placed = 0;
-    .dmaSpi1TxAltControlTableEntry DMA_SPI1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1TxAltControlTableEntry)} > REGION_DATA
-
-
-
-    /* if a ROM-only symbol is present, then ROM is being used.
-     * Reserve memory for surgically placed config constants.
-     */
-    _rom_rodata_start = 0x2000;
-    _rom_rodata_size = DEFINED(ROM_RODATA_SIZE) ? 0 : DEFINED(ROM_RODATA_SIZE_NO_OAD) ? 0x330 : 0;
-
-    .rom_rodata_reserve (_rom_rodata_start): {
-        . += _rom_rodata_size;
-    } > REGION_TEXT AT> REGION_TEXT
-
-    .text : {
-        CREATE_OBJECT_SYMBOLS
-        *(.text)
-        *(.text.*)
-        . = ALIGN(0x4);
-        KEEP (*(.ctors))
-        . = ALIGN(0x4);
-        KEEP (*(.dtors))
-        . = ALIGN(0x4);
-        __init_array_start = .;
-        KEEP (*(.init_array*))
-        __init_array_end = .;
-        *(.init)
-        *(.fini*)
-    } > REGION_TEXT AT> REGION_TEXT
-
-    PROVIDE (__etext = .);
-    PROVIDE (_etext = .);
-    PROVIDE (etext = .);
-
-    .rodata : {
-        *(.rodata)
-        *(.rodata.*)
-        *(.rodata_*)
-    } > REGION_TEXT AT> REGION_TEXT
-
-    .data : ALIGN(4) {
-        __data_load__ = LOADADDR (.data);
-        __data_start__ = .;
-        *(.data)
-        *(.data.*)
-        . = ALIGN (4);
-        __data_end__ = .;
-    } > REGION_DATA AT> REGION_TEXT
-
-    .ARM.exidx : {
-        __exidx_start = .;
-        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
-        __exidx_end = .;
-    } > REGION_ARM_EXIDX AT> REGION_ARM_EXIDX
-
-    .ARM.extab : {
-        *(.ARM.extab* .gnu.linkonce.armextab.*)
-    } > REGION_ARM_EXTAB AT> REGION_ARM_EXTAB
-
-
-
-    .nvs (0x52000) (NOLOAD) : AT (0x52000) ALIGN(0x2000) {
-        *(.nvs)
-    } > REGION_TEXT
-
-    .ccfg : {
-        KEEP (*(.ccfg))
-    } > FLASH_CCFG AT> FLASH_CCFG
-
-    .bss : {
-        __bss_start__ = .;
-        *(.shbss)
-        *(.bss)
-        *(.bss.*)
-        *(COMMON)
-        . = ALIGN (4);
-        __bss_end__ = .;
-    } > REGION_BSS AT> REGION_BSS
-
-    .heap : {
-        __heap_start__ = .;
-        end = __heap_start__;
-        _end = end;
-        __end = end;
-        KEEP(*(.heap))
-        __heap_end__ = .;
-        __HeapLimit = __heap_end__;
-    } > REGION_HEAP AT> REGION_HEAP
-
-    .stack (NOLOAD) : ALIGN(0x8) {
-        _stack = .;
-        __stack = .;
-        KEEP(*(.stack)).
-        += 0x800;
-        _stack_end = .;
-        __stack_end = .;
-    } > REGION_STACK AT> REGION_STACK
-
-}
-
-ENTRY(resetISR)
+/*
+ *
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    Copyright (c) 2020 Texas Instruments Incorporated
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ * @file
+ * Linkerscript for Matter executable with space reserved for the TI BIM.
+ */
+
+STACKSIZE = 0x800;
+RESERVED_RAM_SIZE_BLE_ROM = 0x00000FDF;
+
+
+MEMORY
+{
+    /* last page removed for BIM, CCFG is supplied by that project */
+     FLASH (RX)      : ORIGIN = 0x00000000, LENGTH = 0x000affa8 
+    FLASH_CCFG (RX) : ORIGIN = 0x000affa8, LENGTH = 0x00000058
+    /*FLASH (RX)      : ORIGIN = 0x00000000, LENGTH = 0x000ae000 */
+    /* BLE ROM reserves RAM at the beginning of the ram image, size RESERVED_RAM_SIZE_BLE_ROM */
+    /* SRAM (RWX)      : ORIGIN = 0x20000000, LENGTH = 0x00024000 */
+    SRAM (RWX)      : ORIGIN = 0x20000FDF, LENGTH = 0x00023021
+    GPRAM (RWX)     : ORIGIN = 0x11000000, LENGTH = 0x00002000
+    /* Explicitly placed off target for the storage of logging data.
+     * The data placed here is NOT loaded onto the target device.
+     * This is part of 1 GB of external memory from 0x60000000 - 0x9FFFFFFF.
+     * ARM memory map can be found here:
+     * https://developer.arm.com/documentation/ddi0337/e/memory-map/about-the-memory-map
+     */
+    LOG_DATA (R) : ORIGIN = 0x90000000, LENGTH = 0x40000
+}
+
+REGION_ALIAS("REGION_TEXT", FLASH);
+REGION_ALIAS("REGION_BSS", SRAM);
+REGION_ALIAS("REGION_DATA", SRAM);
+REGION_ALIAS("REGION_STACK", SRAM);
+REGION_ALIAS("REGION_HEAP", SRAM);
+REGION_ALIAS("REGION_LOG", LOG_DATA);
+REGION_ALIAS("REGION_ARM_EXIDX", FLASH);
+REGION_ALIAS("REGION_ARM_EXTAB", FLASH);
+
+SECTIONS {
+    /* interrupt vectors shifted to accomodate BIM header */
+    PROVIDE (_intvecs_base_address =
+        DEFINED(_intvecs_base_address) ? _intvecs_base_address : 0x00);
+
+    .resetVecs (_intvecs_base_address) : AT (_intvecs_base_address) {
+        KEEP (*(.resetVecs))
+    } > REGION_TEXT
+
+    PROVIDE (_vtable_base_address =
+        DEFINED(_vtable_base_address) ? _vtable_base_address : 0x20000000 + RESERVED_RAM_SIZE_BLE_ROM);
+
+    .ramVecs (_vtable_base_address) (NOLOAD) : {
+        KEEP (*(.ramVecs))
+    } > REGION_DATA
+
+    /*
+     * UDMACC26XX_CONFIG_BASE below must match UDMACC26XX_CONFIG_BASE defined
+     * by ti/drivers/dma/UDMACC26XX.h
+     * The user is allowed to change UDMACC26XX_CONFIG_BASE to move it away from
+     * the default address 0x2000_1800, but remember it must be 1024 bytes aligned.
+     */
+    UDMACC26XX_CONFIG_BASE = 0x20001800;
+
+    /*
+     * Define absolute addresses for the DMA channels.
+     * DMA channels must always be allocated at a fixed offset from the DMA base address.
+     * --------- DO NOT MODIFY -----------
+     */
+    DMA_UART0_RX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x10);
+    DMA_UART0_TX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x20);
+    DMA_SPI0_RX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x30);
+    DMA_SPI0_TX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x40);
+    DMA_UART1_RX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x50);
+    DMA_UART1_TX_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x60);
+    DMA_ADC_PRI_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x70);
+    DMA_GPT0A_PRI_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x90);
+    DMA_SPI1_RX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x100);
+    DMA_SPI1_TX_CONTROL_TABLE_ENTRY_ADDRESS   = (UDMACC26XX_CONFIG_BASE + 0x110);
+
+    DMA_UART0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x210);
+    DMA_UART0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x220);
+    DMA_SPI0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x230);
+    DMA_SPI0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x240);
+    DMA_UART1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x250);
+    DMA_UART1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS = (UDMACC26XX_CONFIG_BASE + 0x260);
+    DMA_ADC_ALT_CONTROL_TABLE_ENTRY_ADDRESS      = (UDMACC26XX_CONFIG_BASE + 0x270);
+    DMA_GPT0A_ALT_CONTROL_TABLE_ENTRY_ADDRESS    = (UDMACC26XX_CONFIG_BASE + 0x290);
+    DMA_SPI1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x300);
+    DMA_SPI1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS  = (UDMACC26XX_CONFIG_BASE + 0x310);
+
+    /*
+     * Allocate UART0, UART1, SPI0, SPI1, ADC, and GPTimer0 DMA descriptors at absolute addresses.
+     * --------- DO NOT MODIFY -----------
+     */
+    UDMACC26XX_uart0RxControlTableEntry_is_placed = 0;
+    .dmaUart0RxControlTableEntry DMA_UART0_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0RxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_uart0TxControlTableEntry_is_placed = 0;
+    .dmaUart0TxControlTableEntry DMA_UART0_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0TxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi0RxControlTableEntry_is_placed = 0;
+    .dmaSpi0RxControlTableEntry DMA_SPI0_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0RxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi0TxControlTableEntry_is_placed = 0;
+    .dmaSpi0TxControlTableEntry DMA_SPI0_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0TxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_uart1RxControlTableEntry_is_placed = 0;
+    .dmaUart1RxControlTableEntry DMA_UART1_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1RxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_uart1TxControlTableEntry_is_placed = 0;
+    .dmaUart1TxControlTableEntry DMA_UART1_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1TxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaADCPriControlTableEntry_is_placed = 0;
+    .dmaADCPriControlTableEntry DMA_ADC_PRI_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_ADC_PRI_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaADCPriControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaGPT0APriControlTableEntry_is_placed = 0;
+    .dmaGPT0APriControlTableEntry DMA_GPT0A_PRI_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_GPT0A_PRI_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaGPT0APriControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi1RxControlTableEntry_is_placed = 0;
+    .dmaSpi1RxControlTableEntry DMA_SPI1_RX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_RX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1RxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi1TxControlTableEntry_is_placed = 0;
+    .dmaSpi1TxControlTableEntry DMA_SPI1_TX_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_TX_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1TxControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_uart0RxAltControlTableEntry_is_placed = 0;
+    .dmaUart0RxAltControlTableEntry DMA_UART0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0RxAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_uart0TxAltControlTableEntry_is_placed = 0;
+    .dmaUart0TxAltControlTableEntry DMA_UART0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart0TxAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi0RxAltControlTableEntry_is_placed = 0;
+    .dmaSpi0RxAltControlTableEntry DMA_SPI0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0RxAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi0TxAltControlTableEntry_is_placed = 0;
+    .dmaSpi0TxAltControlTableEntry DMA_SPI0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI0_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi0TxAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_uart1RxAltControlTableEntry_is_placed = 0;
+    .dmaUart1RxAltControlTableEntry DMA_UART1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1RxAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_uart1TxAltControlTableEntry_is_placed = 0;
+    .dmaUart1TxAltControlTableEntry DMA_UART1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_UART1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaUart1TxAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaADCAltControlTableEntry_is_placed = 0;
+    .dmaADCAltControlTableEntry DMA_ADC_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_ADC_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaADCAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaGPT0AAltControlTableEntry_is_placed = 0;
+    .dmaGPT0AAltControlTableEntry DMA_GPT0A_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_GPT0A_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaGPT0AAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi1RxAltControlTableEntry_is_placed = 0;
+    .dmaSpi1RxAltControlTableEntry DMA_SPI1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_RX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1RxAltControlTableEntry)} > REGION_DATA
+
+    UDMACC26XX_dmaSpi1TxAltControlTableEntry_is_placed = 0;
+    .dmaSpi1TxAltControlTableEntry DMA_SPI1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS (NOLOAD) : AT (DMA_SPI1_TX_ALT_CONTROL_TABLE_ENTRY_ADDRESS) {*(.dmaSpi1TxAltControlTableEntry)} > REGION_DATA
+
+
+
+    /* if a ROM-only symbol is present, then ROM is being used.
+     * Reserve memory for surgically placed config constants.
+     */
+    _rom_rodata_start = 0x2000;
+    _rom_rodata_size = DEFINED(ROM_RODATA_SIZE) ? 0 : DEFINED(ROM_RODATA_SIZE_NO_OAD) ? 0x330 : 0;
+
+    .rom_rodata_reserve (_rom_rodata_start): {
+        . += _rom_rodata_size;
+    } > REGION_TEXT AT> REGION_TEXT
+
+    .text : {
+        CREATE_OBJECT_SYMBOLS
+        *(.text)
+        *(.text.*)
+        . = ALIGN(0x4);
+        KEEP (*(.ctors))
+        . = ALIGN(0x4);
+        KEEP (*(.dtors))
+        . = ALIGN(0x4);
+        __init_array_start = .;
+        KEEP (*(.init_array*))
+        __init_array_end = .;
+        *(.init)
+        *(.fini*)
+    } > REGION_TEXT AT> REGION_TEXT
+
+    PROVIDE (__etext = .);
+    PROVIDE (_etext = .);
+    PROVIDE (etext = .);
+
+    .rodata : {
+        *(.rodata)
+        *(.rodata.*)
+        *(.rodata_*)
+    } > REGION_TEXT AT> REGION_TEXT
+
+    .data : ALIGN(4) {
+        __data_load__ = LOADADDR (.data);
+        __data_start__ = .;
+        *(.data)
+        *(.data.*)
+        . = ALIGN (4);
+        __data_end__ = .;
+    } > REGION_DATA AT> REGION_TEXT
+
+    .ARM.exidx : {
+        __exidx_start = .;
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+        __exidx_end = .;
+    } > REGION_ARM_EXIDX AT> REGION_ARM_EXIDX
+
+    .ARM.extab : {
+        *(.ARM.extab* .gnu.linkonce.armextab.*)
+    } > REGION_ARM_EXTAB AT> REGION_ARM_EXTAB
+
+    /* End of executable code/data, NVS is not part of the OTA image */
+    PROVIDE (_flash_end_address = .);
+
+    .nvs (0xAA000) (NOLOAD) : AT (0xAA000) ALIGN(0x2000) {
+        *(.nvs)
+    } > REGION_TEXT
+
+    .ccfg : {
+        KEEP (*(.ccfg))
+    } > FLASH_CCFG AT> FLASH_CCFG
+
+    .bss : {
+        __bss_start__ = .;
+        *(.shbss)
+        *(.bss)
+        *(.bss.*)
+        *(COMMON)
+        . = ALIGN (4);
+        __bss_end__ = .;
+    } > REGION_BSS AT> REGION_BSS
+
+    .heap : {
+        __heap_start__ = .;
+        end = __heap_start__;
+        _end = end;
+        __end = end;
+        KEEP(*(.heap))
+        __heap_end__ = .;
+        __HeapLimit = __heap_end__;
+    } > REGION_HEAP AT> REGION_HEAP
+
+    .stack (NOLOAD) : ALIGN(0x8) {
+        _stack = .;
+        __stack = .;
+        KEEP(*(.stack))
+        . += STACKSIZE;
+        _stack_end = .;
+        __stack_end = .;
+    } > REGION_STACK AT> REGION_STACK
+
+    .log_data (COPY) : {
+        KEEP (*(.log_data))
+    } > REGION_LOG
+}
+
+ENTRY(resetISR)
