diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/.config b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/.config
index daef32c4e9c6..00decc6710b4 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/.config
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/.config
@@ -182,7 +182,7 @@ CONFIG_RT_USING_CONSOLE=y
CONFIG_RT_CONSOLEBUF_SIZE=128
CONFIG_RT_CONSOLE_DEVICE_NAME="uart1"
CONFIG_RT_USING_CONSOLE_OUTPUT_CTL=y
-CONFIG_RT_VER_NUM=0x50300
+CONFIG_RT_VER_NUM=0x50400
# CONFIG_RT_USING_STDC_ATOMIC is not set
CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32
# end of RT-Thread Kernel
@@ -468,6 +468,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ABUP_FOTA is not set
# CONFIG_PKG_USING_LIBCURL2RTT is not set
# CONFIG_PKG_USING_CAPNP is not set
+# CONFIG_PKG_USING_ERPC is not set
# CONFIG_PKG_USING_AGILE_TELNET is not set
# CONFIG_PKG_USING_NMEALIB is not set
# CONFIG_PKG_USING_PDULIB is not set
@@ -554,6 +555,10 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_LVGL is not set
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
+
+#
+# GD32EmbeddedUI demos require LVGL v8.3.11
+#
# end of LVGL: powerful and easy-to-use embedded GUI library
#
@@ -583,12 +588,15 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_QRCODE is not set
# CONFIG_PKG_USING_GUIENGINE is not set
# CONFIG_PKG_USING_3GPP_AMRNB is not set
+# CONFIG_PKG_USING_LITETYPE is not set
# end of multimedia packages
#
# tools packages
#
# CONFIG_PKG_USING_VECTOR is not set
+# CONFIG_PKG_USING_SORCH is not set
+# CONFIG_PKG_USING_DICT is not set
# CONFIG_PKG_USING_CMBACKTRACE is not set
# CONFIG_PKG_USING_MCOREDUMP is not set
# CONFIG_PKG_USING_EASYFLASH is not set
@@ -640,6 +648,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_UORB is not set
# CONFIG_PKG_USING_RT_TUNNEL is not set
# CONFIG_PKG_USING_VIRTUAL_TERMINAL is not set
+# CONFIG_PKG_USING_FEE is not set
+# CONFIG_PKG_USING_MRAMTRACE is not set
# end of tools packages
#
@@ -735,6 +745,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_HEARTBEAT is not set
# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set
# CONFIG_PKG_USING_CHERRYECAT is not set
+# CONFIG_PKG_USING_EVENT_LOOP is not set
+# CONFIG_PKG_USING_THREAD_MANAGER is not set
# end of system packages
#
@@ -786,6 +798,9 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_STM32WB_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_STM32MP1_M4_HAL_DRIVER is not set
# CONFIG_PKG_USING_STM32MP1_M4_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32N6_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32N6_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32N657xx_FSBL is not set
# end of STM32 HAL & SDK Drivers
#
@@ -818,7 +833,21 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_NRFX is not set
# CONFIG_PKG_USING_RASPBERRYPI_PICO_RP2350_SDK is not set
# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set
-# CONFIG_PKG_USING_MM32 is not set
+
+#
+# MM32 HAL & SDK Drivers
+#
+# CONFIG_PKG_USING_MM32F103XX_CMSIS is not set
+# CONFIG_PKG_USING_MM32F3270X_CMSIS is not set
+# CONFIG_PKG_USING_MM32F5260X_CMSIS is not set
+# CONFIG_PKG_USING_MM32L0XX_CMSIS is not set
+# CONFIG_PKG_USING_MM32L3XX_CMSIS is not set
+# CONFIG_PKG_USING_MM32F103XX_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32F3270X_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32F5260X_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32L0XX_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32L3XX_HAL_DRIVER is not set
+# end of MM32 HAL & SDK Drivers
#
# WCH HAL & SDK Drivers
@@ -883,9 +912,7 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
#
# NUVOTON Drivers
#
-# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set
-# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set
# end of NUVOTON Drivers
#
@@ -903,6 +930,12 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_HPM_SDK is not set
# end of HPMicro SDK
+#
+# FM33 Drivers
+#
+# CONFIG_PKG_USING_FM33LG0XX_FL_LIBRARY is not set
+# end of FM33 Drivers
+
#
# FT32 HAL & SDK Drivers
#
@@ -911,6 +944,23 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_FT32F4_STD_DRIVER is not set
# CONFIG_PKG_USING_FT32F4_CMSIS_DRIVER is not set
# end of FT32 HAL & SDK Drivers
+
+#
+# NOVOSNS Drivers
+#
+# CONFIG_PKG_USING_NOVOSNS_SERIES_DRIVER is not set
+# end of NOVOSNS Drivers
+
+#
+# N32 Drivers
+#
+# CONFIG_PKG_USING_N32H7XX_STD_DRIVER is not set
+# CONFIG_PKG_USING_N32H7XX_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_N32H49X_STD_DRIVER is not set
+# CONFIG_PKG_USING_N32H49X_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_N32H47X_48X_STD_DRIVER is not set
+# CONFIG_PKG_USING_N32H47X_48X_CMSIS_DRIVER is not set
+# end of N32 Drivers
# end of HAL & SDK Drivers
#
@@ -990,6 +1040,7 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_QMI8658 is not set
# CONFIG_PKG_USING_ICM20948 is not set
# CONFIG_PKG_USING_SCD4X is not set
+# CONFIG_PKG_USING_BMI270 is not set
# end of sensors drivers
#
@@ -1044,6 +1095,7 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_WK2124 is not set
# CONFIG_PKG_USING_LY68L6400 is not set
# CONFIG_PKG_USING_DM9051 is not set
+# CONFIG_PKG_USING_CH390 is not set
# CONFIG_PKG_USING_SSD1306 is not set
# CONFIG_PKG_USING_QKEY is not set
# CONFIG_PKG_USING_RS485 is not set
@@ -1091,8 +1143,10 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_ISOTP_C is not set
# CONFIG_PKG_USING_IKUNLED is not set
# CONFIG_PKG_USING_INS5T8025 is not set
+# CONFIG_PKG_USING_IRUART is not set
# CONFIG_PKG_USING_ST7305 is not set
# CONFIG_PKG_USING_TM1668 is not set
+# CONFIG_PKG_USING_TCA9548A is not set
# CONFIG_PKG_USING_SPI_TOOLS is not set
# end of peripheral libraries and drivers
@@ -1110,6 +1164,9 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_NAXOS is not set
# CONFIG_PKG_USING_R_TINYMAIX is not set
# CONFIG_PKG_USING_LLMCHAT is not set
+# CONFIG_PKG_USING_LIME_TM is not set
+# CONFIG_PKG_USING_AIFES is not set
+# CONFIG_PKG_USING_AGENT is not set
# end of AI packages
#
@@ -1169,6 +1226,8 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_MULTIBUTTON is not set
# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
# CONFIG_PKG_USING_CANFESTIVAL is not set
+# CONFIG_PKG_USING_CANOPENNODE is not set
+# CONFIG_PKG_USING_LELY is not set
# CONFIG_PKG_USING_ZLIB is not set
# CONFIG_PKG_USING_MINIZIP is not set
# CONFIG_PKG_USING_HEATSHRINK is not set
@@ -1194,6 +1253,8 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_QPARAM is not set
# CONFIG_PKG_USING_CorevMCU_CLI is not set
# CONFIG_PKG_USING_DRMP is not set
+# CONFIG_PKG_USING_AUTOGEN_PARAMETER_MANAGER is not set
+# CONFIG_PKG_USING_SIMULATED_SENSOR is not set
# end of miscellaneous packages
#
@@ -1488,6 +1549,7 @@ CONFIG_BSP_LPUART1_TX_DMA_CHANNEL=1
# Board extended module Drivers
#
# CONFIG_BSP_LINKER_SCRIPT_RAM is not set
+# CONFIG_BSP_LINKER_SCRIPT_RAM_INDUSTRY is not set
CONFIG_BSP_LINKER_SCRIPT_FLEXSPI_NOR=y
# CONFIG_BSP_LINKER_SCRIPT_FLEXSPI_NOR_HYPERRAM is not set
# end of Hardware Drivers Config
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/multicore_thread.c b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/multicore_thread.c
index 9cdd88d68c62..5493860b3a2c 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/multicore_thread.c
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/multicore_thread.c
@@ -83,7 +83,7 @@ static bool error_occurred = false;
static volatile uint32_t remote_addr = 0U;
#endif /* BSP_USE_MULTICORE_RPMSG_LITE */
-#ifdef BSP_USE_MULTICORE_KICK_OFF
+#if defined(BSP_USE_MULTICORE_KICK_OFF) && defined(BSP_USE_MULTICORE_RPMSG_LITE)
static volatile uint16_t RPMsgRemoteReadyEventData = 0U;
#endif
@@ -92,11 +92,13 @@ static volatile uint16_t RPMsgRemoteReadyEventData = 0U;
******************************************************************************/
#ifdef BSP_USE_MULTICORE_KICK_OFF
+#ifdef BSP_USE_MULTICORE_RPMSG_LITE
static void RPMsgRemoteReadyEventHandler(mcmgr_core_t coreNum, uint16_t eventData, void *context)
{
uint16_t *data = (uint16_t *)context;
*data = eventData;
}
+#endif
static rt_err_t multicore_kickoff_init(void)
{
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig
index a8e23399de66..70a32c07b8c3 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig
@@ -815,6 +815,15 @@ choice
help
Link the image to run entirely from internal SRAM.
+ config BSP_LINKER_SCRIPT_RAM_INDUSTRY
+ bool "RAM - Industrial Ethernet (256KB TCM + 128KB OCRAM2 + 32KB shared memory)"
+ help
+ Link the image to run from 256KB TCM for industrial Ethernet
+ development. CM33 uses 128KB OCRAM2 exclusively and shares 32KB
+ OCRAM2 with CM7. The GCC linker script (.ld), the ARMCLANG
+ scatter file (.scf) and the IAR linker configuration file (.icf)
+ are provided.
+
config BSP_LINKER_SCRIPT_FLEXSPI_NOR
bool "FlexSPI NOR Flash (XIP from external NOR flash)"
help
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/board.c b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/board.c
index 70b7b41b6b53..f56b6b289649 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/board.c
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/board.c
@@ -1498,8 +1498,8 @@ void PHY_Reset(void)
void rt_hw_board_init()
{
extern void BOARD_InitPeripherals(void);
- BOARD_CommonSetting();
BOARD_ConfigMPU();
+ BOARD_CommonSetting();
BOARD_InitBootPins();
BOARD_BootClockRUN();
// BOARD_InitPeripherals();
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.icf
index 4b08ecca3c88..88f2bb3cfad0 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.icf
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.icf
@@ -1,183 +1,183 @@
-/*
-** ###################################################################
-** Processors: MIMXRT1189CVM8B_cm33
-** MIMXRT1189CVM8C_cm33
-** MIMXRT1189XVM8B_cm33
-** MIMXRT1189XVM8C_cm33
-**
-** Compiler: IAR ANSI C/C++ Compiler for ARM
-** Reference manual: IMXRT1180RM, Rev 5, 01/2024
-** Version: rev. 2.0, 2024-01-18
-** Build: b250310
-**
-** Abstract:
-** Linker file for the IAR ANSI C/C++ Compiler for ARM
-**
-** Copyright 2016 Freescale Semiconductor, Inc.
-** Copyright 2016-2025 NXP
-** SPDX-License-Identifier: BSD-3-Clause
-**
-** http: www.nxp.com
-** mail: support@nxp.com
-**
-** ###################################################################
-*/
-
-/* Board memory map */
-
-define symbol m_code_tcm_start = 0x0FFE0000;
-define symbol m_code_tcm_size = 0x00020000;
-
-define symbol m_system_tcm_start = 0x20000000;
-define symbol m_system_tcm_size = 0x00020000;
-
-define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
-define symbol m_ocram1_size = 0x0007C000;
-
-define symbol m_ocram2_start = 0x20500000;
-define symbol m_ocram2_size = 0x00040000;
-
-/* CM33 use last 2M bytes space of sdram and hyperram for dual image framework */
-define symbol m_sdram_start = isdefinedsymbol(__dual_image__) ? 0x81E00000 : 0x80000000;
-define symbol m_sdram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x02000000;
-define symbol m_hyperram_start = isdefinedsymbol(__dual_image__) ? 0x04600000 : 0x04000000;
-define symbol m_hyperram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x00800000;
-define symbol m_flash_start = 0x28000000;
-define symbol m_flash_size = 0x00800000;
-
-define symbol m_core1_image_maximum_size = 0x00040000;
-
-/* General definition */
-define symbol m_fcb_offset = 0x400;
-define symbol m_fcb_size = 0x200;
-define symbol m_fcb_start = m_flash_start + m_fcb_offset;
-define symbol m_fcb_end = m_fcb_start + m_fcb_size - 1;
-
-define symbol m_xmcd_offset = 0x800;
-define symbol m_xmcd_size = 0x400;
-define symbol m_xmcd_start = m_flash_start + m_xmcd_offset;
-define symbol m_xmcd_end = m_xmcd_start + m_xmcd_size - 1;
-
-define symbol m_container_offset = 0x1000;
-define symbol m_container_size = 0x2000;
-define symbol m_container_start = m_flash_start + m_container_offset;
-define symbol m_container_end = m_container_start + m_container_size - 1;
-
-define symbol app_image_offset = 0x0000B000;
-define symbol vector_table_size = 0x00000400;
-if (isdefinedsymbol(__stack_size__)) {
- define symbol __size_cstack__ = __stack_size__;
-} else {
- define symbol __size_cstack__ = 0x01000;
-}
-
-if (isdefinedsymbol(__heap_size__)) {
- define symbol __size_heap__ = __heap_size__;
-} else {
- define symbol __size_heap__ = 0x08000;
-}
-
-define symbol m_qacode_start = m_code_tcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
-define symbol m_qacode_end = m_code_tcm_start + m_code_tcm_size - 1;
-define symbol m_qadata_start = m_system_tcm_start;
-define symbol m_qadata_end = m_system_tcm_start + m_system_tcm_size - 1;
-define symbol m_ram_vector_table_start = m_code_tcm_start;
-
-/* Target specific definition, code & data allocation */
-define symbol m_code_size = m_flash_size - app_image_offset;
-define symbol m_data_size = m_system_tcm_size;
-define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
-define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
-
-define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : 0;
-
-define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
-
-define symbol m_text_start = m_flash_start + app_image_offset;
-define symbol m_text_end = m_text_start + m_code_size - 1;
-define symbol m_interrupts_start = m_text_start;
-
-define symbol m_data_start = m_system_tcm_start;
-define symbol m_data_end = m_data_start + m_data_size - 1;
-
-define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7 - m_ncache_size;
-define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
-
-define symbol m_heap_start = m_ocram1_start;
-define symbol m_heap_end = m_ncache_start - 1;
-
-if (isdefinedsymbol(__use_shmem__)) {
- define symbol m_rpmsg_sh_mem_start = m_ocram2_start;
- define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
-}
-
-/* Region definition */
-define memory mem with size = 4G;
-define region FCB_region = mem:[from m_fcb_start to m_fcb_end];
-define region XMCD_region = mem:[from m_xmcd_start to m_xmcd_end];
-define region CONTAINER_region = mem:[from m_container_start to m_container_end];
-define region TEXT_region = mem:[from m_text_start to m_text_end];
-define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
-define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
-define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
-define region HEAP_region = mem:[from m_heap_start to m_heap_end];
-define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
-define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
-if (isdefinedsymbol(__use_shmem__)) {
- define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
-}
-
-/* Exported symbol definition */
-define exported symbol __VECTOR_TABLE = m_interrupts_start;
-define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
-define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
-define exported symbol __NCACHE_REGION_START = m_ncache_start;
-define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
-define exported symbol __CONTAINER_IMG_OFFSET = start(TEXT_region) - start(CONTAINER_region);
-define exported symbol __CONTAINER_IMG_LOAD_ADDR = start(TEXT_region);
-define exported symbol __CONTAINER_IMG_ENTRY_ADDR = start(TEXT_region);
-if (isdefinedsymbol(__use_shmem__)) {
- define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
- define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
- define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
- define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
-}
-
-/* Block definition */
-define block RW { readwrite };
-define block ZI { zi };
-define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
-define block QACCESS_CODE { section CodeQuickAccess };
-define block QACCESS_DATA { section DataQuickAccess };
-define block CSTACK with alignment = 8, size = __size_cstack__ { };
-define block HEAP with alignment = 8, size = __size_heap__ { };
-define block CORE1_IMAGE_BLOCK with alignment = 16, maximum size = m_core1_image_maximum_size { section __core1_image };
-
-define block RO with fixed order { readonly section .intvec, readonly, block CORE1_IMAGE_BLOCK };
-
-initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess, ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
-do not initialize { section .noinit };
-if (isdefinedsymbol(__use_shmem__)) {
- do not initialize { section rpmsg_sh_mem_section };
-}
-
-keep{ section .boot_hdr.conf, section .boot_hdr.xmcd_data, section .boot_hdr.container };
-
-place in FCB_region { section .boot_hdr.conf };
-place in XMCD_region { section .boot_hdr.xmcd_data };
-place in CONTAINER_region { section .boot_hdr.container };
-place in TEXT_region { first block RO };
-place in QACODE_region { section .textrw, block QACCESS_CODE };
-place in DATA_region { block RW };
-place in DATA_region { block ZI };
-place in DATA_region { block QACCESS_DATA };
-place in NCACHE_region { block NCACHE_VAR };
-place in CSTACK_region { block CSTACK };
-if (isdefinedsymbol(__heap_noncacheable__)) {
- place in NCACHE_region { last block HEAP };
-} else {
- place in HEAP_region { last block HEAP };
-}
-if (isdefinedsymbol(__use_shmem__)) {
- place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
-}
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm33
+** MIMXRT1189CVM8C_cm33
+** MIMXRT1189XVM8B_cm33
+** MIMXRT1189XVM8C_cm33
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+
+define symbol m_code_tcm_start = 0x0FFE0000;
+define symbol m_code_tcm_size = 0x00020000;
+
+define symbol m_system_tcm_start = 0x20000000;
+define symbol m_system_tcm_size = 0x00020000;
+
+define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+define symbol m_ocram1_size = 0x0007C000;
+
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+/* CM33 use last 2M bytes space of sdram and hyperram for dual image framework */
+define symbol m_sdram_start = isdefinedsymbol(__dual_image__) ? 0x81E00000 : 0x80000000;
+define symbol m_sdram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x02000000;
+define symbol m_hyperram_start = isdefinedsymbol(__dual_image__) ? 0x04600000 : 0x04000000;
+define symbol m_hyperram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x00800000;
+define symbol m_flash_start = 0x28000000;
+define symbol m_flash_size = 0x00800000;
+
+define symbol m_core1_image_maximum_size = 0x00040000;
+
+/* General definition */
+define symbol m_fcb_offset = 0x400;
+define symbol m_fcb_size = 0x200;
+define symbol m_fcb_start = m_flash_start + m_fcb_offset;
+define symbol m_fcb_end = m_fcb_start + m_fcb_size - 1;
+
+define symbol m_xmcd_offset = 0x800;
+define symbol m_xmcd_size = 0x400;
+define symbol m_xmcd_start = m_flash_start + m_xmcd_offset;
+define symbol m_xmcd_end = m_xmcd_start + m_xmcd_size - 1;
+
+define symbol m_container_offset = 0x1000;
+define symbol m_container_size = 0x2000;
+define symbol m_container_start = m_flash_start + m_container_offset;
+define symbol m_container_end = m_container_start + m_container_size - 1;
+
+define symbol app_image_offset = 0x0000B000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x01000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x08000;
+}
+
+define symbol m_qacode_start = m_code_tcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_code_tcm_start + m_code_tcm_size - 1;
+define symbol m_qadata_start = m_system_tcm_start;
+define symbol m_qadata_end = m_system_tcm_start + m_system_tcm_size - 1;
+define symbol m_ram_vector_table_start = m_code_tcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_flash_size - app_image_offset;
+define symbol m_data_size = m_system_tcm_size;
+define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
+define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
+
+define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : 0;
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
+
+define symbol m_text_start = m_flash_start + app_image_offset;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_system_tcm_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7 - m_ncache_size;
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+
+define symbol m_heap_start = m_ocram1_start;
+define symbol m_heap_end = m_ncache_start - 1;
+
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start;
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region FCB_region = mem:[from m_fcb_start to m_fcb_end];
+define region XMCD_region = mem:[from m_xmcd_start to m_xmcd_end];
+define region CONTAINER_region = mem:[from m_container_start to m_container_end];
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+define exported symbol __CONTAINER_IMG_OFFSET = start(TEXT_region) - start(CONTAINER_region);
+define exported symbol __CONTAINER_IMG_LOAD_ADDR = start(TEXT_region);
+define exported symbol __CONTAINER_IMG_ENTRY_ADDR = start(TEXT_region);
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+define block CORE1_IMAGE_BLOCK with alignment = 16, maximum size = m_core1_image_maximum_size { section __core1_image };
+
+define block RO with fixed order { readonly section .intvec, readonly, block CORE1_IMAGE_BLOCK };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess, ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+keep{ section .boot_hdr.conf, section .boot_hdr.xmcd_data, section .boot_hdr.container };
+
+place in FCB_region { section .boot_hdr.conf };
+place in XMCD_region { section .boot_hdr.xmcd_data };
+place in CONTAINER_region { section .boot_hdr.container };
+place in TEXT_region { first block RO };
+place in QACODE_region { section .textrw, block QACCESS_CODE };
+place in DATA_region { block RW };
+place in DATA_region { block ZI };
+place in DATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.ld b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.ld
index 2e4cafeabe52..5f45351e231c 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.ld
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor.ld
@@ -168,8 +168,8 @@ SECTIONS
.text :
{
. = ALIGN(4);
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text)
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text*)
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
@@ -296,6 +296,11 @@ SECTIONS
. = ALIGN(32);
__ram_function_start__ = .;
*(CodeQuickAccess)
+ /* The FlexSPI drivers must run from TCM while the flash is being
+ reconfigured, mirroring the Keil/IAR QuickAccess placement. */
+ *fsl_flexspi.o(.text*)
+ *drv_flexspi_nor_flash.o(.text*)
+ *drv_flexspi.o(.text*)
. = ALIGN(128);
__ram_function_end__ = .;
} > m_qacode
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.icf
index 263c64ce5dcc..e96eebb4b533 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.icf
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.icf
@@ -1,187 +1,187 @@
-/*
-** ###################################################################
-** Processors: MIMXRT1189CVM8B_cm33
-** MIMXRT1189CVM8C_cm33
-** MIMXRT1189XVM8B_cm33
-** MIMXRT1189XVM8C_cm33
-**
-** Compiler: IAR ANSI C/C++ Compiler for ARM
-** Reference manual: IMXRT1180RM, Rev 5, 01/2024
-** Version: rev. 2.0, 2024-01-18
-** Build: b250310
-**
-** Abstract:
-** Linker file for the IAR ANSI C/C++ Compiler for ARM
-**
-** Copyright 2016 Freescale Semiconductor, Inc.
-** Copyright 2016-2025 NXP
-** SPDX-License-Identifier: BSD-3-Clause
-**
-** http: www.nxp.com
-** mail: support@nxp.com
-**
-** ###################################################################
-*/
-
-/* Board memory map */
-
-define symbol m_code_tcm_start = 0x0FFE0000;
-define symbol m_code_tcm_size = 0x00020000;
-
-define symbol m_system_tcm_start = 0x20000000;
-define symbol m_system_tcm_size = 0x00020000;
-
-define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
-define symbol m_ocram1_size = 0x0007C000;
-
-define symbol m_ocram2_start = 0x20500000;
-define symbol m_ocram2_size = 0x00040000;
-
-/* CM33 use last 2M bytes space of sdram and hyperram for dual image framework */
-define symbol m_sdram_start = isdefinedsymbol(__dual_image__) ? 0x81E00000 : 0x80000000;
-define symbol m_sdram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x02000000;
-define symbol m_hyperram_start = isdefinedsymbol(__dual_image__) ? 0x04600000 : 0x04000000;
-define symbol m_hyperram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x00800000;
-define symbol m_flash_start = 0x28000000;
-define symbol m_flash_size = 0x00800000;
-
-define symbol m_core1_image_maximum_size = 0x00040000;
-
-/* General definition */
-define symbol m_fcb_offset = 0x400;
-define symbol m_fcb_size = 0x200;
-define symbol m_fcb_start = m_flash_start + m_fcb_offset;
-define symbol m_fcb_end = m_fcb_start + m_fcb_size - 1;
-
-define symbol m_xmcd_offset = 0x800;
-define symbol m_xmcd_size = 0x400;
-define symbol m_xmcd_start = m_flash_start + m_xmcd_offset;
-define symbol m_xmcd_end = m_xmcd_start + m_xmcd_size - 1;
-
-define symbol m_container_offset = 0x1000;
-define symbol m_container_size = 0x2000;
-define symbol m_container_start = m_flash_start + m_container_offset;
-define symbol m_container_end = m_container_start + m_container_size - 1;
-
-define symbol app_image_offset = 0x0000B000;
-define symbol vector_table_size = 0x00000400;
-if (isdefinedsymbol(__stack_size__)) {
- define symbol __size_cstack__ = __stack_size__;
-} else {
- define symbol __size_cstack__ = 0x01000;
-}
-
-if (isdefinedsymbol(__heap_size__)) {
- define symbol __size_heap__ = __heap_size__;
-} else {
- define symbol __size_heap__ = 0x08000;
-}
-
-define symbol m_qacode_start = m_code_tcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
-define symbol m_qacode_end = m_code_tcm_start + m_code_tcm_size - 1;
-define symbol m_qadata_start = m_system_tcm_start;
-define symbol m_qadata_end = m_system_tcm_start + m_system_tcm_size - 1;
-define symbol m_ram_vector_table_start = m_code_tcm_start;
-
-/* Target specific definition, code & data allocation */
-define symbol m_code_size = m_flash_size - app_image_offset;
-define symbol m_data_size = m_hyperram_size;
-define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
-define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
-
-define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : 0;
-
-define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
-
-define symbol m_text_start = m_flash_start + app_image_offset;
-define symbol m_text_end = m_text_start + m_code_size - 1;
-define symbol m_interrupts_start = m_text_start;
-
-define symbol m_data_start = m_hyperram_start;
-define symbol m_data_end = m_data_start + m_data_size - 1;
-
-define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7 - m_ncache_size;
-define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
-
-define symbol m_heap_start = m_ocram1_start;
-define symbol m_heap_end = m_ncache_start - 1;
-
-if (isdefinedsymbol(__use_shmem__)) {
- define symbol m_rpmsg_sh_mem_start = m_ocram2_start;
- define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
-}
-
-/* Region definition */
-define memory mem with size = 4G;
-define region FCB_region = mem:[from m_fcb_start to m_fcb_end];
-define region XMCD_region = mem:[from m_xmcd_start to m_xmcd_end];
-define region CONTAINER_region = mem:[from m_container_start to m_container_end];
-define region TEXT_region = mem:[from m_text_start to m_text_end];
-define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
-define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
-define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
-define region HEAP_region = mem:[from m_heap_start to m_heap_end];
-define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
-define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
-if (isdefinedsymbol(__use_shmem__)) {
- define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
-}
-
-/* Exported symbol definition */
-define exported symbol __VECTOR_TABLE = m_interrupts_start;
-define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
-define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
-define exported symbol __NCACHE_REGION_START = m_ncache_start;
-define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
-define exported symbol __CONTAINER_IMG_OFFSET = start(TEXT_region) - start(CONTAINER_region);
-define exported symbol __CONTAINER_IMG_LOAD_ADDR = start(TEXT_region);
-define exported symbol __CONTAINER_IMG_ENTRY_ADDR = start(TEXT_region);
-if (isdefinedsymbol(__use_shmem__)) {
- define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
- define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
- define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
- define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
-}
-
-/* Block definition */
-define block RW { readwrite };
-define block ZI { zi };
-define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
-define block QACCESS_CODE { section CodeQuickAccess };
-define block QACCESS_DATA { section DataQuickAccess };
-define block CSTACK with alignment = 8, size = __size_cstack__ { };
-define block HEAP with alignment = 8, size = __size_heap__ { };
-define block CORE1_IMAGE_BLOCK with alignment = 16, maximum size = m_core1_image_maximum_size { section __core1_image };
-
-/* cache line size = 16 bytes */
-define block CACHE_LINE_DATA_ZI with alignment = 16, end alignment = 16 { section CacheLineData };
-define block CACHE_LINE_DATA_RW with alignment = 16, end alignment = 16 { section CacheLineData.init };
-
-define block RO with fixed order { readonly section .intvec, readonly, block CORE1_IMAGE_BLOCK };
-
-initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess, ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
-do not initialize { section .noinit };
-if (isdefinedsymbol(__use_shmem__)) {
- do not initialize { section rpmsg_sh_mem_section };
-}
-
-keep{ section .boot_hdr.conf, section .boot_hdr.xmcd_data, section .boot_hdr.container };
-
-place in FCB_region { section .boot_hdr.conf };
-place in XMCD_region { section .boot_hdr.xmcd_data };
-place in CONTAINER_region { section .boot_hdr.container };
-place in TEXT_region { first block RO };
-place in QACODE_region { section .textrw, block QACCESS_CODE };
-place in DATA_region { block RW, block CACHE_LINE_DATA_RW };
-place in DATA_region { block ZI, block CACHE_LINE_DATA_ZI };
-place in QADATA_region { block QACCESS_DATA };
-place in NCACHE_region { block NCACHE_VAR };
-place in CSTACK_region { block CSTACK };
-if (isdefinedsymbol(__heap_noncacheable__)) {
- place in NCACHE_region { last block HEAP };
-} else {
- place in HEAP_region { last block HEAP };
-}
-if (isdefinedsymbol(__use_shmem__)) {
- place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
-}
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm33
+** MIMXRT1189CVM8C_cm33
+** MIMXRT1189XVM8B_cm33
+** MIMXRT1189XVM8C_cm33
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+
+define symbol m_code_tcm_start = 0x0FFE0000;
+define symbol m_code_tcm_size = 0x00020000;
+
+define symbol m_system_tcm_start = 0x20000000;
+define symbol m_system_tcm_size = 0x00020000;
+
+define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+define symbol m_ocram1_size = 0x0007C000;
+
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+/* CM33 use last 2M bytes space of sdram and hyperram for dual image framework */
+define symbol m_sdram_start = isdefinedsymbol(__dual_image__) ? 0x81E00000 : 0x80000000;
+define symbol m_sdram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x02000000;
+define symbol m_hyperram_start = isdefinedsymbol(__dual_image__) ? 0x04600000 : 0x04000000;
+define symbol m_hyperram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x00800000;
+define symbol m_flash_start = 0x28000000;
+define symbol m_flash_size = 0x00800000;
+
+define symbol m_core1_image_maximum_size = 0x00040000;
+
+/* General definition */
+define symbol m_fcb_offset = 0x400;
+define symbol m_fcb_size = 0x200;
+define symbol m_fcb_start = m_flash_start + m_fcb_offset;
+define symbol m_fcb_end = m_fcb_start + m_fcb_size - 1;
+
+define symbol m_xmcd_offset = 0x800;
+define symbol m_xmcd_size = 0x400;
+define symbol m_xmcd_start = m_flash_start + m_xmcd_offset;
+define symbol m_xmcd_end = m_xmcd_start + m_xmcd_size - 1;
+
+define symbol m_container_offset = 0x1000;
+define symbol m_container_size = 0x2000;
+define symbol m_container_start = m_flash_start + m_container_offset;
+define symbol m_container_end = m_container_start + m_container_size - 1;
+
+define symbol app_image_offset = 0x0000B000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x01000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x08000;
+}
+
+define symbol m_qacode_start = m_code_tcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_code_tcm_start + m_code_tcm_size - 1;
+define symbol m_qadata_start = m_system_tcm_start;
+define symbol m_qadata_end = m_system_tcm_start + m_system_tcm_size - 1;
+define symbol m_ram_vector_table_start = m_code_tcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_flash_size - app_image_offset;
+define symbol m_data_size = m_hyperram_size;
+define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
+define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
+
+define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : 0;
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
+
+define symbol m_text_start = m_flash_start + app_image_offset;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_hyperram_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7 - m_ncache_size;
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+
+define symbol m_heap_start = m_ocram1_start;
+define symbol m_heap_end = m_ncache_start - 1;
+
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start;
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region FCB_region = mem:[from m_fcb_start to m_fcb_end];
+define region XMCD_region = mem:[from m_xmcd_start to m_xmcd_end];
+define region CONTAINER_region = mem:[from m_container_start to m_container_end];
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+define exported symbol __CONTAINER_IMG_OFFSET = start(TEXT_region) - start(CONTAINER_region);
+define exported symbol __CONTAINER_IMG_LOAD_ADDR = start(TEXT_region);
+define exported symbol __CONTAINER_IMG_ENTRY_ADDR = start(TEXT_region);
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+define block CORE1_IMAGE_BLOCK with alignment = 16, maximum size = m_core1_image_maximum_size { section __core1_image };
+
+/* cache line size = 16 bytes */
+define block CACHE_LINE_DATA_ZI with alignment = 16, end alignment = 16 { section CacheLineData };
+define block CACHE_LINE_DATA_RW with alignment = 16, end alignment = 16 { section CacheLineData.init };
+
+define block RO with fixed order { readonly section .intvec, readonly, block CORE1_IMAGE_BLOCK };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess, ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+keep{ section .boot_hdr.conf, section .boot_hdr.xmcd_data, section .boot_hdr.container };
+
+place in FCB_region { section .boot_hdr.conf };
+place in XMCD_region { section .boot_hdr.xmcd_data };
+place in CONTAINER_region { section .boot_hdr.container };
+place in TEXT_region { first block RO };
+place in QACODE_region { section .textrw, block QACCESS_CODE };
+place in DATA_region { block RW, block CACHE_LINE_DATA_RW };
+place in DATA_region { block ZI, block CACHE_LINE_DATA_ZI };
+place in QADATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.ld b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.ld
index 7dd7070dd5a4..62106ca6dbb8 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.ld
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.ld
@@ -168,8 +168,8 @@ SECTIONS
.text :
{
. = ALIGN(4);
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text)
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text*)
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
@@ -297,6 +297,11 @@ SECTIONS
. = ALIGN(32);
__ram_function_start__ = .;
*(CodeQuickAccess)
+ /* The FlexSPI drivers must run from TCM while the flash is being
+ reconfigured, mirroring the Keil/IAR QuickAccess placement. */
+ *fsl_flexspi.o(.text*)
+ *drv_flexspi_nor_flash.o(.text*)
+ *drv_flexspi.o(.text*)
. = ALIGN(128);
__ram_function_end__ = .;
} > m_qacode
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.icf
new file mode 100644
index 000000000000..5f3796333fce
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.icf
@@ -0,0 +1,176 @@
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm33
+** MIMXRT1189CVM8C_cm33
+** MIMXRT1189XVM8B_cm33
+** MIMXRT1189XVM8C_cm33
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+** Industrial Ethernet configuration:
+** - CM33 uses 256KB TCM only (128KB code TCM + 128KB system TCM),
+** OCRAM1 is reserved for CM7.
+** - CM33 uses 128KB OCRAM2 exclusively (64KB heap + 64KB non-cacheable data).
+** - 32KB OCRAM2 is reserved as RPMsg shared memory.
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+
+define symbol m_code_tcm_start = 0x0FFE0000;
+define symbol m_code_tcm_size = 0x00020000;
+
+define symbol m_system_tcm_start = 0x20000000;
+define symbol m_system_tcm_size = 0x00020000;
+
+/* OCRAM1 is not used by CM33 in this configuration, it is reserved for CM7 */
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+/* CM33 use last 2M bytes space of sdram and hyperram for dual image framework */
+define symbol m_sdram_start = isdefinedsymbol(__dual_image__) ? 0x81E00000 : 0x80000000;
+define symbol m_sdram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x02000000;
+define symbol m_hyperram_start = isdefinedsymbol(__dual_image__) ? 0x04600000 : 0x04000000;
+define symbol m_hyperram_size = isdefinedsymbol(__dual_image__) ? 0x00200000 : 0x00800000;
+define symbol m_flash_start = 0x28000000;
+define symbol m_flash_size = 0x01000000;
+
+define symbol m_core1_image_maximum_size = 0x00040000;
+
+/* General definition */
+define symbol app_image_offset = isdefinedsymbol(__dual_image__) ? 0x0010B000 : 0x0000B000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x01000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x10000;
+}
+
+define symbol m_qacode_start = m_code_tcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_code_tcm_start + m_code_tcm_size - 1;
+define symbol m_qadata_start = m_system_tcm_start;
+define symbol m_qadata_end = m_system_tcm_start + m_system_tcm_size - 1;
+define symbol m_ram_vector_table_start = m_code_tcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_code_tcm_size;
+define symbol m_data_size = m_system_tcm_size;
+
+/* Industrial Ethernet configuration:
+ * CM33 only uses 256KB TCM and 128KB OCRAM2, plus 32KB OCRAM2 as shared memory.
+ * OCRAM2 layout (256KB @ 0x20500000):
+ * [0x20500000, 0x2050FFFF] 64KB CM33 heap
+ * [0x20510000, 0x2051FFFF] 64KB non-cacheable data (NCACHE)
+ * [0x20520000, 0x20537FFF] 96KB reserved for CM7
+ * [0x20538000, 0x2053FFFF] 32KB RPMsg shared memory
+ * NCACHE and shared memory sizes must be 2^N and the start addresses must be
+ * multiples of the size so that the MPU configuration in BOARD_ConfigMPU()
+ * stays valid.
+ */
+define symbol m_heap_start = m_ocram2_start; /* 0x20500000 */
+
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ /* heap is placed at the end of the non-cacheable region */
+ define symbol m_ncache_size = 0x20000; /* 128KB, must be 2^N */
+ define symbol m_ncache_start = m_heap_start;
+} else {
+ define symbol m_ncache_size = 0x10000; /* 64KB, must be 2^N */
+ define symbol m_ncache_start = m_heap_start + m_ncache_size; /* 0x20510000 */
+}
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+define symbol m_heap_end = m_ncache_start - 1;
+
+define symbol m_shmem_size = 0x8000; /* 32KB shared memory, must be 2^N */
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start + m_ocram2_size - m_shmem_size; /* 0x20538000 */
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? 0 : 0;
+
+define symbol m_text_start = m_code_tcm_start;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_system_tcm_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+define block CORE1_IMAGE_BLOCK with alignment = 16, maximum size = m_core1_image_maximum_size { section __core1_image };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+place at address mem: m_interrupts_start { readonly section .intvec };
+
+place in TEXT_region { readonly };
+place in TEXT_region { block CORE1_IMAGE_BLOCK };
+place in TEXT_region { block QACCESS_CODE };
+place in DATA_region { block RW };
+place in DATA_region { block ZI };
+place in DATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.ld b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.ld
new file mode 100644
index 000000000000..68657644f29f
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.ld
@@ -0,0 +1,356 @@
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm33
+** MIMXRT1189CVM8C_cm33
+** MIMXRT1189XVM8B_cm33
+** MIMXRT1189XVM8C_cm33
+**
+** Compiler: GNU C Compiler
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the GNU C Compiler
+** Industrial Ethernet configuration:
+** - CM33 uses 256KB TCM only (128KB code TCM + 128KB system TCM),
+** OCRAM1 is reserved for CM7.
+** - CM33 uses 128KB OCRAM2 exclusively (64KB heap + 64KB non-cacheable data).
+** - 32KB OCRAM2 is reserved as RPMsg shared memory.
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Board memory map */
+m_code_tcm_start = 0x0FFE0000;
+m_code_tcm_size = 0x00020000;
+m_system_tcm_start = 0x20000000;
+m_system_tcm_size = 0x00020000;
+
+/* OCRAM1 is not used by CM33 in this configuration, it is reserved for CM7 */
+m_ocram2_start = 0x20500000;
+m_ocram2_size = 0x00040000;
+
+/* CM33 use last 2M bytes space of sdram and hyperram for dual image framework */
+m_sdram_start = DEFINED(__dual_image__) ? 0x81E00000 : 0x80000000;
+m_sdram_size = DEFINED(__dual_image__) ? 0x00200000 : 0x02000000;
+m_hyperram_start = DEFINED(__dual_image__) ? 0x04600000 : 0x04000000;
+m_hyperram_size = DEFINED(__dual_image__) ? 0x00200000 : 0x00800000;
+m_flash_start = 0x28000000;
+m_flash_size = 0x01000000;
+
+m_core1_image_maximum_size = 0x00040000;
+
+/* General definition */
+app_image_offset = DEFINED(__dual_image__) ? 0x0010B000 : 0x0000B000;
+vector_table_size = 0x00000400;
+m_qacode_start = m_code_tcm_start + (DEFINED(__ram_vector_table__) ? vector_table_size : 0);
+m_qacode_end = m_code_tcm_start + m_code_tcm_size - 1;
+m_qadata_start = m_system_tcm_start;
+m_qadata_end = m_system_tcm_start + m_system_tcm_size - 1;
+m_ram_vector_table_start = m_code_tcm_start;
+m_stack_size = DEFINED(__stack_size__) ? __stack_size__ : 0x1000;
+m_heap_size = DEFINED(__heap_size__) ? __heap_size__ : 0x10000;
+
+/* Target specific definition, code & data allocation */
+m_code_size = m_code_tcm_size - vector_table_size;
+m_data_size = m_system_tcm_size;
+
+/* Industrial Ethernet configuration:
+ * CM33 only uses 256KB TCM and 128KB OCRAM2, plus 32KB OCRAM2 as shared memory.
+ * OCRAM2 layout (256KB @ 0x20500000):
+ * [0x20500000, 0x2050FFFF] 64KB CM33 heap
+ * [0x20510000, 0x2051FFFF] 64KB non-cacheable data (NCACHE)
+ * [0x20520000, 0x20537FFF] 96KB reserved for CM7
+ * [0x20538000, 0x2053FFFF] 32KB RPMsg shared memory
+ * NCACHE and shared memory sizes must be 2^N and the start addresses must be
+ * multiples of the size so that the MPU configuration in BOARD_ConfigMPU()
+ * stays valid.
+ */
+m_ncache_size = DEFINED(__heap_noncacheable__) ? 0x20000 : 0x10000; /* must be 2^N */
+m_ncache_start = DEFINED(__heap_noncacheable__) ? m_ocram2_start : m_ocram2_start + m_ncache_size; /* 0x20510000 */
+m_shmem_size = 0x8000; /* 32KB shared memory, must be 2^N */
+
+m_ram_vector_table_size = DEFINED(__ram_vector_table__) ? 0 : 0;
+
+m_interrupts_start = m_code_tcm_start;
+m_interrupts_end = m_interrupts_start + vector_table_size - 1;
+
+m_text_start = m_interrupts_end + 1;
+m_text_end = m_text_start + m_code_size - 1;
+
+m_data_start = m_system_tcm_start;
+m_data_end = m_data_start + m_data_size - 1;
+
+m_ncache_end = m_ncache_start + m_ncache_size - 1 - (DEFINED(__heap_noncacheable__) ? m_heap_size : 0);
+
+m_heap_start = DEFINED(__heap_noncacheable__) ? m_ncache_end + 1 : m_ocram2_start; /* 0x20500000 */
+m_heap_end = m_heap_start + m_heap_size - 1;
+
+m_rpmsg_sh_mem_start = m_ocram2_start + m_ocram2_size - m_shmem_size; /* 0x20538000 */
+m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+
+/* Exported symbol definition */
+__VECTOR_TABLE = m_interrupts_start;
+__VECTOR_RAM = m_ram_vector_table_start;
+__RAM_VECTOR_TABLE_SIZE_BYTES = m_ram_vector_table_size;
+
+__NCACHE_REGION_START = m_ncache_start;
+__NCACHE_REGION_SIZE = m_ncache_size;
+__RPMSG_SH_MEM_START = DEFINED(__use_shmem__)? m_rpmsg_sh_mem_start : 0;
+__RPMSG_SH_MEM_SIZE = DEFINED(__use_shmem__)? m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1 : 0;
+
+/* Specify the memory areas */
+MEMORY
+{
+ m_interrupts_ram (RX) : ORIGIN = m_ram_vector_table_start, LENGTH = __RAM_VECTOR_TABLE_SIZE_BYTES
+ m_interrupts (RX) : ORIGIN = m_interrupts_start, LENGTH = m_interrupts_end - m_interrupts_start + 1
+ m_text (RX) : ORIGIN = m_text_start, LENGTH = m_text_end - m_text_start + 1
+ m_data (RW) : ORIGIN = m_data_start, LENGTH = m_data_end - m_data_start + 1
+ m_ncache (RW) : ORIGIN = m_ncache_start, LENGTH = m_ncache_end - m_ncache_start + 1
+ m_heap (RW) : ORIGIN = m_heap_start, LENGTH = m_heap_end - m_heap_start + 1
+ m_qacode (RX) : ORIGIN = m_qacode_start, LENGTH = m_qacode_end - m_qacode_start + 1
+ m_qadata (RW) : ORIGIN = m_qadata_start, LENGTH = m_qadata_end - m_qadata_start + 1
+ m_rpmsg (RW) : ORIGIN = m_rpmsg_sh_mem_start, LENGTH = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1
+}
+
+/* Define output sections */
+SECTIONS
+{
+ /* The startup code goes first */
+ .interrupts :
+ {
+ . = ALIGN(4);
+ __Vectors = .;
+ KEEP(*(.isr_vector)) /* Vector table and startup code */
+ . = ALIGN(4);
+ } > m_interrupts
+
+ .interrupts_ram :
+ {
+ . = ALIGN(4);
+ . += __RAM_VECTOR_TABLE_SIZE_BYTES;
+ . = ALIGN(4);
+ } > m_interrupts_ram
+
+ /* The program code */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+ *(CodeQuickAccess)
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ /* section information for finsh shell */
+ . = ALIGN(4);
+ __fsymtab_start = .;
+ KEEP(*(FSymTab))
+ __fsymtab_end = .;
+ . = ALIGN(4);
+ __vsymtab_start = .;
+ KEEP(*(VSymTab))
+ __vsymtab_end = .;
+ . = ALIGN(4);
+
+ /* section information for initial. */
+ . = ALIGN(4);
+ __rt_init_start = .;
+ KEEP(*(SORT(.rti_fn*)))
+ __rt_init_end = .;
+
+ . = ALIGN(16);
+ core1_image_start = .;
+ KEEP (*(.core1_code))
+ *(.core1_code*)
+ core1_image_end = .;
+ . = ALIGN(4) ;
+ } > m_text
+
+ ASSERT((core1_image_end - core1_image_start) <= m_core1_image_maximum_size, "Core1 image size exceeds the limit")
+
+ .ARM.extab :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } > m_text
+
+ .ARM :
+ {
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ } > m_text
+
+ .ctors :
+ {
+ __CTOR_LIST__ = .;
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ __CTOR_END__ = .;
+ } > m_text
+
+ .dtors :
+ {
+ __DTOR_LIST__ = .;
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ __DTOR_END__ = .;
+ } > m_text
+
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } > m_text
+
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } > m_text
+
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } > m_text
+
+ __etext = .; /* define a global symbol at end of code */
+
+ __data_flash_start = .; /* Symbol is used by startup for data initialization */
+ .data : AT(__data_flash_start)
+ {
+ . = ALIGN(4);
+ __data_start__ = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+ *(DataQuickAccess) /* quick access data section */
+ KEEP(*(.jcr*))
+ . = ALIGN(4);
+ __data_end__ = .; /* define a global symbol at data end */
+ } > m_data
+
+ __ram_function_flash_start = __data_flash_start + (__data_end__ - __data_start__); /* Symbol is used by startup for TCM code initialization */
+ .ram_function : AT(__ram_function_flash_start)
+ {
+ . = ALIGN(32);
+ __ram_function_start__ = .;
+ . = ALIGN(128);
+ __ram_function_end__ = .;
+ } > m_qacode
+
+ __noncache_data_flash_start = __ram_function_flash_start + (__ram_function_end__ - __ram_function_start__);
+ .ncache.init : AT(__noncache_data_flash_start)
+ {
+ . = ALIGN(4);
+ __noncache_data_start__ = .; /* create a global symbol at ncache data start */
+ *(NonCacheable.init)
+ . = ALIGN(4);
+ __noncache_data_end__ = .; /* create a global symbol at ncache data end */
+ } > m_ncache
+
+ .ncache :
+ {
+ . = ALIGN(4);
+ __noncache_bss_start__ = .; /* define a global symbol at ncache bss start */
+ *(NonCacheable)
+ . = ALIGN(4);
+ __noncache_bss_end__ = .; /* define a global symbol at ncache bss end */
+ } > m_ncache
+
+ __qadata_flash_start = __noncache_data_flash_start + (__noncache_data_end__ - __noncache_data_start__);
+ .qadata : AT(__qadata_flash_start)
+ {
+ . = ALIGN(4);
+ __qadata_start__ = .;
+ . = ALIGN(4);
+ __qadata_end__ = .;
+ } > m_qadata
+
+ text_data_end = __qadata_flash_start + (__qadata_end__ - __qadata_start__);
+ text_end = ORIGIN(m_text) + LENGTH(m_text);
+ ASSERT(text_data_end < text_end, "region m_text overflowed with text and data")
+
+ /* Uninitialized data section */
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss section */
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > m_data
+
+ .rpmsg :
+ {
+ *(.noinit.$rpmsg_sh_mem)
+ } > m_rpmsg
+
+ .heap :
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ end = .;
+ . += m_heap_size;
+ __HeapLimit = .; /* Add for _sbrk */
+ } > m_heap
+
+ .stack :
+ {
+ . = ALIGN(8);
+ __StackStart = .;
+ . += m_stack_size;
+ } > m_data
+
+ /* Initializes stack on the end of block */
+ __StackTop = ORIGIN(m_data) + LENGTH(m_data);
+ __StackLimit = __StackTop - m_stack_size;
+ PROVIDE(__stack = __StackTop);
+ PROVIDE (__stack_size = m_stack_size);
+ ASSERT(__StackLimit >= __StackStart, "region m_data overflowed with stack and heap")
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.scf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.scf
new file mode 100644
index 000000000000..1064feb4ecc3
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/MIMXRT1189xxxxx_cm33_ram_industry.scf
@@ -0,0 +1,212 @@
+#!armclang --target=arm-arm-none-eabi -mcpu=cortex-m33 -E -x c
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm33
+** MIMXRT1189CVM8C_cm33
+** MIMXRT1189XVM8B_cm33
+** MIMXRT1189XVM8C_cm33
+**
+** Compiler: Keil ARM C/C++ Compiler
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the Keil ARM C/C++ Compiler
+** Industrial Ethernet configuration:
+** - CM33 uses 256KB TCM only (128KB code TCM + 128KB system TCM),
+** OCRAM1 is reserved for CM7.
+** - CM33 uses 128KB OCRAM2 exclusively (64KB heap + 64KB non-cacheable data).
+** - 32KB OCRAM2 is reserved as RPMsg shared memory.
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+
+/* Board memory map */
+
+#define m_code_tcm_start 0x0FFE0000
+#define m_code_tcm_size 0x00020000
+
+#define m_system_tcm_start 0x20000000
+#define m_system_tcm_size 0x00020000
+
+/* OCRAM1 is not used by CM33 in this configuration, it is reserved for CM7 */
+#define m_ocram2_start 0x20500000
+#define m_ocram2_size 0x00040000
+
+#if defined(__dual_image__)
+/* CM33 use last 2M bytes space of sdram and hyperram for dual image framework */
+#define m_sdram_start 0x81E00000
+#define m_sdram_size 0x00200000
+#define m_hyperram_start 0x04600000
+#define m_hyperram_size 0x00200000
+#else
+#define m_sdram_start 0x80000000
+#define m_sdram_size 0x02000000
+#define m_hyperram_start 0x04000000
+#define m_hyperram_size 0x00800000
+#endif
+
+#define m_flash_start 0x28000000
+#define m_flash_size 0x01000000
+#define m_core1_image_maximum_size 0x00040000
+
+/* General definition */
+#if defined(__dual_image__)
+#define app_image_offset 0x0010B000
+#else
+#define app_image_offset 0x0000B000
+#endif
+
+#define vector_table_size 0x400
+#define m_ram_vector_table_start m_code_tcm_start
+
+#if defined(__stack_size__)
+ #define stack_size __stack_size__
+#else
+ #define stack_size 0x01000
+#endif
+
+#if defined(__heap_size__)
+ #define heap_size __heap_size__
+#else
+ #define heap_size 0x10000
+#endif
+
+/* Target specific definition, code & data allocation */
+#if defined(__ram_vector_table__)
+#define m_ram_vector_table_size 0
+#else
+#define m_ram_vector_table_size 0
+#endif
+
+#define m_qacode_start m_code_tcm_start + m_ram_vector_table_size
+#define m_qadata_start m_system_tcm_start
+#define m_qacode_size 0
+#define m_qadata_size 0
+
+#define m_text_size m_code_tcm_size
+#define m_data_size m_system_tcm_size
+
+/* Industrial Ethernet configuration:
+ * CM33 only uses 256KB TCM and 128KB OCRAM2, plus 32KB OCRAM2 as shared memory.
+ * OCRAM2 layout (256KB @ 0x20500000):
+ * [0x20500000, 0x2050FFFF] 64KB CM33 heap
+ * [0x20510000, 0x2051FFFF] 64KB non-cacheable data (NCACHE)
+ * [0x20520000, 0x20537FFF] 96KB reserved for CM7
+ * [0x20538000, 0x2053FFFF] 32KB RPMsg shared memory
+ * NCACHE and shared memory sizes must be 2^N and the start addresses must be
+ * multiples of the size so that the MPU configuration in BOARD_ConfigMPU()
+ * stays valid.
+ */
+#define m_heap_start m_ocram2_start /* 0x20500000 */
+#define m_heap_max_size 0x10000 /* 64KB heap region */
+
+#if defined(__heap_noncacheable__)
+/* heap is placed at the end of the non-cacheable region */
+#define m_ncache_size 0x20000 /* 128KB, must be 2^N */
+#define m_ncache_start m_heap_start
+#else
+#define m_ncache_size 0x10000 /* 64KB, must be 2^N */
+#define m_ncache_start m_heap_start + m_heap_max_size /* 0x20510000 */
+#endif
+
+#define m_shmem_size 0x8000 /* 32KB shared memory, must be 2^N */
+#define m_shmem_start m_ocram2_start + m_ocram2_size - m_shmem_size /* 0x20538000 */
+
+#define m_text_start m_code_tcm_start
+#define m_interrupts_start m_text_start
+#define m_data_start m_system_tcm_start
+
+; load region
+LR_m_text m_text_start m_text_size
+{
+ ; load address = execution address
+ VECTOR_ROM m_interrupts_start FIXED vector_table_size
+ {
+ * (.isr_vector,+FIRST)
+ }
+
+ VECTOR_RAM m_ram_vector_table_start EMPTY m_ram_vector_table_size
+ {
+ }
+
+ ; load address = execution address
+ ER_m_text m_text_start + vector_table_size FIXED m_text_size - vector_table_size
+ {
+ * (InRoot$$Sections)
+ .ANY (+RO)
+ .ANY (CodeQuickAccess)
+ }
+
+ CORE1_REGION +0 ALIGN 16 m_core1_image_maximum_size
+ {
+ .ANY (.core1_code)
+ }
+
+ ER_m_QuickAccessCode m_qacode_start EMPTY m_qacode_size
+ {
+ }
+
+ ER_m_QuickAccessData m_qadata_start EMPTY m_qadata_size
+ {
+ }
+
+ RW_m_data m_data_start m_data_size-stack_size
+ {
+ .ANY (+RW +ZI)
+ .ANY (DataQuickAccess)
+ }
+
+ ; ncache data
+ RW_m_ncache m_ncache_start m_ncache_size
+ {
+ .ANY (NonCacheable.init)
+ .ANY (.bss.NonCacheable)
+ }
+
+#if defined(__heap_noncacheable__)
+ ; Heap region growing up
+ ARM_LIB_HEAP +0 ALIGN 0x100 EMPTY heap_size
+ {
+ }
+#endif
+
+ ; Empty region added for MPU configuration
+ RW_m_ncache_aux m_ncache_start + m_ncache_size EMPTY 0
+ {
+ }
+
+#if defined(__use_shmem__)
+ ; shared memory data
+ RPMSG_SH_MEM m_shmem_start m_shmem_size
+ {
+ .ANY (rpmsg_sh_mem_section)
+ }
+
+ ; Empty region added for MPU configuration
+ RPMSG_SH_MEM_aux m_shmem_start + m_shmem_size EMPTY 0
+ {
+ }
+#endif
+
+#if !defined(__heap_noncacheable__)
+ ; Heap region growing up
+ ARM_LIB_HEAP m_heap_start EMPTY heap_size
+ {
+ }
+#endif
+
+ ; Stack region growing down
+ ARM_LIB_STACK m_data_start+m_data_size EMPTY -stack_size
+ {
+ }
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/readme.md b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/readme.md
new file mode 100644
index 000000000000..466e16ed0e5b
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/readme.md
@@ -0,0 +1,78 @@
+# CM33 Memory Layout
+
+[English version](readme_en.md)
+
+本目录提供四种 CM33 内存布局,每种都有 GCC `.ld`、Keil `.scf` 和 IAR `.icf` 文件。
+下表地址为 CM33 视角,结束地址包含在区域内;KB/MB 按 1024/1048576 字节计算,容量不代表实际占用。
+
+## 1. 当前内存布局
+
+| 内存 | 起始地址 | 结束地址 | 容量 | 用途 |
+| --- | --- | --- | --- | --- |
+| Code TCM | `0x0FFE0000` | `0x0FFFFFFF` | 128KB | RAM 类 target 的向量和代码;XIP 类 target 的快速代码 |
+| System TCM | `0x20000000` | `0x2001FFFF` | 128KB | 普通数据和主栈,或快速数据 |
+| OCRAM1 | `0x20484000` | `0x204FFFFF` | 496KB | 普通布局的 Heap 和 non-cacheable 缓冲区;工业布局留给 CM7 |
+| OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB | 双核共享内存,工业布局另划分独占区域 |
+| HyperRAM,非双镜像模式 | `0x04000000` | `0x047FFFFF` | 8MB | HyperRAM target 的普通数据和主栈 |
+| HyperRAM,双镜像模式 | `0x04600000` | `0x047FFFFF` | 2MB | 定义 `__dual_image__` 后,CM33 使用末尾 2MB |
+| FlexSPI NOR,常规 XIP 窗口 | `0x28000000` | `0x287FFFFF` | 8MB | XIP 类 target 的启动信息、向量、代码及数据初值;GCC HyperRAM 文件有例外,见下文 |
+
+RAM 类向量占 Code TCM 首部 1KB,代码从 `0x0FFE0400` 开始;初始化数据副本也占用 TCM 镜像空间。
+XIP 类向量位于 `0x2800B000`,普通代码从 `0x2800B400` 开始,前部空间用于启动信息。
+HyperRAM target 的快速数据仍在 System TCM,Heap 仍在 OCRAM1。当前四种布局的主要内容均不放入 SDRAM。
+
+### 普通 OCRAM 布局
+
+适用于 `RAM`、`FLEXSPI_NOR`、`FLEXSPI_NOR_HYPERRAM`。
+以下按双核配置(定义 `__multicore__`)且使用 cacheable Heap 说明,共享区需启用 `__use_shmem__`。
+
+| 区域 | 起始地址 | 结束地址 | 容量 |
+| --- | --- | --- | --- |
+| CM33 Heap 可用窗口 | `0x20484000` | `0x2049FFFF` | 112KB |
+| CM33 non-cacheable 缓冲区 | `0x204A0000` | `0x204BFFFF` | 128KB |
+| 留给 CM7 的 OCRAM1 | `0x204C0000` | `0x204FFFFF` | 256KB |
+| 双核共享 OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB |
+
+未定义 `__multicore__` 时,CM33 Heap 窗口扩展到 OCRAM1 低地址 240KB,non-cacheable 窗口改为高地址 256KB。
+
+### 工业以太网 OCRAM 布局
+
+适用于 `RAM_INDUSTRY`,以下按 cacheable Heap 说明。
+
+| 区域 | 起始地址 | 结束地址 | 容量 |
+| --- | --- | --- | --- |
+| OCRAM1,留给 CM7 | `0x20484000` | `0x204FFFFF` | 496KB |
+| CM33 Heap | `0x20500000` | `0x2050FFFF` | 64KB |
+| CM33 non-cacheable 缓冲区 | `0x20510000` | `0x2051FFFF` | 64KB |
+| CM7 独占额外 OCRAM2 | `0x20520000` | `0x20537FFF` | 96KB |
+| 双核共享 OCRAM2 | `0x20538000` | `0x2053FFFF` | 32KB |
+
+CM33 使用 256KB TCM 和独占的 128KB OCRAM2,不使用 OCRAM1;双核共享区缩小到 32KB。
+CM7 应使用匹配的工业分区,不能继续把整个 OCRAM2 当作共享区。
+
+## 2. 各 Target 的差异
+
+| Target 类型 | 向量/普通代码 | 普通数据/主栈 | OCRAM 布局 | GCC 默认 Heap / 主栈 | Keil、IAR 默认 Heap / 主栈 |
+| --- | --- | --- | --- | --- | --- |
+| `RAM` | Code TCM | System TCM | 普通 | 1KB / 1KB | 32KB / 4KB |
+| `RAM_INDUSTRY` | Code TCM | System TCM | 工业 | 64KB / 4KB | 64KB / 4KB |
+| `FLEXSPI_NOR` | Flash XIP | System TCM | 普通 | 32KB / 4KB | 32KB / 4KB |
+| `FLEXSPI_NOR_HYPERRAM` | Flash XIP | HyperRAM | 普通 | 32KB / 4KB | 32KB / 4KB |
+
+Heap 窗口容量不等于默认分配大小,主栈也不是各 RT-Thread 线程的独立栈。工程可覆盖堆栈大小或将 Heap 改为 non-cacheable。
+CM33 目前没有独立 `HYPERRAM` 或 `FLEXSPI_NOR_INDUSTRY` target。
+
+当前 [GCC FLEXSPI_NOR_HYPERRAM 文件](MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.ld) 的 Flash 大小声明为 `0x08000000`(128MB),Keil/IAR 则为 `0x00800000`(8MB)。这只是当前文件差异,不表示板上有 128MB Flash;使用 GCC 时需核对实际容量。
+
+## 3. 应用范围
+
+| Target 类型 | 适用场景 |
+| --- | --- |
+| `RAM` | 内部 TCM 调试、小型控制和实时应用,不依赖外部 RAM |
+| `RAM_INDUSTRY` | 工业以太网双核开发,CM33 承担控制或通信管理,OCRAM1 留给 CM7 |
+| `FLEXSPI_NOR` | 常规 Flash XIP 应用,代码较大但普通数据可放入内部 System TCM |
+| `FLEXSPI_NOR_HYPERRAM` | Flash XIP 且需要较大数据缓冲区的通信、采集或数据处理应用 |
+
+RAM 类镜像需要调试器或启动流程装载;HyperRAM 必须在数据和主栈使用前可访问。
+与 CM7 共用 HyperRAM 时,应选择匹配的双镜像分配;共享通信需启用共享区,工业分区需与 CM7 一致。
+链接布局只决定存放位置,不代替外设和通信初始化。
\ No newline at end of file
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/readme_en.md b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/readme_en.md
new file mode 100644
index 000000000000..059fa2db2d69
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/linker_scripts/readme_en.md
@@ -0,0 +1,78 @@
+# CM33 Memory Layout
+
+[Chinese version](readme.md)
+
+This directory provides four CM33 memory layouts, each with GCC `.ld`, Keil `.scf`, and IAR `.icf` files.
+Addresses are from the CM33 perspective and table end addresses are inclusive. KB/MB mean 1024/1048576 bytes; capacities are not actual usage.
+
+## 1. Current Memory Layout
+
+| Memory | Start | End | Capacity | Purpose |
+| --- | --- | --- | --- | --- |
+| Code TCM | `0x0FFE0000` | `0x0FFFFFFF` | 128KB | Vectors and code for RAM targets; quick-access code for XIP targets |
+| System TCM | `0x20000000` | `0x2001FFFF` | 128KB | Ordinary data and main stack, or quick-access data |
+| OCRAM1 | `0x20484000` | `0x204FFFFF` | 496KB | Heap and non-cacheable buffers in standard layouts; reserved for CM7 in the industry layout |
+| OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB | Multicore shared memory; the industry layout also reserves exclusive areas |
+| HyperRAM, without dual-image mode | `0x04000000` | `0x047FFFFF` | 8MB | Ordinary data and main stack for the HyperRAM target |
+| HyperRAM, with dual-image mode | `0x04600000` | `0x047FFFFF` | 2MB | CM33 uses the final 2MB when `__dual_image__` is defined |
+| FlexSPI NOR, standard XIP window | `0x28000000` | `0x287FFFFF` | 8MB | Boot information, vectors, code, and data initial values for XIP targets; the GCC HyperRAM file has an exception noted below |
+
+RAM targets reserve the first 1KB of Code TCM for vectors, with code starting at `0x0FFE0400`. Initialization copies also consume TCM image space.
+XIP vectors are at `0x2800B000`, with ordinary code starting at `0x2800B400`; earlier Flash space is used for boot information.
+The HyperRAM target keeps quick-access data in System TCM and the heap in OCRAM1. None of these four layouts places its main contents in SDRAM.
+
+### Standard OCRAM Layout
+
+Applies to `RAM`, `FLEXSPI_NOR`, and `FLEXSPI_NOR_HYPERRAM`.
+The table assumes multicore configuration (`__multicore__` defined) and a cacheable heap. Shared memory requires `__use_shmem__` to be enabled.
+
+| Region | Start | End | Capacity |
+| --- | --- | --- | --- |
+| CM33 available heap window | `0x20484000` | `0x2049FFFF` | 112KB |
+| CM33 non-cacheable buffers | `0x204A0000` | `0x204BFFFF` | 128KB |
+| OCRAM1 reserved for CM7 | `0x204C0000` | `0x204FFFFF` | 256KB |
+| Multicore shared OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB |
+
+Without `__multicore__`, the CM33 heap window expands to the lower 240KB of OCRAM1, and the non-cacheable window becomes the upper 256KB.
+
+### Industrial Ethernet OCRAM Layout
+
+Applies to `RAM_INDUSTRY`. The table assumes a cacheable heap.
+
+| Region | Start | End | Capacity |
+| --- | --- | --- | --- |
+| OCRAM1 reserved for CM7 | `0x20484000` | `0x204FFFFF` | 496KB |
+| CM33 heap | `0x20500000` | `0x2050FFFF` | 64KB |
+| CM33 non-cacheable buffers | `0x20510000` | `0x2051FFFF` | 64KB |
+| CM7-exclusive additional OCRAM2 | `0x20520000` | `0x20537FFF` | 96KB |
+| Multicore shared OCRAM2 | `0x20538000` | `0x2053FFFF` | 32KB |
+
+CM33 uses 256KB of TCM and 128KB of exclusive OCRAM2, without using OCRAM1. The shared window is reduced to 32KB.
+CM7 must use a matching industry partition rather than treating all OCRAM2 as shared memory.
+
+## 2. Target Differences
+
+| Target type | Vectors/ordinary code | Ordinary data/main stack | OCRAM layout | GCC default heap / main stack | Keil, IAR default heap / main stack |
+| --- | --- | --- | --- | --- | --- |
+| `RAM` | Code TCM | System TCM | Standard | 1KB / 1KB | 32KB / 4KB |
+| `RAM_INDUSTRY` | Code TCM | System TCM | Industry | 64KB / 4KB | 64KB / 4KB |
+| `FLEXSPI_NOR` | Flash XIP | System TCM | Standard | 32KB / 4KB | 32KB / 4KB |
+| `FLEXSPI_NOR_HYPERRAM` | Flash XIP | HyperRAM | Standard | 32KB / 4KB | 32KB / 4KB |
+
+Heap window capacity is not the default allocated heap size, and the main stack is not each RT-Thread thread's individual stack. Projects can override sizes or select a non-cacheable heap.
+CM33 currently has no standalone `HYPERRAM` or `FLEXSPI_NOR_INDUSTRY` target.
+
+The current [GCC FLEXSPI_NOR_HYPERRAM file](MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram.ld) declares a Flash size of `0x08000000` (128MB), whereas Keil/IAR declare `0x00800000` (8MB). This is a file difference, not evidence of 128MB of physical Flash. Check the actual capacity when using GCC.
+
+## 3. Application Scope
+
+| Target type | Suitable applications |
+| --- | --- |
+| `RAM` | Internal-TCM debugging and small control or real-time applications without external RAM |
+| `RAM_INDUSTRY` | Industrial Ethernet multicore development with CM33 handling control or communication management and OCRAM1 reserved for CM7 |
+| `FLEXSPI_NOR` | Conventional Flash XIP applications with larger code and ordinary data that fits in internal System TCM |
+| `FLEXSPI_NOR_HYPERRAM` | Flash XIP communications, acquisition, or data-processing applications requiring larger data buffers |
+
+RAM images require loading by a debugger or boot flow. HyperRAM must be accessible before ordinary data and the main stack are used.
+When sharing HyperRAM with CM7, use matching dual-image allocations. Shared communication requires shared memory to be enabled, and industry partitions must match CM7.
+Memory layouts determine placement, not peripheral or communication initialization.
\ No newline at end of file
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.h b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.h
index bbea69d06c58..356b3997583f 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.h
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.h
@@ -107,7 +107,7 @@
#define RT_CONSOLEBUF_SIZE 128
#define RT_CONSOLE_DEVICE_NAME "uart1"
#define RT_USING_CONSOLE_OUTPUT_CTL
-#define RT_VER_NUM 0x50300
+#define RT_VER_NUM 0x50400
#define RT_BACKTRACE_LEVEL_MAX_NR 32
/* end of RT-Thread Kernel */
#define RT_USING_HW_ATOMIC
@@ -253,6 +253,9 @@
/* LVGL: powerful and easy-to-use embedded GUI library */
+
+/* GD32EmbeddedUI demos require LVGL v8.3.11 */
+
/* end of LVGL: powerful and easy-to-use embedded GUI library */
/* u8g2: a monochrome graphic library */
@@ -299,6 +302,10 @@
/* end of Kendryte SDK */
+/* MM32 HAL & SDK Drivers */
+
+/* end of MM32 HAL & SDK Drivers */
+
/* WCH HAL & SDK Drivers */
/* end of WCH HAL & SDK Drivers */
@@ -329,9 +336,21 @@
/* end of HPMicro SDK */
+/* FM33 Drivers */
+
+/* end of FM33 Drivers */
+
/* FT32 HAL & SDK Drivers */
/* end of FT32 HAL & SDK Drivers */
+
+/* NOVOSNS Drivers */
+
+/* end of NOVOSNS Drivers */
+
+/* N32 Drivers */
+
+/* end of N32 Drivers */
/* end of HAL & SDK Drivers */
/* sensors drivers */
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.py b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.py
index ab1be162d20f..34daf965cd37 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.py
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/rtconfig.py
@@ -29,11 +29,11 @@
if os.getenv('RTT_EXEC_PATH'):
EXEC_PATH = os.getenv('RTT_EXEC_PATH')
-BUILD = 'debug'
-# BUILD = 'release'
+# BUILD = 'debug'
+BUILD = 'release'
# Read linker script selection from rtconfig.h (set by Kconfig BSP_LINKER_SCRIPT_* choice).
-# Supported types: RAM, FLEXSPI_NOR, FLEXSPI_NOR_HYPERRAM
+# Supported types: RAM, RAM_INDUSTRY, FLEXSPI_NOR, FLEXSPI_NOR_HYPERRAM
# Default to RAM when no match is found.
_LINKER_SCRIPT_TYPE = 'RAM'
_rtconfig_h = os.path.join(os.path.dirname(__file__), 'rtconfig.h')
@@ -50,6 +50,9 @@
if _s.startswith('#define BSP_LINKER_SCRIPT_FLEXSPI_NOR'):
_LINKER_SCRIPT_TYPE = 'FLEXSPI_NOR'
break
+ if _s.startswith('#define BSP_LINKER_SCRIPT_RAM_INDUSTRY'):
+ _LINKER_SCRIPT_TYPE = 'RAM_INDUSTRY'
+ break
if _s.startswith('#define BSP_LINKER_SCRIPT_RAM'):
_LINKER_SCRIPT_TYPE = 'RAM'
break
@@ -57,6 +60,7 @@
# Base filename (without extension) for the selected linker script.
_LINKER_SCRIPT_BASE = {
'RAM': 'MIMXRT1189xxxxx_cm33_ram',
+ 'RAM_INDUSTRY': 'MIMXRT1189xxxxx_cm33_ram_industry',
'FLEXSPI_NOR': 'MIMXRT1189xxxxx_cm33_flexspi_nor',
'FLEXSPI_NOR_HYPERRAM': 'MIMXRT1189xxxxx_cm33_flexspi_nor_hyperram',
}[_LINKER_SCRIPT_TYPE]
@@ -232,6 +236,7 @@
# Map from linker script type to the matching Keil target name.
_LINKER_SCRIPT_TO_KEIL_TARGET = {
'RAM': 'rtthread_ram',
+ 'RAM_INDUSTRY': 'rtthread_ram_industry',
'FLEXSPI_NOR': 'rtthread_flexspi_nor',
'FLEXSPI_NOR_HYPERRAM': 'rtthread_flexspi_nor_hyperram',
}
@@ -248,6 +253,10 @@ def update_keil_active_target(uvoptx_path='project.uvoptx'):
tree = etree.parse(uvoptx_path)
root = tree.getroot()
+ if not any(tgt.findtext('TargetName') == active for tgt in tree.findall('Target')):
+ print('Keil target not found: ' + active + '; active target unchanged')
+ return
+
for tgt in tree.findall('Target'):
tname = tgt.find('TargetName')
is_current = tgt.find('TargetOption/OPTFL/IsCurrentTarget')
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewd b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewd
index 7d85c610659e..f7d5f198f7fe 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewd
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewd
@@ -1640,6 +1640,1645 @@
0
+
+ rtthread_ram_industry
+
+ ARM
+
+ 0
+
+ C-SPY
+ 2
+
+ 33
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ARMSIM_ID
+ 2
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+ CADI_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+ CMSISDAP_ID
+ 2
+
+ 4
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ E2_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+ GDBSERVER_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+ GPLINK_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ IJET_ID
+ 2
+
+ 10
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JLINK_ID
+ 2
+
+ 16
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LMIFTDI_ID
+ 2
+
+ 3
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ NULINK_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ PEMICRO_ID
+ 2
+
+ 3
+ 1
+ 0
+
+
+
+
+
+
+
+ STLINK_ID
+ 2
+
+ 8
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THIRDPARTY_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ TIFET_ID
+ 2
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XDS100_ID
+ 2
+
+ 9
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Azure\AzureArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin
+ 0
+
+
rtthread_flexspi_nor
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewp b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewp
index 202125caf683..0e0e92f00542 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewp
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.ewp
@@ -1099,6 +1099,1104 @@
2
+
+ rtthread_ram_industry
+
+ ARM
+
+ 0
+
+ General
+ 3
+
+ 37
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCARM
+ 2
+
+ 39
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AARM
+ 2
+
+ 12
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OBJCOPY
+ 0
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ CUSTOM
+ 4
+
+
+
+ inputOutputBased
+
+
+
+ ILINK
+ 0
+
+ 28
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IARCHIVE
+ 0
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ BUILDACTION
+ 2
+
+
rtthread_flexspi_nor
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvoptx b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvoptx
index 9d840ecb20b4..b67deb530d67 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvoptx
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvoptx
@@ -181,6 +181,166 @@
+
+ rtthread_ram_industry
+ 0x4
+ ARM-ADS
+
+ 33000000
+
+ 1
+ 1
+ 0
+ 1
+ 0
+
+
+ 1
+ 65535
+ 0
+ 0
+ 0
+
+
+ 79
+ 66
+ 8
+ .\build\keil\List\
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 1
+ 0
+ 0
+
+ 8
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 4
+
+
+
+
+
+
+
+
+
+ .\evkmimxrt1180_ram_cm33.ini
+ Segger\JL2CM3.dll
+
+
+
+ 0
+ JL2CM3
+ -U600109563 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD30500000 -FC8000 -FN1 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33.FMIMXRT1180_EVK_FSPI1_QSPI_CM33 -FS028000000 -FL01000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM)
+
+
+ 0
+ UL2V8M
+ UL2V8M(-S0 -C0 -P0 -FD20000000 -FC20000 -FN2 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33 -FS028000000 -FL01000000 -FF1MIMXRT1180_EVK_FSPI1_QSPI_CM7 -FS128000000 -FL11000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM) -FP1($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM))
+
+
+
+
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+ 1
+ 0
+ 2
+ 10000000
+
+
+
+
rtthread_flexspi_nor
0x4
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvprojx b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvprojx
index 953b5687c1fb..d88da827e11e 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvprojx
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/template.uvprojx
@@ -381,6 +381,381 @@
+
+ rtthread_ram_industry
+ 0x4
+ ARM-ADS
+ 6220000::V6.22::ARMCLANG
+ 1
+
+
+ MIMXRT1189CVM8C:cm33
+ NXP
+ NXP.MIMXRT1189_DFP.25.06.00
+ https://mcuxpresso.nxp.com/cmsis_pack/repo/
+ CPUTYPE("Cortex-M33") FPU3(SFPU) TZ DSP ELITTLE
+
+
+
+ 0
+ $$Device:MIMXRT1189CVM8B$fsl_device_registers.h
+
+
+
+
+
+
+
+
+
+ $$Device:MIMXRT1189CVM8B$MIMXRT1189_cm33.xml
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\build\keil\Obj\
+ rtthread
+ 1
+ 0
+ 1
+ 1
+ 0
+ .\build\keil\List\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+ fromelf --bin !L --output rtthread.bin
+
+ 0
+ 0
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMV8M.DLL
+ -REMAP -MPU
+ DCM.DLL
+ -pCM33
+ SARMV8M.DLL
+ -MPU
+ TCM.DLL
+ -pCM33
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ 4102
+
+ 1
+ BIN\UL2V8M.DLL
+ "" ()
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ "Cortex-M33"
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x20000
+
+
+ 1
+ 0x0
+ 0x100000
+
+
+ 1
+ 0x0
+ 0x20000
+
+
+ 1
+ 0x8000000
+ 0x1000000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x20000
+
+
+ 0
+ 0x20240000
+ 0x80000
+
+
+ 0
+ 0x202c0000
+ 0x80000
+
+
+ 0
+ 0x20000000
+ 0x20000
+
+
+ 0
+ 0x1ffe0000
+ 0x20000
+
+
+
+
+
+ 1
+ 6
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3
+ 0
+ 0
+ 1
+ 0
+ 0
+ 3
+ 3
+ 1
+ 1
+ 0
+ 0
+ 0
+
+ -fno-common -fdata-sections -fno-builtin -mthumb
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ -x assembler-with-cpp
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x20000000
+
+ .\board\linker_scripts\MIMXRT1189xxxxx_cm33_ram_industry.scf
+
+
+
+
+ 6439,6314
+
+
+
+
rtthread_flexspi_nor
0x4
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/.config b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/.config
index 33552fce3a47..dfcddb5ea790 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/.config
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/.config
@@ -182,7 +182,7 @@ CONFIG_RT_USING_CONSOLE=y
CONFIG_RT_CONSOLEBUF_SIZE=128
CONFIG_RT_CONSOLE_DEVICE_NAME="uart12"
CONFIG_RT_USING_CONSOLE_OUTPUT_CTL=y
-CONFIG_RT_VER_NUM=0x50300
+CONFIG_RT_VER_NUM=0x50400
# CONFIG_RT_USING_STDC_ATOMIC is not set
CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32
# end of RT-Thread Kernel
@@ -471,6 +471,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ABUP_FOTA is not set
# CONFIG_PKG_USING_LIBCURL2RTT is not set
# CONFIG_PKG_USING_CAPNP is not set
+# CONFIG_PKG_USING_ERPC is not set
# CONFIG_PKG_USING_AGILE_TELNET is not set
# CONFIG_PKG_USING_NMEALIB is not set
# CONFIG_PKG_USING_PDULIB is not set
@@ -557,6 +558,10 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_LVGL is not set
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
+
+#
+# GD32EmbeddedUI demos require LVGL v8.3.11
+#
# end of LVGL: powerful and easy-to-use embedded GUI library
#
@@ -587,12 +592,15 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_GUIENGINE is not set
# CONFIG_PKG_USING_PERSIMMON is not set
# CONFIG_PKG_USING_3GPP_AMRNB is not set
+# CONFIG_PKG_USING_LITETYPE is not set
# end of multimedia packages
#
# tools packages
#
# CONFIG_PKG_USING_VECTOR is not set
+# CONFIG_PKG_USING_SORCH is not set
+# CONFIG_PKG_USING_DICT is not set
# CONFIG_PKG_USING_CMBACKTRACE is not set
# CONFIG_PKG_USING_MCOREDUMP is not set
# CONFIG_PKG_USING_EASYFLASH is not set
@@ -645,6 +653,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_UORB is not set
# CONFIG_PKG_USING_RT_TUNNEL is not set
# CONFIG_PKG_USING_VIRTUAL_TERMINAL is not set
+# CONFIG_PKG_USING_FEE is not set
+# CONFIG_PKG_USING_MRAMTRACE is not set
# end of tools packages
#
@@ -740,6 +750,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_HEARTBEAT is not set
# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set
# CONFIG_PKG_USING_CHERRYECAT is not set
+# CONFIG_PKG_USING_EVENT_LOOP is not set
+# CONFIG_PKG_USING_THREAD_MANAGER is not set
# end of system packages
#
@@ -791,6 +803,9 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_STM32WB_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_STM32MP1_M4_HAL_DRIVER is not set
# CONFIG_PKG_USING_STM32MP1_M4_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32N6_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32N6_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32N657xx_FSBL is not set
# end of STM32 HAL & SDK Drivers
#
@@ -823,7 +838,21 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_NRFX is not set
# CONFIG_PKG_USING_RASPBERRYPI_PICO_RP2350_SDK is not set
# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set
-# CONFIG_PKG_USING_MM32 is not set
+
+#
+# MM32 HAL & SDK Drivers
+#
+# CONFIG_PKG_USING_MM32F103XX_CMSIS is not set
+# CONFIG_PKG_USING_MM32F3270X_CMSIS is not set
+# CONFIG_PKG_USING_MM32F5260X_CMSIS is not set
+# CONFIG_PKG_USING_MM32L0XX_CMSIS is not set
+# CONFIG_PKG_USING_MM32L3XX_CMSIS is not set
+# CONFIG_PKG_USING_MM32F103XX_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32F3270X_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32F5260X_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32L0XX_HAL_DRIVER is not set
+# CONFIG_PKG_USING_MM32L3XX_HAL_DRIVER is not set
+# end of MM32 HAL & SDK Drivers
#
# WCH HAL & SDK Drivers
@@ -888,9 +917,7 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
#
# NUVOTON Drivers
#
-# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set
-# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set
# end of NUVOTON Drivers
#
@@ -908,6 +935,12 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_HPM_SDK is not set
# end of HPMicro SDK
+#
+# FM33 Drivers
+#
+# CONFIG_PKG_USING_FM33LG0XX_FL_LIBRARY is not set
+# end of FM33 Drivers
+
#
# FT32 HAL & SDK Drivers
#
@@ -916,6 +949,23 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_FT32F4_STD_DRIVER is not set
# CONFIG_PKG_USING_FT32F4_CMSIS_DRIVER is not set
# end of FT32 HAL & SDK Drivers
+
+#
+# NOVOSNS Drivers
+#
+# CONFIG_PKG_USING_NOVOSNS_SERIES_DRIVER is not set
+# end of NOVOSNS Drivers
+
+#
+# N32 Drivers
+#
+# CONFIG_PKG_USING_N32H7XX_STD_DRIVER is not set
+# CONFIG_PKG_USING_N32H7XX_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_N32H49X_STD_DRIVER is not set
+# CONFIG_PKG_USING_N32H49X_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_N32H47X_48X_STD_DRIVER is not set
+# CONFIG_PKG_USING_N32H47X_48X_CMSIS_DRIVER is not set
+# end of N32 Drivers
# end of HAL & SDK Drivers
#
@@ -995,6 +1045,7 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_QMI8658 is not set
# CONFIG_PKG_USING_ICM20948 is not set
# CONFIG_PKG_USING_SCD4X is not set
+# CONFIG_PKG_USING_BMI270 is not set
# end of sensors drivers
#
@@ -1049,6 +1100,7 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_WK2124 is not set
# CONFIG_PKG_USING_LY68L6400 is not set
# CONFIG_PKG_USING_DM9051 is not set
+# CONFIG_PKG_USING_CH390 is not set
# CONFIG_PKG_USING_SSD1306 is not set
# CONFIG_PKG_USING_QKEY is not set
# CONFIG_PKG_USING_RS485 is not set
@@ -1096,8 +1148,10 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_ISOTP_C is not set
# CONFIG_PKG_USING_IKUNLED is not set
# CONFIG_PKG_USING_INS5T8025 is not set
+# CONFIG_PKG_USING_IRUART is not set
# CONFIG_PKG_USING_ST7305 is not set
# CONFIG_PKG_USING_TM1668 is not set
+# CONFIG_PKG_USING_TCA9548A is not set
# CONFIG_PKG_USING_SPI_TOOLS is not set
# end of peripheral libraries and drivers
@@ -1115,6 +1169,9 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_NAXOS is not set
# CONFIG_PKG_USING_R_TINYMAIX is not set
# CONFIG_PKG_USING_LLMCHAT is not set
+# CONFIG_PKG_USING_LIME_TM is not set
+# CONFIG_PKG_USING_AIFES is not set
+# CONFIG_PKG_USING_AGENT is not set
# end of AI packages
#
@@ -1174,6 +1231,8 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_MULTIBUTTON is not set
# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
# CONFIG_PKG_USING_CANFESTIVAL is not set
+# CONFIG_PKG_USING_CANOPENNODE is not set
+# CONFIG_PKG_USING_LELY is not set
# CONFIG_PKG_USING_ZLIB is not set
# CONFIG_PKG_USING_MINIZIP is not set
# CONFIG_PKG_USING_HEATSHRINK is not set
@@ -1199,6 +1258,8 @@ CONFIG_PKG_NXP_IMXRT_DRIVER_VER="latest"
# CONFIG_PKG_USING_QPARAM is not set
# CONFIG_PKG_USING_CorevMCU_CLI is not set
# CONFIG_PKG_USING_DRMP is not set
+# CONFIG_PKG_USING_AUTOGEN_PARAMETER_MANAGER is not set
+# CONFIG_PKG_USING_SIMULATED_SENSOR is not set
# end of miscellaneous packages
#
@@ -1495,7 +1556,9 @@ CONFIG_BSP_LPUART12_TX_DMA_CHANNEL=23
# Board extended module Drivers
#
# CONFIG_BSP_LINKER_SCRIPT_RAM is not set
+# CONFIG_BSP_LINKER_SCRIPT_RAM_INDUSTRY is not set
# CONFIG_BSP_LINKER_SCRIPT_HYPERRAM is not set
CONFIG_BSP_LINKER_SCRIPT_FLEXSPI_NOR=y
# CONFIG_BSP_LINKER_SCRIPT_FLEXSPI_NOR_HYPERRAM is not set
+# CONFIG_BSP_LINKER_SCRIPT_FLEXSPI_NOR_INDUSTRY is not set
# end of Hardware Drivers Config
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig
index cdf8842e5a06..f9127fada66b 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig
@@ -821,6 +821,17 @@ choice
help
Link the image to run entirely from internal SRAM.
+ config BSP_LINKER_SCRIPT_RAM_INDUSTRY
+ bool "RAM - Industrial Ethernet (512KB TCM + 512KB OCRAM1 + 96KB OCRAM2 + 32KB shared memory)"
+ help
+ Link the image to run from internal SRAM for industrial Ethernet
+ development. CM7 uses 256KB ITCM and 256KB DTCM, all accessible
+ OCRAM1 (496KB; the first 16KB is blocked by TRDC), and 96KB OCRAM2
+ exclusively. The last 32KB OCRAM2 is shared with CM33 and must
+ match the CM33 industry layout. The GCC linker script (.ld),
+ ARMCLANG scatter file (.scf) and IAR configuration file (.icf)
+ are provided.
+
config BSP_LINKER_SCRIPT_HYPERRAM
bool "HyperRAM (internal SRAM + external HyperRAM)"
help
@@ -837,6 +848,15 @@ choice
help
Link the image to XIP from external NOR flash and use HyperRAM
as additional RAM.
+
+ config BSP_LINKER_SCRIPT_FLEXSPI_NOR_INDUSTRY
+ bool "FlexSPI NOR Flash - Industrial Ethernet (XIP + 512KB OCRAM1 + 96KB OCRAM2 + 32KB shared memory)"
+ help
+ Link the image to XIP from external NOR flash for industrial
+ Ethernet development. CM7 uses the whole OCRAM1, 96KB OCRAM2
+ exclusively and shares 32KB OCRAM2 with CM33. The GCC linker
+ script (.ld), the ARMCLANG scatter file (.scf) and the IAR linker
+ configuration file (.icf) are provided.
endchoice
endmenu
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript
index f9fa157f1ada..ca6e0cb6ed06 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript
@@ -86,8 +86,11 @@ if GetDepend(['RT_USING_CHERRYUSB']):
if GetDepend(['BSP_LINKER_SCRIPT_FLEXSPI_NOR']):
CPPDEFINES += ['XIP_EXTERNAL_FLASH=1']
+if GetDepend(['BSP_LINKER_SCRIPT_FLEXSPI_NOR_INDUSTRY']):
+ CPPDEFINES += ['XIP_EXTERNAL_FLASH=1']
+
if GetDepend(['BSP_LINKER_SCRIPT_FLEXSPI_NOR_HYPERRAM']):
- CPPDEFINES += ['XIP_EXTERNAL_FLASH=1']
+ CPPDEFINES += ['XIP_EXTERNAL_FLASH=1']
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES, LINKFLAGS=LINKFLAGS)
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/board.c b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/board.c
index c7f63b79af6d..4595df1bc639 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/board.c
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/board.c
@@ -1256,8 +1256,8 @@ void PHY_Reset(void)
void rt_hw_board_init()
{
- BOARD_CommonSetting();
BOARD_ConfigMPU();
+ BOARD_CommonSetting();
BOARD_InitBootPins();
BOARD_BootClockRUN();
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.icf
index 9741eea988aa..0c079ab3bba2 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.icf
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.icf
@@ -1,153 +1,153 @@
-/*
-** ###################################################################
-** Processors: MIMXRT1189CVM8B_cm7
-** MIMXRT1189CVM8C_cm7
-** MIMXRT1189XVM8B_cm7
-** MIMXRT1189XVM8C_cm7
-**
-** Compiler: IAR ANSI C/C++ Compiler for ARM
-** Reference manual: IMXRT1180RM, Rev 5, 01/2024
-** Version: rev. 2.0, 2024-01-18
-** Build: b250310
-**
-** Abstract:
-** Linker file for the IAR ANSI C/C++ Compiler for ARM
-**
-** Copyright 2016 Freescale Semiconductor, Inc.
-** Copyright 2016-2025 NXP
-** SPDX-License-Identifier: BSD-3-Clause
-**
-** http: www.nxp.com
-** mail: support@nxp.com
-**
-** ###################################################################
-*/
-
-/* Board memory map */
-define symbol m_itcm_start = 0x00000000;
-define symbol m_itcm_size = 0x00040000;
-
-define symbol m_dtcm_start = 0x20000000;
-define symbol m_dtcm_size = 0x00040000;
-
-define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
-define symbol m_ocram1_size = 0x0007C000;
-
-define symbol m_ocram2_start = 0x20500000;
-define symbol m_ocram2_size = 0x00040000;
-
-define symbol m_sdram_start = 0x80000000;
-define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_hyperram_start = 0x04000000;
-define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_flash_start = 0x28800000;
-define symbol m_flash_size = 0x00800000;
-
-/* General definition */
-define symbol app_image_offset = 0x00000000;
-define symbol vector_table_size = 0x00000400;
-if (isdefinedsymbol(__stack_size__)) {
- define symbol __size_cstack__ = __stack_size__;
-} else {
- define symbol __size_cstack__ = 0x1000;
-}
-
-if (isdefinedsymbol(__heap_size__)) {
- define symbol __size_heap__ = __heap_size__;
-} else {
- define symbol __size_heap__ = 0x8000;
-}
-
-define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
-define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
-define symbol m_qadata_start = m_dtcm_start;
-define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
-define symbol m_ram_vector_table_start = m_itcm_start;
-
-/* Target specific definition, code & data allocation */
-define symbol m_code_size = m_flash_size - app_image_offset;
-define symbol m_data_size = m_dtcm_size;
-define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
-define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
-
-define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
-
-define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
-
-define symbol m_text_start = m_flash_start + app_image_offset;
-define symbol m_text_end = m_text_start + m_code_size - 1;
-define symbol m_interrupts_start = m_text_start;
-
-define symbol m_data_start = m_dtcm_start;
-define symbol m_data_end = m_data_start + m_data_size - 1;
-
-define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
-define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
-
-define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
-define symbol m_heap_end = m_ncache_start - 1;
-
-if (isdefinedsymbol(__use_shmem__)) {
- define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
- define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
-}
-
-/* Exported symbol definition */
-define exported symbol __VECTOR_TABLE = m_interrupts_start;
-define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
-define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
-define exported symbol __NCACHE_REGION_START = m_ncache_start;
-define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
-if (isdefinedsymbol(__use_shmem__)) {
- define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
- define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
- define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
- define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
-}
-
-/* Region definition */
-define memory mem with size = 4G;
-define region TEXT_region = mem:[from m_text_start to m_text_end];
-define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
-define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
-define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
-define region HEAP_region = mem:[from m_heap_start to m_heap_end];
-define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
-define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
-if (isdefinedsymbol(__use_shmem__)) {
- define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
-}
-
-/* Block definition */
-define block RW { readwrite };
-define block ZI { zi };
-define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
-define block QACCESS_CODE { section CodeQuickAccess };
-define block QACCESS_DATA { section DataQuickAccess };
-define block CSTACK with alignment = 8, size = __size_cstack__ { };
-define block HEAP with alignment = 8, size = __size_heap__ { };
-
-initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess,
- ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
-do not initialize { section .noinit };
-if (isdefinedsymbol(__use_shmem__)) {
- do not initialize { section rpmsg_sh_mem_section };
-}
-
-place at address mem: m_interrupts_start { readonly section .intvec };
-
-place in TEXT_region { readonly };
-place in QACODE_region { block QACCESS_CODE };
-place in DATA_region { block RW };
-place in DATA_region { block ZI };
-place in DATA_region { block QACCESS_DATA };
-place in NCACHE_region { block NCACHE_VAR };
-place in CSTACK_region { block CSTACK };
-if (isdefinedsymbol(__heap_noncacheable__)) {
- place in NCACHE_region { last block HEAP };
-} else {
- place in HEAP_region { last block HEAP };
-}
-if (isdefinedsymbol(__use_shmem__)) {
- place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
-}
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm7
+** MIMXRT1189CVM8C_cm7
+** MIMXRT1189XVM8B_cm7
+** MIMXRT1189XVM8C_cm7
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+define symbol m_itcm_start = 0x00000000;
+define symbol m_itcm_size = 0x00040000;
+
+define symbol m_dtcm_start = 0x20000000;
+define symbol m_dtcm_size = 0x00040000;
+
+define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+define symbol m_ocram1_size = 0x0007C000;
+
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+define symbol m_sdram_start = 0x80000000;
+define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_hyperram_start = 0x04000000;
+define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_flash_start = 0x28800000;
+define symbol m_flash_size = 0x00800000;
+
+/* General definition */
+define symbol app_image_offset = 0x00000000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x1000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x8000;
+}
+
+define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
+define symbol m_qadata_start = m_dtcm_start;
+define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+define symbol m_ram_vector_table_start = m_itcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_flash_size - app_image_offset;
+define symbol m_data_size = m_dtcm_size;
+define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
+define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
+
+define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
+
+define symbol m_text_start = m_flash_start + app_image_offset;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_dtcm_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+
+define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
+define symbol m_heap_end = m_ncache_start - 1;
+
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess,
+ ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+place at address mem: m_interrupts_start { readonly section .intvec };
+
+place in TEXT_region { readonly };
+place in QACODE_region { block QACCESS_CODE };
+place in DATA_region { block RW };
+place in DATA_region { block ZI };
+place in DATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.ld b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.ld
index e62c0c9bcf86..f4a103f7f334 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.ld
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor.ld
@@ -131,8 +131,8 @@ SECTIONS
.text :
{
. = ALIGN(4);
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text)
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text*)
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
@@ -252,6 +252,11 @@ SECTIONS
. = ALIGN(32);
__ram_function_start__ = .;
*(CodeQuickAccess)
+ /* The FlexSPI drivers must run from TCM while the flash is being
+ reconfigured, mirroring the Keil/IAR QuickAccess placement. */
+ *fsl_flexspi.o(.text*)
+ *drv_flexspi_nor_flash.o(.text*)
+ *drv_flexspi.o(.text*)
. = ALIGN(128);
__ram_function_end__ = .;
} > m_qacode
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.icf
index 6867ac591025..07dba1801bc1 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.icf
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.icf
@@ -1,157 +1,157 @@
-/*
-** ###################################################################
-** Processors: MIMXRT1189CVM8B_cm7
-** MIMXRT1189CVM8C_cm7
-** MIMXRT1189XVM8B_cm7
-** MIMXRT1189XVM8C_cm7
-**
-** Compiler: IAR ANSI C/C++ Compiler for ARM
-** Reference manual: IMXRT1180RM, Rev 5, 01/2024
-** Version: rev. 2.0, 2024-01-18
-** Build: b250310
-**
-** Abstract:
-** Linker file for the IAR ANSI C/C++ Compiler for ARM
-**
-** Copyright 2016 Freescale Semiconductor, Inc.
-** Copyright 2016-2025 NXP
-** SPDX-License-Identifier: BSD-3-Clause
-**
-** http: www.nxp.com
-** mail: support@nxp.com
-**
-** ###################################################################
-*/
-
-/* Board memory map */
-define symbol m_itcm_start = 0x00000000;
-define symbol m_itcm_size = 0x00040000;
-
-define symbol m_dtcm_start = 0x20000000;
-define symbol m_dtcm_size = 0x00040000;
-
-define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
-define symbol m_ocram1_size = 0x0007C000;
-
-define symbol m_ocram2_start = 0x20500000;
-define symbol m_ocram2_size = 0x00040000;
-
-define symbol m_sdram_start = 0x80000000;
-define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_hyperram_start = 0x04000000;
-define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_flash_start = 0x28800000;
-define symbol m_flash_size = 0x00800000;
-
-/* General definition */
-define symbol app_image_offset = 0x00000000;
-define symbol vector_table_size = 0x00000400;
-if (isdefinedsymbol(__stack_size__)) {
- define symbol __size_cstack__ = __stack_size__;
-} else {
- define symbol __size_cstack__ = 0x1000;
-}
-
-if (isdefinedsymbol(__heap_size__)) {
- define symbol __size_heap__ = __heap_size__;
-} else {
- define symbol __size_heap__ = 0x8000;
-}
-
-define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
-define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
-define symbol m_qadata_start = m_dtcm_start;
-define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
-define symbol m_ram_vector_table_start = m_itcm_start;
-
-/* Target specific definition, code & data allocation */
-define symbol m_code_size = m_flash_size - app_image_offset;
-define symbol m_data_size = 0x00600000;
-define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
-define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
-
-define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
-
-define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
-
-define symbol m_text_start = m_flash_start + app_image_offset;
-define symbol m_text_end = m_text_start + m_code_size - 1;
-define symbol m_interrupts_start = m_text_start;
-
-define symbol m_data_start = m_hyperram_start;
-define symbol m_data_end = m_data_start + m_data_size - 1;
-
-define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
-define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
-
-define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
-define symbol m_heap_end = m_ncache_start - 1;
-
-if (isdefinedsymbol(__use_shmem__)) {
- define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
- define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
-}
-
-/* Exported symbol definition */
-define exported symbol __VECTOR_TABLE = m_interrupts_start;
-define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
-define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
-define exported symbol __NCACHE_REGION_START = m_ncache_start;
-define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
-if (isdefinedsymbol(__use_shmem__)) {
- define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
- define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
- define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
- define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
-}
-
-/* Region definition */
-define memory mem with size = 4G;
-define region TEXT_region = mem:[from m_text_start to m_text_end];
-define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
-define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
-define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
-define region HEAP_region = mem:[from m_heap_start to m_heap_end];
-define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
-define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
-if (isdefinedsymbol(__use_shmem__)) {
- define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
-}
-
-/* Block definition */
-define block RW { readwrite };
-define block ZI { zi };
-define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
-define block QACCESS_CODE { section CodeQuickAccess };
-define block QACCESS_DATA { section DataQuickAccess };
-define block CSTACK with alignment = 8, size = __size_cstack__ { };
-define block HEAP with alignment = 8, size = __size_heap__ { };
-
-/* cache line size = 32 bytes */
-define block CACHE_LINE_DATA_ZI with alignment = 32, end alignment = 32 { section CacheLineData };
-define block CACHE_LINE_DATA_RW with alignment = 32, end alignment = 32 { section CacheLineData.init };
-
-initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess,
- ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
-do not initialize { section .noinit };
-if (isdefinedsymbol(__use_shmem__)) {
- do not initialize { section rpmsg_sh_mem_section };
-}
-
-place at address mem: m_interrupts_start { readonly section .intvec };
-
-place in TEXT_region { readonly };
-place in QACODE_region { block QACCESS_CODE };
-place in DATA_region { block RW, block CACHE_LINE_DATA_RW };
-place in DATA_region { block ZI, block CACHE_LINE_DATA_ZI };
-place in QADATA_region { block QACCESS_DATA };
-place in NCACHE_region { block NCACHE_VAR };
-place in CSTACK_region { block CSTACK };
-if (isdefinedsymbol(__heap_noncacheable__)) {
- place in NCACHE_region { last block HEAP };
-} else {
- place in HEAP_region { last block HEAP };
-}
-if (isdefinedsymbol(__use_shmem__)) {
- place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
-}
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm7
+** MIMXRT1189CVM8C_cm7
+** MIMXRT1189XVM8B_cm7
+** MIMXRT1189XVM8C_cm7
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+define symbol m_itcm_start = 0x00000000;
+define symbol m_itcm_size = 0x00040000;
+
+define symbol m_dtcm_start = 0x20000000;
+define symbol m_dtcm_size = 0x00040000;
+
+define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+define symbol m_ocram1_size = 0x0007C000;
+
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+define symbol m_sdram_start = 0x80000000;
+define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_hyperram_start = 0x04000000;
+define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_flash_start = 0x28800000;
+define symbol m_flash_size = 0x00800000;
+
+/* General definition */
+define symbol app_image_offset = 0x00000000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x1000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x8000;
+}
+
+define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
+define symbol m_qadata_start = m_dtcm_start;
+define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+define symbol m_ram_vector_table_start = m_itcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_flash_size - app_image_offset;
+define symbol m_data_size = 0x00600000;
+define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
+define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
+
+define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
+
+define symbol m_text_start = m_flash_start + app_image_offset;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_hyperram_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+
+define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
+define symbol m_heap_end = m_ncache_start - 1;
+
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+
+/* cache line size = 32 bytes */
+define block CACHE_LINE_DATA_ZI with alignment = 32, end alignment = 32 { section CacheLineData };
+define block CACHE_LINE_DATA_RW with alignment = 32, end alignment = 32 { section CacheLineData.init };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess,
+ ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+place at address mem: m_interrupts_start { readonly section .intvec };
+
+place in TEXT_region { readonly };
+place in QACODE_region { block QACCESS_CODE };
+place in DATA_region { block RW, block CACHE_LINE_DATA_RW };
+place in DATA_region { block ZI, block CACHE_LINE_DATA_ZI };
+place in QADATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.ld b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.ld
index c1a7b3648dd8..d19405bee9af 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.ld
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.ld
@@ -131,8 +131,8 @@ SECTIONS
.text :
{
. = ALIGN(4);
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text)
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text*)
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
@@ -253,6 +253,11 @@ SECTIONS
. = ALIGN(32);
__ram_function_start__ = .;
*(CodeQuickAccess)
+ /* The FlexSPI drivers must run from TCM while the flash is being
+ reconfigured, mirroring the Keil/IAR QuickAccess placement. */
+ *fsl_flexspi.o(.text*)
+ *drv_flexspi_nor_flash.o(.text*)
+ *drv_flexspi.o(.text*)
. = ALIGN(128);
__ram_function_end__ = .;
} > m_qacode
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.scf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.scf
index 5f77343005db..e1596416ace0 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.scf
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.scf
@@ -120,14 +120,14 @@ LR_m_text m_text_start m_text_size
ER_m_QuickAccessCode m_qacode_start m_qacode_size
{
.ANY (CodeQuickAccess)
+ fsl_flexspi.o (+RO-CODE)
+ drv_flexspi_nor_flash.o (+RO-CODE)
+ drv_flexspi.o (+RO-CODE)
}
ER_m_QuickAccessData m_qadata_start m_qadata_size
{
.ANY (DataQuickAccess)
- fsl_flexspi.o (+RO-CODE)
- drv_flexspi_nor_flash.o (+RO-CODE)
- drv_flexspi.o (+RO-CODE)
}
RW_m_data m_data_start m_data_size-stack_size
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.icf
new file mode 100644
index 000000000000..7890d3950bd9
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.icf
@@ -0,0 +1,179 @@
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm7
+** MIMXRT1189CVM8C_cm7
+** MIMXRT1189XVM8B_cm7
+** MIMXRT1189XVM8C_cm7
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+** Industrial Ethernet configuration:
+** - CM7 uses 512KB TCM (256KB ITCM + 256KB DTCM).
+** - CM7 uses the whole OCRAM1 (heap + 256KB non-cacheable data).
+** - CM7 uses 96KB OCRAM2 as extra RAM.
+** - 32KB OCRAM2 is reserved as RPMsg shared memory.
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+define symbol m_itcm_start = 0x00000000;
+define symbol m_itcm_size = 0x00040000;
+
+define symbol m_dtcm_start = 0x20000000;
+define symbol m_dtcm_size = 0x00040000;
+
+define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+define symbol m_ocram1_size = 0x0007C000;
+
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+define symbol m_sdram_start = 0x80000000;
+define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_hyperram_start = 0x04000000;
+define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_flash_start = 0x28800000;
+define symbol m_flash_size = 0x00800000;
+
+/* General definition */
+define symbol app_image_offset = 0x00000000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x1000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x10000;
+}
+
+define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
+define symbol m_qadata_start = m_dtcm_start;
+define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+define symbol m_ram_vector_table_start = m_itcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_flash_size - app_image_offset;
+define symbol m_data_size = m_dtcm_size;
+
+/* Industrial Ethernet configuration:
+ * CM7 uses the whole OCRAM1: 64KB heap (growable via __heap_size__ up to
+ * 240KB) and 256KB non-cacheable data.
+ * OCRAM2 layout (must match MIMXRT1189xxxxx_cm33_ram_industry.icf):
+ * [0x20500000, 0x2051FFFF] 128KB CM33 exclusive (heap + NCACHE)
+ * [0x20520000, 0x20537FFF] 96KB CM7 extra RAM (OCRAM2_DATA_region)
+ * [0x20538000, 0x2053FFFF] 32KB RPMsg shared memory
+ * NCACHE and shared memory sizes must be 2^N and the start addresses must be
+ * multiples of the size so that the MPU configuration in BOARD_ConfigMPU()
+ * stays valid.
+ */
+define symbol m_ncache_size = 0x40000; /* 256KB, must be 2^N */
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* 0x204C0000 */
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+
+define symbol m_heap_start = m_ocram1_start; /* 0x20484000 */
+define symbol m_heap_end = m_ncache_start - 1;
+
+define symbol m_ocram2_data_start = 0x20520000;
+define symbol m_ocram2_data_size = 0x18000; /* 96KB CM7 extra RAM */
+define symbol m_ocram2_data_end = m_ocram2_data_start + m_ocram2_data_size - 1;
+
+define symbol m_shmem_size = 0x8000; /* 32KB shared memory, must be 2^N */
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start + m_ocram2_size - m_shmem_size; /* 0x20538000 */
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0;
+
+define symbol m_text_start = m_flash_start + app_image_offset;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_dtcm_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+/* 96KB OCRAM2 reserved for CM7 extra RAM (e.g. EtherCAT buffers), cacheable.
+ * The region is kept empty and can be initialized as a memheap at runtime
+ * using __OCRAM2_DATA_START and __OCRAM2_DATA_SIZE. */
+define exported symbol __OCRAM2_DATA_START = m_ocram2_data_start;
+define exported symbol __OCRAM2_DATA_SIZE = m_ocram2_data_size;
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+define region OCRAM2_DATA_region = mem:[from m_ocram2_data_start to m_ocram2_data_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+define block OCRAM2_DATA with alignment = 8, size = m_ocram2_data_size { };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess, section CodeQuickAccess,
+ ro code object fsl_flexspi.o, ro code object drv_flexspi_nor_flash.o, ro code object drv_flexspi.o };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+place at address mem: m_interrupts_start { readonly section .intvec };
+
+place in TEXT_region { readonly };
+place in QACODE_region { block QACCESS_CODE };
+place in DATA_region { block RW };
+place in DATA_region { block ZI };
+place in DATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in OCRAM2_DATA_region { block OCRAM2_DATA };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.ld b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.ld
new file mode 100644
index 000000000000..32547be72331
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.ld
@@ -0,0 +1,371 @@
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm7
+** MIMXRT1189CVM8C_cm7
+** MIMXRT1189XVM8B_cm7
+** MIMXRT1189XVM8C_cm7
+**
+** Compiler: GNU C Compiler
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the GNU C Compiler
+** Industrial Ethernet configuration:
+** - CM7 uses 512KB TCM (256KB ITCM + 256KB DTCM).
+** - CM7 uses the whole OCRAM1 (heap + 256KB non-cacheable data).
+** - CM7 uses 96KB OCRAM2 as extra RAM.
+** - 32KB OCRAM2 is reserved as RPMsg shared memory.
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Board memory map */
+m_itcm_start = 0x00000000;
+m_itcm_size = 0x00040000;
+m_dtcm_start = 0x20000000;
+m_dtcm_size = 0x00040000;
+m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+m_ocram1_size = 0x0007C000;
+m_ocram2_start = 0x20500000;
+m_ocram2_size = 0x00040000;
+m_sdram_start = 0x80000000;
+m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+m_hyperram_start = 0x04000000;
+m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+m_flash_start = 0x28800000;
+m_flash_size = 0x00800000;
+
+/* General definition */
+app_image_offset = 0x00000000;
+vector_table_size = 0x00000400;
+m_qacode_start = m_itcm_start + (DEFINED(__ram_vector_table__) ? vector_table_size : 0);
+m_qacode_end = m_itcm_start + m_dtcm_size - 1;
+m_qadata_start = m_dtcm_start;
+m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+m_ram_vector_table_start = m_itcm_start;
+m_stack_size = DEFINED(__stack_size__) ? __stack_size__ : 0x1000;
+m_heap_size = DEFINED(__heap_size__) ? __heap_size__ : 0x10000;
+
+/* Target specific definition, code & data allocation */
+m_code_size = m_flash_size - app_image_offset - vector_table_size;
+m_data_size = m_dtcm_size;
+
+/* Industrial Ethernet configuration:
+ * CM7 uses the whole OCRAM1: 64KB heap (growable via __heap_size__ up to
+ * 240KB) and 256KB non-cacheable data.
+ * OCRAM2 layout (must match MIMXRT1189xxxxx_cm33_ram_industry.ld):
+ * [0x20500000, 0x2051FFFF] 128KB CM33 exclusive (heap + NCACHE)
+ * [0x20520000, 0x20537FFF] 96KB CM7 extra RAM (m_ocram2)
+ * [0x20538000, 0x2053FFFF] 32KB RPMsg shared memory
+ * NCACHE and shared memory sizes must be 2^N and the start addresses must be
+ * multiples of the size so that the MPU configuration in BOARD_ConfigMPU()
+ * stays valid.
+ */
+m_ncache_size = 0x40000; /* 256KB, must be 2^N */
+m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* 0x204C0000 */
+m_shmem_size = 0x8000; /* 32KB shared memory, must be 2^N */
+
+m_ram_vector_table_size = DEFINED(__ram_vector_table__) ? vector_table_size : 0;
+
+m_interrupts_start = m_flash_start + app_image_offset;
+m_interrupts_end = m_interrupts_start + vector_table_size - 1;
+
+m_text_start = m_interrupts_end + 1;
+m_text_end = m_text_start + m_code_size - 1;
+
+m_data_start = m_dtcm_start;
+m_data_end = m_data_start + m_data_size - 1;
+
+m_ncache_end = m_ncache_start + m_ncache_size - 1 - (DEFINED(__heap_noncacheable__) ? m_heap_size : 0);
+
+m_heap_start = DEFINED(__heap_noncacheable__) ? m_ncache_end + 1 : m_ocram1_start; /* 0x20484000 */
+m_heap_end = m_heap_start + m_heap_size - 1;
+
+/* 96KB OCRAM2 reserved for CM7 extra RAM (e.g. EtherCAT buffers), cacheable.
+ * The region is kept empty and can be initialized as a memheap at runtime
+ * using __OCRAM2_DATA_START and __OCRAM2_DATA_SIZE. */
+m_ocram2_data_start = 0x20520000;
+m_ocram2_data_size = 0x18000; /* 96KB */
+m_ocram2_data_end = m_ocram2_data_start + m_ocram2_data_size - 1;
+
+m_rpmsg_sh_mem_start = m_ocram2_start + m_ocram2_size - m_shmem_size; /* 0x20538000 */
+m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+
+/* Exported symbol definition */
+__VECTOR_TABLE = m_interrupts_start;
+__VECTOR_RAM = m_ram_vector_table_start;
+__RAM_VECTOR_TABLE_SIZE_BYTES = m_ram_vector_table_size;
+
+__NCACHE_REGION_START = m_ncache_start;
+__NCACHE_REGION_SIZE = m_ncache_size;
+__RPMSG_SH_MEM_START = DEFINED(__use_shmem__)? m_rpmsg_sh_mem_start : 0;
+__RPMSG_SH_MEM_SIZE = DEFINED(__use_shmem__)? m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1 : 0;
+__OCRAM2_DATA_START = m_ocram2_data_start;
+__OCRAM2_DATA_SIZE = m_ocram2_data_size;
+
+/* Specify the memory areas */
+MEMORY
+{
+ m_interrupts_ram (RX) : ORIGIN = m_ram_vector_table_start, LENGTH = __RAM_VECTOR_TABLE_SIZE_BYTES
+ m_interrupts (RX) : ORIGIN = m_interrupts_start, LENGTH = m_interrupts_end - m_interrupts_start + 1
+ m_text (RX) : ORIGIN = m_text_start, LENGTH = m_text_end - m_text_start + 1
+ m_data (RW) : ORIGIN = m_data_start, LENGTH = m_data_end - m_data_start + 1
+ m_ncache (RW) : ORIGIN = m_ncache_start, LENGTH = m_ncache_end - m_ncache_start + 1
+ m_heap (RW) : ORIGIN = m_heap_start, LENGTH = m_heap_end - m_heap_start + 1
+ m_qacode (RX) : ORIGIN = m_qacode_start, LENGTH = m_qacode_end - m_qacode_start + 1
+ m_qadata (RW) : ORIGIN = m_qadata_start, LENGTH = m_qadata_end - m_qadata_start + 1
+ m_ocram2 (RW) : ORIGIN = m_ocram2_data_start, LENGTH = m_ocram2_data_size
+ m_rpmsg (RW) : ORIGIN = m_rpmsg_sh_mem_start, LENGTH = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1
+}
+
+/* Define output sections */
+SECTIONS
+{
+ /* The startup code goes first */
+ .interrupts :
+ {
+ . = ALIGN(4);
+ __Vectors = .;
+ KEEP(*(.isr_vector)) /* Vector table and startup code */
+ . = ALIGN(4);
+ } > m_interrupts
+
+ .interrupts_ram :
+ {
+ . = ALIGN(4);
+ . += __RAM_VECTOR_TABLE_SIZE_BYTES;
+ . = ALIGN(4);
+ } > m_interrupts_ram
+
+ /* The program code */
+ .text :
+ {
+ . = ALIGN(4);
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text)
+ *(EXCLUDE_FILE(*fsl_flexspi.o *drv_flexspi_nor_flash.o *drv_flexspi.o) .text*)
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+ KEEP (*(.init))
+ KEEP (*(.fini))
+ . = ALIGN(4);
+
+ /* RT-Thread FinSH symbol table */
+ . = ALIGN(4);
+ __fsymtab_start = .;
+ KEEP(*(FSymTab))
+ __fsymtab_end = .;
+
+ /* RT-Thread init table */
+ . = ALIGN(4);
+ __vsymtab_start = .;
+ KEEP(*(VSymTab))
+ __vsymtab_end = .;
+
+ /* RT-Thread init functions */
+ . = ALIGN(4);
+ __rt_init_start = .;
+ KEEP(*(SORT(.rti_fn*)))
+ __rt_init_end = .;
+ } > m_text
+
+ .ARM.extab :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } > m_text
+
+ .ARM :
+ {
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ } > m_text
+
+ .ctors :
+ {
+ __CTOR_LIST__ = .;
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ __CTOR_END__ = .;
+ } > m_text
+
+ .dtors :
+ {
+ __DTOR_LIST__ = .;
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ __DTOR_END__ = .;
+ } > m_text
+
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } > m_text
+
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } > m_text
+
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } > m_text
+
+ __etext = .; /* define a global symbol at end of code */
+
+ __data_flash_start = .; /* Symbol is used by startup for data initialization */
+ .data : AT(__data_flash_start)
+ {
+ . = ALIGN(4);
+ __data_start__ = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+ *(DataQuickAccess) /* quick access data section */
+ KEEP(*(.jcr*))
+ . = ALIGN(4);
+ __data_end__ = .; /* define a global symbol at data end */
+ } > m_data
+
+ __ram_function_flash_start = __data_flash_start + (__data_end__ - __data_start__); /* Symbol is used by startup for TCM code initialization */
+ .ram_function : AT(__ram_function_flash_start)
+ {
+ . = ALIGN(32);
+ __ram_function_start__ = .;
+ *(CodeQuickAccess)
+ /* The FlexSPI drivers must run from TCM while the flash is being
+ reconfigured, mirroring the Keil/IAR QuickAccess placement. */
+ *fsl_flexspi.o(.text*)
+ *drv_flexspi_nor_flash.o(.text*)
+ *drv_flexspi.o(.text*)
+ . = ALIGN(128);
+ __ram_function_end__ = .;
+ } > m_qacode
+
+ __noncache_data_flash_start = __ram_function_flash_start + (__ram_function_end__ - __ram_function_start__);
+ .ncache.init : AT(__noncache_data_flash_start)
+ {
+ . = ALIGN(4);
+ __noncache_data_start__ = .; /* create a global symbol at ncache data start */
+ *(NonCacheable.init)
+ . = ALIGN(4);
+ __noncache_data_end__ = .; /* create a global symbol at ncache data end */
+ } > m_ncache
+
+ .ncache :
+ {
+ . = ALIGN(4);
+ __noncache_bss_start__ = .; /* define a global symbol at ncache bss start */
+ *(NonCacheable)
+ . = ALIGN(4);
+ __noncache_bss_end__ = .; /* define a global symbol at ncache bss end */
+ } > m_ncache
+
+ __qadata_flash_start = __noncache_data_flash_start + (__noncache_data_end__ - __noncache_data_start__);
+ .qadata : AT(__qadata_flash_start)
+ {
+ . = ALIGN(4);
+ __qadata_start__ = .;
+ . = ALIGN(4);
+ __qadata_end__ = .;
+ } > m_qadata
+
+ text_data_end = __qadata_flash_start + (__qadata_end__ - __qadata_start__);
+ text_end = ORIGIN(m_text) + LENGTH(m_text);
+ ASSERT(text_data_end < text_end, "region m_text overflowed with text and data")
+
+ /* Uninitialized data section */
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss section */
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > m_data
+
+ /* 96KB OCRAM2 reserved for CM7 extra RAM (e.g. EtherCAT buffers).
+ * Kept empty; initialize as a memheap at runtime. */
+ .ocram2 :
+ {
+ . = ALIGN(4);
+ __ocram2_data_start = .;
+ . += m_ocram2_data_size;
+ __ocram2_data_end = .;
+ . = ALIGN(4);
+ } > m_ocram2
+
+ .rpmsg :
+ {
+ *(.noinit.$rpmsg_sh_mem)
+ } > m_rpmsg
+
+ .heap :
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ end = .;
+ . += m_heap_size;
+ __HeapLimit = .; /* Add for _sbrk */
+ } > m_heap
+
+ .stack :
+ {
+ . = ALIGN(8);
+ __StackStart = .;
+ . += m_stack_size;
+ } > m_data
+
+ /* Initializes stack on the end of block */
+ __StackTop = ORIGIN(m_data) + LENGTH(m_data);
+ __StackLimit = __StackTop - m_stack_size;
+ PROVIDE(__stack = __StackTop);
+ PROVIDE (__stack_size = m_stack_size);
+ ASSERT(__StackLimit >= __StackStart, "region m_data overflowed with stack and heap")
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.scf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.scf
new file mode 100644
index 000000000000..606d6afa75df
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_flexspi_nor_industry.scf
@@ -0,0 +1,199 @@
+#!armclang --target=arm-arm-none-eabi -mcpu=cortex-m7 -E -x c
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm7
+** MIMXRT1189CVM8C_cm7
+** MIMXRT1189XVM8B_cm7
+** MIMXRT1189XVM8C_cm7
+**
+** Compiler: Keil ARM C/C++ Compiler
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the Keil ARM C/C++ Compiler
+** Industrial Ethernet configuration:
+** - CM7 uses 512KB TCM (256KB ITCM + 256KB DTCM).
+** - CM7 uses the whole OCRAM1 (heap + 256KB non-cacheable data).
+** - CM7 uses 96KB OCRAM2 as extra RAM.
+** - 32KB OCRAM2 is reserved as RPMsg shared memory.
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+
+/* Board memory map */
+
+#define m_itcm_start 0x00000000
+#define m_itcm_size 0x00040000
+
+#define m_dtcm_start 0x20000000
+#define m_dtcm_size 0x00040000
+
+#define m_ocram1_start 0x20484000 /* OCRAM1 first 16K access is blocked by TRDC */
+#define m_ocram1_size 0x0007C000
+
+#define m_ocram2_start 0x20500000
+#define m_ocram2_size 0x00040000
+
+#define m_sdram_start 0x80000000
+#define m_sdram_size 0x01E00000 /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+#define m_hyperram_start 0x04000000
+#define m_hyperram_size 0x00600000 /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+#define m_flash_start 0x28800000
+#define m_flash_size 0x00800000
+
+/* General definition */
+#define app_image_offset 0x00000000
+#define vector_table_size 0x400
+#define m_ram_vector_table_start m_itcm_start
+
+#if defined(__stack_size__)
+ #define stack_size __stack_size__
+#else
+ #define stack_size 0x01000
+#endif
+
+#if defined(__heap_size__)
+ #define heap_size __heap_size__
+#else
+ #define heap_size 0x10000
+#endif
+
+/* Target specific definition, code & data allocation */
+#if defined(__ram_vector_table__)
+#define m_ram_vector_table_size vector_table_size
+#else
+#define m_ram_vector_table_size 0
+#endif
+
+#define m_qacode_start m_itcm_start + m_ram_vector_table_size
+#define m_qadata_start m_dtcm_start
+#define m_qacode_size m_itcm_size - (m_qacode_start - m_itcm_start)
+#define m_qadata_size 0
+
+#define m_text_size m_flash_size - app_image_offset
+#define m_data_size m_dtcm_size
+
+/* Industrial Ethernet configuration:
+ * CM7 uses the whole OCRAM1: 64KB heap (growable via __heap_size__ up to
+ * 240KB) and 256KB non-cacheable data.
+ * OCRAM2 layout (must match MIMXRT1189xxxxx_cm33_ram_industry.scf):
+ * [0x20500000, 0x2051FFFF] 128KB CM33 exclusive (heap + NCACHE)
+ * [0x20520000, 0x20537FFF] 96KB CM7 extra RAM (RW_m_ocram2)
+ * [0x20538000, 0x2053FFFF] 32KB RPMsg shared memory
+ * NCACHE and shared memory sizes must be 2^N and the start addresses must be
+ * multiples of the size so that the MPU configuration in BOARD_ConfigMPU()
+ * stays valid.
+ */
+#define m_ncache_size 0x40000 /* 256KB, must be 2^N */
+#define m_ncache_start m_ocram1_start + m_ocram1_size - m_ncache_size /* 0x204C0000 */
+#define m_heap_start m_ocram1_start /* 0x20484000 */
+
+#define m_ocram2_data_start 0x20520000
+#define m_ocram2_data_size 0x18000 /* 96KB CM7 extra RAM */
+
+#define m_shmem_size 0x8000 /* 32KB shared memory, must be 2^N */
+#define m_shmem_start m_ocram2_start + m_ocram2_size - m_shmem_size /* 0x20538000 */
+
+#define m_text_start m_flash_start + app_image_offset
+#define m_interrupts_start m_text_start
+#define m_data_start m_dtcm_start
+
+; load region
+LR_m_text m_text_start m_text_size
+{
+ ; load address = execution address
+ VECTOR_ROM m_interrupts_start FIXED vector_table_size
+ {
+ * (.isr_vector,+FIRST)
+ }
+
+ VECTOR_RAM m_ram_vector_table_start EMPTY m_ram_vector_table_size
+ {
+ }
+
+ ; load address = execution address
+ ER_m_text m_text_start + vector_table_size FIXED m_text_size - vector_table_size
+ {
+ * (InRoot$$Sections)
+ .ANY (+RO)
+ }
+
+ ER_m_QuickAccessCode m_qacode_start m_qacode_size
+ {
+ .ANY (CodeQuickAccess)
+ fsl_flexspi.o (+RO-CODE)
+ drv_flexspi_nor_flash.o (+RO-CODE)
+ drv_flexspi.o (+RO-CODE)
+ }
+
+ ER_m_QuickAccessData m_qadata_start EMPTY m_qadata_size
+ {
+ }
+
+ RW_m_data m_data_start m_data_size-stack_size
+ {
+ .ANY (+RW +ZI)
+ .ANY (DataQuickAccess)
+ }
+
+ ; ncache data
+ RW_m_ncache m_ncache_start m_ncache_size
+ {
+ .ANY (NonCacheable.init)
+ .ANY (.bss.NonCacheable)
+ }
+
+#if defined(__heap_noncacheable__)
+ ; Heap region growing up
+ ARM_LIB_HEAP +0 ALIGN 0x100 EMPTY heap_size
+ {
+ }
+#endif
+
+ ; Empty region added for MPU configuration
+ RW_m_ncache_aux m_ncache_start + m_ncache_size EMPTY 0
+ {
+ }
+
+ ; 96KB OCRAM2 reserved for CM7 extra RAM (e.g. EtherCAT buffers).
+ ; The region is cacheable and can be initialized as a memheap at runtime
+ ; using Image$$RW_m_ocram2$$Base and Image$$RW_m_ocram2$$Limit.
+ RW_m_ocram2 m_ocram2_data_start EMPTY m_ocram2_data_size
+ {
+ }
+
+#if defined(__use_shmem__)
+ ; shared memory data
+ RPMSG_SH_MEM m_shmem_start m_shmem_size
+ {
+ .ANY (rpmsg_sh_mem_section)
+ }
+
+ ; Empty region added for MPU configuration
+ RPMSG_SH_MEM_aux m_shmem_start + m_shmem_size EMPTY 0
+ {
+ }
+#endif
+
+#if !defined(__heap_noncacheable__)
+ ; Heap region growing up
+ ARM_LIB_HEAP m_heap_start EMPTY heap_size
+ {
+ }
+#endif
+
+ ; Stack region growing down
+ ARM_LIB_STACK m_data_start+m_data_size EMPTY -stack_size
+ {
+ }
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_hyperram.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_hyperram.icf
index f5d3f6296550..639055565b54 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_hyperram.icf
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_hyperram.icf
@@ -1,156 +1,156 @@
-/*
-** ###################################################################
-** Processors: MIMXRT1189CVM8B_cm7
-** MIMXRT1189CVM8C_cm7
-** MIMXRT1189XVM8B_cm7
-** MIMXRT1189XVM8C_cm7
-**
-** Compiler: IAR ANSI C/C++ Compiler for ARM
-** Reference manual: IMXRT1180RM, Rev 5, 01/2024
-** Version: rev. 2.0, 2024-01-18
-** Build: b250310
-**
-** Abstract:
-** Linker file for the IAR ANSI C/C++ Compiler for ARM
-**
-** Copyright 2016 Freescale Semiconductor, Inc.
-** Copyright 2016-2025 NXP
-** SPDX-License-Identifier: BSD-3-Clause
-**
-** http: www.nxp.com
-** mail: support@nxp.com
-**
-** ###################################################################
-*/
-
-/* Board memory map */
-define symbol m_itcm_start = 0x00000000;
-define symbol m_itcm_size = 0x00040000;
-
-define symbol m_dtcm_start = 0x20000000;
-define symbol m_dtcm_size = 0x00040000;
-
-define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
-define symbol m_ocram1_size = 0x0007C000;
-
-define symbol m_ocram2_start = 0x20500000;
-define symbol m_ocram2_size = 0x00040000;
-
-define symbol m_sdram_start = 0x80000000;
-define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_hyperram_start = 0x04000000;
-define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_flash_start = 0x28000000;
-define symbol m_flash_size = 0x01000000;
-
-/* General definition */
-define symbol app_image_offset = 0x0000B000;
-define symbol vector_table_size = 0x00000400;
-if (isdefinedsymbol(__stack_size__)) {
- define symbol __size_cstack__ = __stack_size__;
-} else {
- define symbol __size_cstack__ = 0x8000;
-}
-
-if (isdefinedsymbol(__heap_size__)) {
- define symbol __size_heap__ = __heap_size__;
-} else {
- define symbol __size_heap__ = 0x4000;
-}
-
-define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
-define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
-define symbol m_qadata_start = m_dtcm_start;
-define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
-define symbol m_ram_vector_table_start = m_itcm_start;
-
-/* Target specific definition, code & data allocation */
-define symbol m_code_size = m_itcm_size;
-define symbol m_data_size = 0x00600000;
-define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
-define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
-
-define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
-
-define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? 0 : 0;
-
-define symbol m_text_start = m_itcm_start;
-define symbol m_text_end = m_text_start + m_code_size - 1;
-define symbol m_interrupts_start = m_text_start;
-
-define symbol m_data_start = m_hyperram_start;
-define symbol m_data_end = m_data_start + m_data_size - 1;
-
-define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
-define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
-
-define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
-define symbol m_heap_end = m_ncache_start - 1;
-
-if (isdefinedsymbol(__use_shmem__)) {
- define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
- define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
-}
-
-/* Exported symbol definition */
-define exported symbol __VECTOR_TABLE = m_interrupts_start;
-define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
-define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
-define exported symbol __NCACHE_REGION_START = m_ncache_start;
-define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
-if (isdefinedsymbol(__use_shmem__)) {
- define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
- define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
- define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
- define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
-}
-
-/* Region definition */
-define memory mem with size = 4G;
-define region TEXT_region = mem:[from m_text_start to m_text_end];
-define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
-define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
-define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
-define region HEAP_region = mem:[from m_heap_start to m_heap_end];
-define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
-define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
-if (isdefinedsymbol(__use_shmem__)) {
- define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
-}
-
-/* Block definition */
-define block RW { readwrite };
-define block ZI { zi };
-define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
-define block QACCESS_CODE { section CodeQuickAccess };
-define block QACCESS_DATA { section DataQuickAccess };
-define block CSTACK with alignment = 8, size = __size_cstack__ { };
-define block HEAP with alignment = 8, size = __size_heap__ { };
-
-/* cache line size = 32 bytes */
-define block CACHE_LINE_DATA_ZI with alignment = 32, end alignment = 32 { section CacheLineData };
-define block CACHE_LINE_DATA_RW with alignment = 32, end alignment = 32 { section CacheLineData.init };
-
-initialize by copy { readwrite, section .textrw, section DataQuickAccess };
-do not initialize { section .noinit };
-if (isdefinedsymbol(__use_shmem__)) {
- do not initialize { section rpmsg_sh_mem_section };
-}
-
-place at address mem: m_interrupts_start { readonly section .intvec };
-
-place in TEXT_region { readonly };
-place in TEXT_region { block QACCESS_CODE };
-place in DATA_region { block RW, block CACHE_LINE_DATA_RW };
-place in DATA_region { block ZI, block CACHE_LINE_DATA_ZI };
-place in QADATA_region { block QACCESS_DATA };
-place in NCACHE_region { block NCACHE_VAR };
-place in CSTACK_region { block CSTACK };
-if (isdefinedsymbol(__heap_noncacheable__)) {
- place in NCACHE_region { last block HEAP };
-} else {
- place in HEAP_region { last block HEAP };
-}
-if (isdefinedsymbol(__use_shmem__)) {
- place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
-}
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm7
+** MIMXRT1189CVM8C_cm7
+** MIMXRT1189XVM8B_cm7
+** MIMXRT1189XVM8C_cm7
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+define symbol m_itcm_start = 0x00000000;
+define symbol m_itcm_size = 0x00040000;
+
+define symbol m_dtcm_start = 0x20000000;
+define symbol m_dtcm_size = 0x00040000;
+
+define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+define symbol m_ocram1_size = 0x0007C000;
+
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+define symbol m_sdram_start = 0x80000000;
+define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_hyperram_start = 0x04000000;
+define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_flash_start = 0x28000000;
+define symbol m_flash_size = 0x01000000;
+
+/* General definition */
+define symbol app_image_offset = 0x0000B000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x1000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x8000;
+}
+
+define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
+define symbol m_qadata_start = m_dtcm_start;
+define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+define symbol m_ram_vector_table_start = m_itcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_itcm_size;
+define symbol m_data_size = 0x00600000;
+define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
+define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
+
+define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? 0 : 0;
+
+define symbol m_text_start = m_itcm_start;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_hyperram_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+
+define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
+define symbol m_heap_end = m_ncache_start - 1;
+
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+
+/* cache line size = 32 bytes */
+define block CACHE_LINE_DATA_ZI with alignment = 32, end alignment = 32 { section CacheLineData };
+define block CACHE_LINE_DATA_RW with alignment = 32, end alignment = 32 { section CacheLineData.init };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+place at address mem: m_interrupts_start { readonly section .intvec };
+
+place in TEXT_region { readonly };
+place in TEXT_region { block QACCESS_CODE };
+place in DATA_region { block RW, block CACHE_LINE_DATA_RW };
+place in DATA_region { block ZI, block CACHE_LINE_DATA_ZI };
+place in QADATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram.icf
index 232bebba5ef0..b272ef7be1df 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram.icf
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram.icf
@@ -1,152 +1,152 @@
-/*
-** ###################################################################
-** Processors: MIMXRT1189CVM8B_cm7
-** MIMXRT1189CVM8C_cm7
-** MIMXRT1189XVM8B_cm7
-** MIMXRT1189XVM8C_cm7
-**
-** Compiler: IAR ANSI C/C++ Compiler for ARM
-** Reference manual: IMXRT1180RM, Rev 5, 01/2024
-** Version: rev. 2.0, 2024-01-18
-** Build: b250310
-**
-** Abstract:
-** Linker file for the IAR ANSI C/C++ Compiler for ARM
-**
-** Copyright 2016 Freescale Semiconductor, Inc.
-** Copyright 2016-2025 NXP
-** SPDX-License-Identifier: BSD-3-Clause
-**
-** http: www.nxp.com
-** mail: support@nxp.com
-**
-** ###################################################################
-*/
-
-/* Board memory map */
-define symbol m_itcm_start = 0x00000000;
-define symbol m_itcm_size = 0x00040000;
-
-define symbol m_dtcm_start = 0x20000000;
-define symbol m_dtcm_size = 0x00040000;
-
-define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
-define symbol m_ocram1_size = 0x0007C000;
-
-define symbol m_ocram2_start = 0x20500000;
-define symbol m_ocram2_size = 0x00040000;
-
-define symbol m_sdram_start = 0x80000000;
-define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_hyperram_start = 0x04000000;
-define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
-define symbol m_flash_start = 0x28000000;
-define symbol m_flash_size = 0x01000000;
-
-/* General definition */
-define symbol app_image_offset = 0x0000B000;
-define symbol vector_table_size = 0x00000400;
-if (isdefinedsymbol(__stack_size__)) {
- define symbol __size_cstack__ = __stack_size__;
-} else {
- define symbol __size_cstack__ = 0x1000;
-}
-
-if (isdefinedsymbol(__heap_size__)) {
- define symbol __size_heap__ = __heap_size__;
-} else {
- define symbol __size_heap__ = 0x8000;
-}
-
-define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
-define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
-define symbol m_qadata_start = m_dtcm_start;
-define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
-define symbol m_ram_vector_table_start = m_itcm_start;
-
-/* Target specific definition, code & data allocation */
-define symbol m_code_size = m_itcm_size;
-define symbol m_data_size = m_dtcm_size;
-define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
-define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
-
-define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
-
-define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? 0 : 0;
-
-define symbol m_text_start = m_itcm_start;
-define symbol m_text_end = m_text_start + m_code_size - 1;
-define symbol m_interrupts_start = m_text_start;
-
-define symbol m_data_start = m_dtcm_start;
-define symbol m_data_end = m_data_start + m_data_size - 1;
-
-define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
-define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
-
-define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
-define symbol m_heap_end = m_ncache_start - 1;
-
-if (isdefinedsymbol(__use_shmem__)) {
- define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
- define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
-}
-
-/* Exported symbol definition */
-define exported symbol __VECTOR_TABLE = m_interrupts_start;
-define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
-define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
-define exported symbol __NCACHE_REGION_START = m_ncache_start;
-define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
-if (isdefinedsymbol(__use_shmem__)) {
- define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
- define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
- define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
- define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
-}
-
-/* Region definition */
-define memory mem with size = 4G;
-define region TEXT_region = mem:[from m_text_start to m_text_end];
-define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
-define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
-define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
-define region HEAP_region = mem:[from m_heap_start to m_heap_end];
-define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
-define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
-if (isdefinedsymbol(__use_shmem__)) {
- define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
-}
-
-/* Block definition */
-define block RW { readwrite };
-define block ZI { zi };
-define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
-define block QACCESS_CODE { section CodeQuickAccess };
-define block QACCESS_DATA { section DataQuickAccess };
-define block CSTACK with alignment = 8, size = __size_cstack__ { };
-define block HEAP with alignment = 8, size = __size_heap__ { };
-
-initialize by copy { readwrite, section .textrw, section DataQuickAccess };
-do not initialize { section .noinit };
-if (isdefinedsymbol(__use_shmem__)) {
- do not initialize { section rpmsg_sh_mem_section };
-}
-
-place at address mem: m_interrupts_start { readonly section .intvec };
-
-place in TEXT_region { readonly };
-place in TEXT_region { block QACCESS_CODE };
-place in DATA_region { block RW };
-place in DATA_region { block ZI };
-place in DATA_region { block QACCESS_DATA };
-place in NCACHE_region { block NCACHE_VAR };
-place in CSTACK_region { block CSTACK };
-if (isdefinedsymbol(__heap_noncacheable__)) {
- place in NCACHE_region { last block HEAP };
-} else {
- place in HEAP_region { last block HEAP };
-}
-if (isdefinedsymbol(__use_shmem__)) {
- place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
-}
+/*
+** ###################################################################
+** Processors: MIMXRT1189CVM8B_cm7
+** MIMXRT1189CVM8C_cm7
+** MIMXRT1189XVM8B_cm7
+** MIMXRT1189XVM8C_cm7
+**
+** Compiler: IAR ANSI C/C++ Compiler for ARM
+** Reference manual: IMXRT1180RM, Rev 5, 01/2024
+** Version: rev. 2.0, 2024-01-18
+** Build: b250310
+**
+** Abstract:
+** Linker file for the IAR ANSI C/C++ Compiler for ARM
+**
+** Copyright 2016 Freescale Semiconductor, Inc.
+** Copyright 2016-2025 NXP
+** SPDX-License-Identifier: BSD-3-Clause
+**
+** http: www.nxp.com
+** mail: support@nxp.com
+**
+** ###################################################################
+*/
+
+/* Board memory map */
+define symbol m_itcm_start = 0x00000000;
+define symbol m_itcm_size = 0x00040000;
+
+define symbol m_dtcm_start = 0x20000000;
+define symbol m_dtcm_size = 0x00040000;
+
+define symbol m_ocram1_start = 0x20484000; /* OCRAM1 first 16K access is blocked by TRDC */
+define symbol m_ocram1_size = 0x0007C000;
+
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+
+define symbol m_sdram_start = 0x80000000;
+define symbol m_sdram_size = 0x01E00000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_hyperram_start = 0x04000000;
+define symbol m_hyperram_size = 0x00600000; /* Reserved 2M for CM33 usage, so size = physical memory size - 2M */
+define symbol m_flash_start = 0x28000000;
+define symbol m_flash_size = 0x01000000;
+
+/* General definition */
+define symbol app_image_offset = 0x0000B000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x1000;
+}
+
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x8000;
+}
+
+define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
+define symbol m_qadata_start = m_dtcm_start;
+define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+define symbol m_ram_vector_table_start = m_itcm_start;
+
+/* Target specific definition, code & data allocation */
+define symbol m_code_size = m_itcm_size;
+define symbol m_data_size = m_dtcm_size;
+define symbol m_ncache_size = isdefinedsymbol(__multicore__) ? 0x20000 : 0x40000; /* m_ncache_size must be 2^N */
+define symbol m_shmem_size = m_ocram2_size; /* m_shmem_size must be 2^N */
+
+define symbol m_ocram1_size_for_cm7 = isdefinedsymbol(__multicore__) ? 0x40000 : m_ocram1_size;
+
+define symbol m_ram_vector_table_size = isdefinedsymbol(__ram_vector_table__) ? 0 : 0;
+
+define symbol m_text_start = m_itcm_start;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+
+define symbol m_data_start = m_dtcm_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size; /* (m_ncache_start % m_ncache_size) must be 0 */
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+
+define symbol m_heap_start = m_ocram1_start + m_ocram1_size - m_ocram1_size_for_cm7;
+define symbol m_heap_end = m_ncache_start - 1;
+
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start; /* (m_rpmsg_sh_mem_start % m_shmem_size) must be 0 */
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+/* Exported symbol definition */
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_rpmsg_sh_mem_end - m_rpmsg_sh_mem_start + 1;
+}
+
+/* Region definition */
+define memory mem with size = 4G;
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+/* Block definition */
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+place at address mem: m_interrupts_start { readonly section .intvec };
+
+place in TEXT_region { readonly };
+place in TEXT_region { block QACCESS_CODE };
+place in DATA_region { block RW };
+place in DATA_region { block ZI };
+place in DATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.icf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.icf
new file mode 100644
index 000000000000..f4270e45a9fd
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.icf
@@ -0,0 +1,115 @@
+define symbol m_itcm_start = 0x00000000;
+define symbol m_itcm_size = 0x00040000;
+define symbol m_dtcm_start = 0x20000000;
+define symbol m_dtcm_size = 0x00040000;
+define symbol m_ocram1_start = 0x20484000;
+define symbol m_ocram1_size = 0x0007C000;
+define symbol m_ocram2_start = 0x20500000;
+define symbol m_ocram2_size = 0x00040000;
+define symbol m_sdram_start = 0x80000000;
+define symbol m_sdram_size = 0x01E00000;
+define symbol m_hyperram_start = 0x04000000;
+define symbol m_hyperram_size = 0x00600000;
+define symbol m_flash_start = 0x28000000;
+define symbol m_flash_size = 0x01000000;
+
+define symbol app_image_offset = 0x0000B000;
+define symbol vector_table_size = 0x00000400;
+if (isdefinedsymbol(__stack_size__)) {
+ define symbol __size_cstack__ = __stack_size__;
+} else {
+ define symbol __size_cstack__ = 0x1000;
+}
+if (isdefinedsymbol(__heap_size__)) {
+ define symbol __size_heap__ = __heap_size__;
+} else {
+ define symbol __size_heap__ = 0x10000;
+}
+
+define symbol m_qacode_start = m_itcm_start + (isdefinedsymbol(__ram_vector_table__) ? vector_table_size : 0);
+define symbol m_qacode_end = m_itcm_start + m_itcm_size - 1;
+define symbol m_qadata_start = m_dtcm_start;
+define symbol m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+define symbol m_ram_vector_table_start = m_itcm_start;
+define symbol m_ram_vector_table_size = 0;
+define symbol m_code_size = m_itcm_size;
+define symbol m_data_size = m_dtcm_size;
+define symbol m_text_start = m_itcm_start;
+define symbol m_text_end = m_text_start + m_code_size - 1;
+define symbol m_interrupts_start = m_text_start;
+define symbol m_data_start = m_dtcm_start;
+define symbol m_data_end = m_data_start + m_data_size - 1;
+
+define symbol m_ncache_size = 0x40000;
+define symbol m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size;
+define symbol m_ncache_end = m_ncache_start + m_ncache_size - 1;
+define symbol m_heap_start = m_ocram1_start;
+define symbol m_heap_end = m_ncache_start - 1;
+define symbol m_ocram2_data_start = 0x20520000;
+define symbol m_ocram2_data_size = 0x18000;
+define symbol m_ocram2_data_end = m_ocram2_data_start + m_ocram2_data_size - 1;
+define symbol m_shmem_size = 0x8000;
+if (isdefinedsymbol(__use_shmem__)) {
+ define symbol m_rpmsg_sh_mem_start = m_ocram2_start + m_ocram2_size - m_shmem_size;
+ define symbol m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+}
+
+define exported symbol __VECTOR_TABLE = m_interrupts_start;
+define exported symbol __VECTOR_RAM = m_ram_vector_table_start;
+define exported symbol __RAM_VECTOR_TABLE_SIZE = m_ram_vector_table_size;
+define exported symbol __NCACHE_REGION_START = m_ncache_start;
+define exported symbol __NCACHE_REGION_SIZE = m_ncache_size;
+define exported symbol __OCRAM2_DATA_START = m_ocram2_data_start;
+define exported symbol __OCRAM2_DATA_SIZE = m_ocram2_data_size;
+if (isdefinedsymbol(__use_shmem__)) {
+ define exported symbol rpmsg_sh_mem_start = m_rpmsg_sh_mem_start;
+ define exported symbol rpmsg_sh_mem_end = m_rpmsg_sh_mem_end;
+ define exported symbol __RPMSG_SH_MEM_START = m_rpmsg_sh_mem_start;
+ define exported symbol __RPMSG_SH_MEM_SIZE = m_shmem_size;
+}
+
+define memory mem with size = 4G;
+define region TEXT_region = mem:[from m_text_start to m_text_end];
+define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__];
+define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end];
+define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
+define region HEAP_region = mem:[from m_heap_start to m_heap_end];
+define region QACODE_region = mem:[from m_qacode_start to m_qacode_end];
+define region QADATA_region = mem:[from m_qadata_start to m_qadata_end];
+define region OCRAM2_DATA_region = mem:[from m_ocram2_data_start to m_ocram2_data_end];
+if (isdefinedsymbol(__use_shmem__)) {
+ define region rpmsg_sh_mem_region = mem:[from m_rpmsg_sh_mem_start to m_rpmsg_sh_mem_end];
+}
+
+define block RW { readwrite };
+define block ZI { zi };
+define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
+define block QACCESS_CODE { section CodeQuickAccess };
+define block QACCESS_DATA { section DataQuickAccess };
+define block CSTACK with alignment = 8, size = __size_cstack__ { };
+define block HEAP with alignment = 8, size = __size_heap__ { };
+define block OCRAM2_DATA with alignment = 8, size = m_ocram2_data_size { };
+
+initialize by copy { readwrite, section .textrw, section DataQuickAccess };
+do not initialize { section .noinit };
+if (isdefinedsymbol(__use_shmem__)) {
+ do not initialize { section rpmsg_sh_mem_section };
+}
+
+place at address mem: m_interrupts_start { readonly section .intvec };
+place in TEXT_region { readonly };
+place in TEXT_region { block QACCESS_CODE };
+place in DATA_region { block RW };
+place in DATA_region { block ZI };
+place in DATA_region { block QACCESS_DATA };
+place in NCACHE_region { block NCACHE_VAR };
+place in OCRAM2_DATA_region { block OCRAM2_DATA };
+place in CSTACK_region { block CSTACK };
+if (isdefinedsymbol(__heap_noncacheable__)) {
+ place in NCACHE_region { last block HEAP };
+} else {
+ place in HEAP_region { last block HEAP };
+}
+if (isdefinedsymbol(__use_shmem__)) {
+ place in rpmsg_sh_mem_region { section rpmsg_sh_mem_section };
+}
\ No newline at end of file
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.ld b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.ld
new file mode 100644
index 000000000000..37688e407fb8
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.ld
@@ -0,0 +1,259 @@
+ENTRY(Reset_Handler)
+
+__use_shmem__ = 1;
+__multicore__ = 1;
+
+m_itcm_start = 0x00000000;
+m_itcm_size = 0x00040000;
+m_dtcm_start = 0x20000000;
+m_dtcm_size = 0x00040000;
+m_ocram1_start = 0x20484000;
+m_ocram1_size = 0x0007C000;
+m_ocram2_start = 0x20500000;
+m_ocram2_size = 0x00040000;
+m_sdram_start = 0x80000000;
+m_sdram_size = 0x01E00000;
+m_hyperram_start = 0x04000000;
+m_hyperram_size = 0x00600000;
+m_flash_start = 0x28000000;
+m_flash_size = 0x01000000;
+
+app_image_offset = 0x0000B000;
+vector_table_size = 0x00000400;
+m_qacode_start = m_itcm_start + (DEFINED(__ram_vector_table__) ? vector_table_size : 0);
+m_qacode_end = m_itcm_start + m_itcm_size - 1;
+m_qadata_start = m_dtcm_start;
+m_qadata_end = m_dtcm_start + m_dtcm_size - 1;
+m_ram_vector_table_start = m_itcm_start;
+m_stack_size = DEFINED(__stack_size__) ? __stack_size__ : 0x1000;
+m_heap_size = DEFINED(__heap_size__) ? __heap_size__ : 0x10000;
+m_code_size = m_itcm_size - vector_table_size;
+m_data_size = m_dtcm_size;
+m_ncache_size = 0x40000;
+m_shmem_size = 0x8000;
+m_ram_vector_table_size = 0;
+m_interrupts_start = m_itcm_start;
+m_interrupts_end = m_interrupts_start + vector_table_size - 1;
+m_text_start = m_interrupts_end + 1;
+m_text_end = m_text_start + m_code_size - 1;
+m_data_start = m_dtcm_start;
+m_data_end = m_data_start + m_data_size - 1;
+m_ncache_start = m_ocram1_start + m_ocram1_size - m_ncache_size;
+m_ncache_end = m_ncache_start + m_ncache_size - 1 - (DEFINED(__heap_noncacheable__) ? m_heap_size : 0);
+m_heap_start = DEFINED(__heap_noncacheable__) ? m_ncache_end + 1 : m_ocram1_start;
+m_heap_end = m_heap_start + m_heap_size - 1;
+m_ocram2_data_start = 0x20520000;
+m_ocram2_data_size = 0x18000;
+m_ocram2_data_end = m_ocram2_data_start + m_ocram2_data_size - 1;
+m_rpmsg_sh_mem_start = m_ocram2_start + m_ocram2_size - m_shmem_size;
+m_rpmsg_sh_mem_end = m_rpmsg_sh_mem_start + m_shmem_size - 1;
+
+__VECTOR_TABLE = m_interrupts_start;
+__VECTOR_RAM = m_ram_vector_table_start;
+__RAM_VECTOR_TABLE_SIZE_BYTES = m_ram_vector_table_size;
+__NCACHE_REGION_START = m_ncache_start;
+__NCACHE_REGION_SIZE = m_ncache_size;
+__OCRAM2_DATA_START = m_ocram2_data_start;
+__OCRAM2_DATA_SIZE = m_ocram2_data_size;
+__RPMSG_SH_MEM_START = DEFINED(__use_shmem__) ? m_rpmsg_sh_mem_start : 0;
+__RPMSG_SH_MEM_SIZE = DEFINED(__use_shmem__) ? m_shmem_size : 0;
+
+ASSERT(m_heap_size > 0, "heap size must be positive")
+ASSERT(m_heap_end < (DEFINED(__heap_noncacheable__) ? m_ncache_start + m_ncache_size : m_ncache_start), "heap exceeds OCRAM1 allocation")
+
+MEMORY
+{
+ m_interrupts_ram (RX) : ORIGIN = m_ram_vector_table_start, LENGTH = __RAM_VECTOR_TABLE_SIZE_BYTES
+ m_interrupts (RX) : ORIGIN = m_interrupts_start, LENGTH = vector_table_size
+ m_text (RX) : ORIGIN = m_text_start, LENGTH = m_code_size
+ m_data (RW) : ORIGIN = m_data_start, LENGTH = m_data_size
+ m_ncache (RW) : ORIGIN = m_ncache_start, LENGTH = m_ncache_end - m_ncache_start + 1
+ m_heap (RW) : ORIGIN = m_heap_start, LENGTH = m_heap_size
+ m_qacode (RX) : ORIGIN = m_qacode_start, LENGTH = m_qacode_end - m_qacode_start + 1
+ m_qadata (RW) : ORIGIN = m_qadata_start, LENGTH = m_qadata_end - m_qadata_start + 1
+ m_ocram2_data (RW) : ORIGIN = m_ocram2_data_start, LENGTH = m_ocram2_data_size
+ m_rpmsg (RW) : ORIGIN = m_rpmsg_sh_mem_start, LENGTH = m_shmem_size
+}
+
+SECTIONS
+{
+ .interrupts :
+ {
+ . = ALIGN(4);
+ __Vectors = .;
+ KEEP(*(.isr_vector))
+ . = ALIGN(4);
+ } > m_interrupts
+
+ .interrupts_ram :
+ {
+ . = ALIGN(4);
+ . += __RAM_VECTOR_TABLE_SIZE_BYTES;
+ . = ALIGN(4);
+ } > m_interrupts_ram
+
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text)
+ *(.text*)
+ *(.rodata)
+ *(.rodata*)
+ *(.glue_7)
+ *(.glue_7t)
+ *(.eh_frame)
+ *(CodeQuickAccess)
+ KEEP(*(.init))
+ KEEP(*(.fini))
+ . = ALIGN(4);
+ __fsymtab_start = .;
+ KEEP(*(FSymTab))
+ __fsymtab_end = .;
+ . = ALIGN(4);
+ __vsymtab_start = .;
+ KEEP(*(VSymTab))
+ __vsymtab_end = .;
+ . = ALIGN(4);
+ __rt_init_start = .;
+ KEEP(*(SORT(.rti_fn*)))
+ __rt_init_end = .;
+ } > m_text
+
+ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > m_text
+ .ARM :
+ {
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ } > m_text
+ .ctors :
+ {
+ __CTOR_LIST__ = .;
+ KEEP(*crtbegin.o(.ctors))
+ KEEP(*crtbegin?.o(.ctors))
+ KEEP(*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
+ KEEP(*(SORT(.ctors.*)))
+ KEEP(*(.ctors))
+ __CTOR_END__ = .;
+ } > m_text
+ .dtors :
+ {
+ __DTOR_LIST__ = .;
+ KEEP(*crtbegin.o(.dtors))
+ KEEP(*crtbegin?.o(.dtors))
+ KEEP(*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
+ KEEP(*(SORT(.dtors.*)))
+ KEEP(*(.dtors))
+ __DTOR_END__ = .;
+ } > m_text
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN(__preinit_array_start = .);
+ KEEP(*(.preinit_array*))
+ PROVIDE_HIDDEN(__preinit_array_end = .);
+ } > m_text
+ .init_array :
+ {
+ PROVIDE_HIDDEN(__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array*))
+ PROVIDE_HIDDEN(__init_array_end = .);
+ } > m_text
+ .fini_array :
+ {
+ PROVIDE_HIDDEN(__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array*))
+ PROVIDE_HIDDEN(__fini_array_end = .);
+ } > m_text
+
+ __etext = .;
+ __data_flash_start = .;
+ .data : AT(__data_flash_start)
+ {
+ . = ALIGN(4);
+ __data_start__ = .;
+ *(.data)
+ *(.data*)
+ *(DataQuickAccess)
+ KEEP(*(.jcr*))
+ . = ALIGN(4);
+ __data_end__ = .;
+ } > m_data
+
+ __ram_function_flash_start = __data_flash_start + (__data_end__ - __data_start__);
+ .ram_function : AT(__ram_function_flash_start)
+ {
+ . = ALIGN(32);
+ __ram_function_start__ = .;
+ . = ALIGN(128);
+ __ram_function_end__ = .;
+ } > m_qacode
+
+ __noncache_data_flash_start = __ram_function_flash_start + (__ram_function_end__ - __ram_function_start__);
+ .ncache.init : AT(__noncache_data_flash_start)
+ {
+ . = ALIGN(4);
+ __noncache_data_start__ = .;
+ *(NonCacheable.init)
+ . = ALIGN(4);
+ __noncache_data_end__ = .;
+ } > m_ncache
+ .ncache :
+ {
+ . = ALIGN(4);
+ __noncache_bss_start__ = .;
+ *(NonCacheable)
+ . = ALIGN(4);
+ __noncache_bss_end__ = .;
+ } > m_ncache
+
+ __qadata_flash_start = __noncache_data_flash_start + (__noncache_data_end__ - __noncache_data_start__);
+ .qadata : AT(__qadata_flash_start)
+ {
+ . = ALIGN(4);
+ __qadata_start__ = .;
+ . = ALIGN(4);
+ __qadata_end__ = .;
+ } > m_qadata
+ text_data_end = __qadata_flash_start + (__qadata_end__ - __qadata_start__);
+ text_end = ORIGIN(m_text) + LENGTH(m_text);
+ ASSERT(text_data_end < text_end, "region m_text overflowed with text and data")
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > m_data
+ .ocram2_data (NOLOAD) :
+ {
+ . = ALIGN(8);
+ . += m_ocram2_data_size;
+ } > m_ocram2_data
+ .rpmsg : { *(.noinit.$rpmsg_sh_mem) } > m_rpmsg
+ .heap :
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ end = .;
+ . += m_heap_size;
+ __HeapLimit = .;
+ } > m_heap
+ .stack :
+ {
+ . = ALIGN(8);
+ __StackStart = .;
+ . += m_stack_size;
+ } > m_data
+ __StackTop = ORIGIN(m_data) + LENGTH(m_data);
+ __StackLimit = __StackTop - m_stack_size;
+ PROVIDE(__stack = __StackTop);
+ PROVIDE(__stack_size = m_stack_size);
+ ASSERT(__StackLimit >= __StackStart, "region m_data overflowed with stack and heap")
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
\ No newline at end of file
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.scf b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.scf
new file mode 100644
index 000000000000..210817ff1564
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/MIMXRT1189xxxxx_cm7_ram_industry.scf
@@ -0,0 +1,117 @@
+#!armclang --target=arm-arm-none-eabi -mcpu=cortex-m7 -E -x c
+
+#define m_itcm_start 0x00000000
+#define m_itcm_size 0x00040000
+#define m_dtcm_start 0x20000000
+#define m_dtcm_size 0x00040000
+#define m_ocram1_start 0x20484000
+#define m_ocram1_size 0x0007C000
+#define m_ocram2_start 0x20500000
+#define m_ocram2_size 0x00040000
+#define m_sdram_start 0x80000000
+#define m_sdram_size 0x01E00000
+#define m_hyperram_start 0x04000000
+#define m_hyperram_size 0x00600000
+#define m_flash_start 0x28000000
+#define m_flash_size 0x01000000
+#define app_image_offset 0x0000B000
+#define vector_table_size 0x400
+#define m_ram_vector_table_start m_itcm_start
+
+#if defined(__stack_size__)
+#define stack_size __stack_size__
+#else
+#define stack_size 0x1000
+#endif
+#if defined(__heap_size__)
+#define heap_size __heap_size__
+#else
+#define heap_size 0x10000
+#endif
+
+#define m_ram_vector_table_size 0
+#define m_qacode_start m_itcm_start + m_ram_vector_table_size
+#define m_qadata_start m_dtcm_start
+#define m_qacode_size 0
+#define m_qadata_size 0
+#define m_text_size m_itcm_size
+#define m_data_size m_dtcm_size
+#define m_text_start m_itcm_start
+#define m_interrupts_start m_text_start
+#define m_data_start m_dtcm_start
+#define m_ncache_size 0x40000
+#define m_ncache_start m_ocram1_start + m_ocram1_size - m_ncache_size
+#define m_heap_start m_ocram1_start
+#define m_ocram2_data_start 0x20520000
+#define m_ocram2_data_size 0x18000
+#define m_shmem_size 0x8000
+#define m_shmem_start m_ocram2_start + m_ocram2_size - m_shmem_size
+
+#if !defined(__heap_noncacheable__) && (heap_size > (m_ncache_start - m_heap_start))
+#error Heap exceeds the cacheable OCRAM1 region
+#endif
+#if defined(__heap_noncacheable__) && (heap_size > m_ncache_size)
+#error Heap exceeds the non-cacheable OCRAM1 region
+#endif
+
+LR_m_text m_text_start m_text_size
+{
+ VECTOR_ROM m_interrupts_start FIXED vector_table_size
+ {
+ * (.isr_vector,+FIRST)
+ }
+ VECTOR_RAM m_ram_vector_table_start EMPTY m_ram_vector_table_size
+ {
+ }
+ ER_m_text m_text_start + vector_table_size FIXED m_text_size - vector_table_size
+ {
+ * (InRoot$$Sections)
+ .ANY (+RO)
+ .ANY (CodeQuickAccess)
+ }
+ ER_m_QuickAccessCode m_qacode_start EMPTY m_qacode_size
+ {
+ }
+ ER_m_QuickAccessData m_qadata_start EMPTY m_qadata_size
+ {
+ }
+ RW_m_data m_data_start m_data_size-stack_size
+ {
+ .ANY (+RW +ZI)
+ .ANY (DataQuickAccess)
+ }
+ RW_m_ncache m_ncache_start m_ncache_size
+ {
+ .ANY (NonCacheable.init)
+ .ANY (.bss.NonCacheable)
+ }
+#if defined(__heap_noncacheable__)
+ ARM_LIB_HEAP +0 ALIGN 0x100 EMPTY heap_size
+ {
+ }
+ ScatterAssert(ImageLimit(ARM_LIB_HEAP) <= (m_ncache_start + m_ncache_size))
+#endif
+ RW_m_ncache_aux m_ncache_start + m_ncache_size EMPTY 0
+ {
+ }
+ OCRAM2_DATA m_ocram2_data_start EMPTY m_ocram2_data_size
+ {
+ }
+#if defined(__use_shmem__)
+ RPMSG_SH_MEM m_shmem_start m_shmem_size
+ {
+ .ANY (rpmsg_sh_mem_section)
+ }
+ RPMSG_SH_MEM_aux m_shmem_start + m_shmem_size EMPTY 0
+ {
+ }
+#endif
+#if !defined(__heap_noncacheable__)
+ ARM_LIB_HEAP m_heap_start EMPTY heap_size
+ {
+ }
+#endif
+ ARM_LIB_STACK m_data_start+m_data_size EMPTY -stack_size
+ {
+ }
+}
\ No newline at end of file
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/readme.md b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/readme.md
new file mode 100644
index 000000000000..9badc9e155c1
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/readme.md
@@ -0,0 +1,79 @@
+# CM7 Memory Layout
+
+[English version](readme_en.md)
+
+本目录提供六种 CM7 内存布局,每种都有 GCC `.ld`、Keil `.scf` 和 IAR `.icf` 文件。
+下表地址为 CM7 视角,结束地址包含在区域内;KB/MB 按 1024/1048576 字节计算,容量不代表实际占用。
+
+## 1. 当前内存布局
+
+| 内存 | 起始地址 | 结束地址 | 容量 | 用途 |
+| --- | --- | --- | --- | --- |
+| ITCM | `0x00000000` | `0x0003FFFF` | 256KB | RAM 类 target 的向量和代码;XIP 类 target 的快速代码 |
+| DTCM | `0x20000000` | `0x2003FFFF` | 256KB | 普通数据和主栈,或快速数据 |
+| OCRAM1 | `0x20484000` | `0x204FFFFF` | 496KB | Heap 和 non-cacheable 缓冲区;避开 TRDC 禁止访问的前 16KB |
+| OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB | 双核共享内存,工业布局另划分独占区域 |
+| HyperRAM | `0x04000000` | `0x045FFFFF` | 6MB | HyperRAM 类 target 的普通数据和主栈;另预留 2MB 给 CM33 |
+| FlexSPI NOR | `0x28800000` | `0x28FFFFFF` | 8MB | XIP 类 target 的向量、代码及数据初值 |
+
+RAM 类向量占 ITCM 首部 1KB,代码从 `0x00000400` 开始;其初始化数据副本也占用 ITCM 镜像空间。
+XIP 类向量占 Flash 首部 1KB,普通代码从 `0x28800400` 开始。
+HyperRAM 类的快速数据仍在 DTCM,Heap 仍在 OCRAM1。当前六种布局的主要内容均不放入 SDRAM。
+
+### 普通 OCRAM 布局
+
+适用于 `RAM`、`HYPERRAM`、`FLEXSPI_NOR`、`FLEXSPI_NOR_HYPERRAM`。
+以下按双核配置(定义 `__multicore__`)且使用 cacheable Heap 说明,共享区需启用 `__use_shmem__`。
+
+| 区域 | 起始地址 | 结束地址 | 容量 |
+| --- | --- | --- | --- |
+| OCRAM1 低地址部分,未分配给本 CM7 布局 | `0x20484000` | `0x204BFFFF` | 240KB |
+| CM7 Heap 可用窗口 | `0x204C0000` | `0x204DFFFF` | 128KB |
+| CM7 non-cacheable 缓冲区 | `0x204E0000` | `0x204FFFFF` | 128KB |
+| 双核共享 OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB |
+
+未定义 `__multicore__` 时,Heap 窗口改为 OCRAM1 低地址 240KB,non-cacheable 窗口改为高地址 256KB。
+
+### 工业以太网 OCRAM 布局
+
+适用于 `RAM_INDUSTRY`、`FLEXSPI_NOR_INDUSTRY`,以下按 cacheable Heap 说明。
+
+| 区域 | 起始地址 | 结束地址 | 容量 |
+| --- | --- | --- | --- |
+| CM7 Heap 可用窗口 | `0x20484000` | `0x204BFFFF` | 240KB |
+| CM7 non-cacheable 缓冲区 | `0x204C0000` | `0x204FFFFF` | 256KB |
+| CM33 独占 OCRAM2 | `0x20500000` | `0x2051FFFF` | 128KB |
+| CM7 独占额外 OCRAM2 | `0x20520000` | `0x20537FFF` | 96KB |
+| 双核共享 OCRAM2 | `0x20538000` | `0x2053FFFF` | 32KB |
+
+工业布局将更多 OCRAM1 留给 CM7,并把 OCRAM2 分成 CM33 128KB、CM7 96KB、共享 32KB。
+双核必须使用匹配的分区;额外 96KB 不会自动加入系统 Heap。
+
+## 2. 各 Target 的差异
+
+| Target 类型 | 向量/普通代码 | 普通数据/主栈 | OCRAM 布局 | 默认 Heap | 默认主栈 |
+| --- | --- | --- | --- | --- | --- |
+| `RAM` | ITCM | DTCM | 普通 | 32KB | 4KB |
+| `RAM_INDUSTRY` | ITCM | DTCM | 工业 | 64KB | 4KB |
+| `HYPERRAM` | ITCM | HyperRAM | 普通 | 32KB | 4KB |
+| `FLEXSPI_NOR` | Flash XIP | DTCM | 普通 | 32KB | 4KB |
+| `FLEXSPI_NOR_HYPERRAM` | Flash XIP | HyperRAM | 普通 | 32KB | 4KB |
+| `FLEXSPI_NOR_INDUSTRY` | Flash XIP | DTCM | 工业 | 64KB | 4KB |
+
+GCC、Keil、IAR 的默认 Heap/主栈容量已一致,但具体 Heap 放置地址可能不同。
+Heap 窗口容量不等于默认分配大小,主栈也不是各 RT-Thread 线程的独立栈。
+以上为默认值;工程可覆盖堆栈大小或将 Heap 改为 non-cacheable。
+
+## 3. 应用范围
+
+| Target 类型 | 适用场景 |
+| --- | --- |
+| `RAM` | 内部 RAM 调试、小型实时应用,不依赖外部 RAM |
+| `RAM_INDUSTRY` | 内部 RAM 运行的工业以太网/EtherCAT 双核开发,需要更大的内部缓冲区 |
+| `HYPERRAM` | 代码在 ITCM 运行,数据量较大的采集、图像处理或大缓冲区应用 |
+| `FLEXSPI_NOR` | 常规 Flash XIP 应用,代码较大但普通数据可放入内部 DTCM |
+| `FLEXSPI_NOR_HYPERRAM` | 同时需要较大代码空间和数据空间的图形、通信或数据处理应用 |
+| `FLEXSPI_NOR_INDUSTRY` | Flash XIP 的工业以太网/EtherCAT 双核应用,需要 CM7 独占 OCRAM2 和更多 non-cacheable 缓冲区 |
+
+RAM 类镜像需要调试器或启动流程装载;HyperRAM 必须在数据和主栈使用前可访问。
+共享通信需启用共享区,工业双核分区需与 CM33 一致。链接布局只决定存放位置,不代替外设和通信初始化。
\ No newline at end of file
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/readme_en.md b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/readme_en.md
new file mode 100644
index 000000000000..fb00b04997ee
--- /dev/null
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/linker_scripts/readme_en.md
@@ -0,0 +1,79 @@
+# CM7 Memory Layout
+
+[Chinese version](readme.md)
+
+This directory provides six CM7 memory layouts, each with GCC `.ld`, Keil `.scf`, and IAR `.icf` files.
+Addresses are from the CM7 perspective and table end addresses are inclusive. KB/MB mean 1024/1048576 bytes; capacities are not actual usage.
+
+## 1. Current Memory Layout
+
+| Memory | Start | End | Capacity | Purpose |
+| --- | --- | --- | --- | --- |
+| ITCM | `0x00000000` | `0x0003FFFF` | 256KB | Vectors and code for RAM targets; quick-access code for XIP targets |
+| DTCM | `0x20000000` | `0x2003FFFF` | 256KB | Ordinary data and main stack, or quick-access data |
+| OCRAM1 | `0x20484000` | `0x204FFFFF` | 496KB | Heap and non-cacheable buffers; excludes the first 16KB blocked by TRDC |
+| OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB | Multicore shared memory; industry layouts also reserve exclusive areas |
+| HyperRAM | `0x04000000` | `0x045FFFFF` | 6MB | Ordinary data and main stack for HyperRAM targets; another 2MB is reserved for CM33 |
+| FlexSPI NOR | `0x28800000` | `0x28FFFFFF` | 8MB | Vectors, code, and data initial values for XIP targets |
+
+RAM targets reserve the first 1KB of ITCM for vectors, with code starting at `0x00000400`. Initialization copies also consume ITCM image space.
+XIP targets reserve the first 1KB of Flash for vectors, with ordinary code starting at `0x28800400`.
+HyperRAM targets keep quick-access data in DTCM and the heap in OCRAM1. None of these six layouts places its main contents in SDRAM.
+
+### Standard OCRAM Layout
+
+Applies to `RAM`, `HYPERRAM`, `FLEXSPI_NOR`, and `FLEXSPI_NOR_HYPERRAM`.
+The table assumes multicore configuration (`__multicore__` defined) and a cacheable heap. Shared memory requires `__use_shmem__` to be enabled.
+
+| Region | Start | End | Capacity |
+| --- | --- | --- | --- |
+| Lower OCRAM1, not assigned to this CM7 layout | `0x20484000` | `0x204BFFFF` | 240KB |
+| CM7 available heap window | `0x204C0000` | `0x204DFFFF` | 128KB |
+| CM7 non-cacheable buffers | `0x204E0000` | `0x204FFFFF` | 128KB |
+| Multicore shared OCRAM2 | `0x20500000` | `0x2053FFFF` | 256KB |
+
+Without `__multicore__`, the heap window moves to the lower 240KB of OCRAM1, and the non-cacheable window becomes the upper 256KB.
+
+### Industrial Ethernet OCRAM Layout
+
+Applies to `RAM_INDUSTRY` and `FLEXSPI_NOR_INDUSTRY`. The table assumes a cacheable heap.
+
+| Region | Start | End | Capacity |
+| --- | --- | --- | --- |
+| CM7 available heap window | `0x20484000` | `0x204BFFFF` | 240KB |
+| CM7 non-cacheable buffers | `0x204C0000` | `0x204FFFFF` | 256KB |
+| CM33-exclusive OCRAM2 | `0x20500000` | `0x2051FFFF` | 128KB |
+| CM7-exclusive additional OCRAM2 | `0x20520000` | `0x20537FFF` | 96KB |
+| Multicore shared OCRAM2 | `0x20538000` | `0x2053FFFF` | 32KB |
+
+Industry layouts assign more OCRAM1 to CM7 and split OCRAM2 into 128KB for CM33, 96KB for CM7, and 32KB shared.
+Both cores must use matching partitions. The additional 96KB is not automatically added to the system heap.
+
+## 2. Target Differences
+
+| Target type | Vectors/ordinary code | Ordinary data/main stack | OCRAM layout | Default heap | Default main stack |
+| --- | --- | --- | --- | --- | --- |
+| `RAM` | ITCM | DTCM | Standard | 32KB | 4KB |
+| `RAM_INDUSTRY` | ITCM | DTCM | Industry | 64KB | 4KB |
+| `HYPERRAM` | ITCM | HyperRAM | Standard | 32KB | 4KB |
+| `FLEXSPI_NOR` | Flash XIP | DTCM | Standard | 32KB | 4KB |
+| `FLEXSPI_NOR_HYPERRAM` | Flash XIP | HyperRAM | Standard | 32KB | 4KB |
+| `FLEXSPI_NOR_INDUSTRY` | Flash XIP | DTCM | Industry | 64KB | 4KB |
+
+GCC, Keil, and IAR now use the same default heap/main-stack capacities, although actual heap placement can differ.
+Heap window capacity is not the default allocated heap size, and the main stack is not each RT-Thread thread's individual stack.
+These are defaults; projects can override sizes or select a non-cacheable heap.
+
+## 3. Application Scope
+
+| Target type | Suitable applications |
+| --- | --- |
+| `RAM` | Internal-RAM debugging and small real-time applications without external RAM |
+| `RAM_INDUSTRY` | Internal-RAM industrial Ethernet/EtherCAT multicore development requiring larger internal buffers |
+| `HYPERRAM` | ITCM code execution with data-intensive acquisition, image processing, or large buffers |
+| `FLEXSPI_NOR` | Conventional Flash XIP applications with larger code and ordinary data that fits in internal DTCM |
+| `FLEXSPI_NOR_HYPERRAM` | Graphics, communications, or data-processing applications needing both larger code and data spaces |
+| `FLEXSPI_NOR_INDUSTRY` | Flash XIP industrial Ethernet/EtherCAT multicore applications requiring CM7-exclusive OCRAM2 and more non-cacheable buffers |
+
+RAM images require loading by a debugger or boot flow. HyperRAM must be accessible before ordinary data and the main stack are used.
+Shared communication requires shared memory to be enabled, and industry partitions must match CM33. Memory layouts determine placement, not peripheral or communication initialization.
\ No newline at end of file
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.h b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.h
index fe014c45134b..2855d6f9ac8d 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.h
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.h
@@ -106,7 +106,7 @@
#define RT_CONSOLEBUF_SIZE 128
#define RT_CONSOLE_DEVICE_NAME "uart12"
#define RT_USING_CONSOLE_OUTPUT_CTL
-#define RT_VER_NUM 0x50300
+#define RT_VER_NUM 0x50400
#define RT_BACKTRACE_LEVEL_MAX_NR 32
/* end of RT-Thread Kernel */
#define RT_USING_CACHE
@@ -256,6 +256,9 @@
/* LVGL: powerful and easy-to-use embedded GUI library */
+
+/* GD32EmbeddedUI demos require LVGL v8.3.11 */
+
/* end of LVGL: powerful and easy-to-use embedded GUI library */
/* u8g2: a monochrome graphic library */
@@ -302,6 +305,10 @@
/* end of Kendryte SDK */
+/* MM32 HAL & SDK Drivers */
+
+/* end of MM32 HAL & SDK Drivers */
+
/* WCH HAL & SDK Drivers */
/* end of WCH HAL & SDK Drivers */
@@ -332,9 +339,21 @@
/* end of HPMicro SDK */
+/* FM33 Drivers */
+
+/* end of FM33 Drivers */
+
/* FT32 HAL & SDK Drivers */
/* end of FT32 HAL & SDK Drivers */
+
+/* NOVOSNS Drivers */
+
+/* end of NOVOSNS Drivers */
+
+/* N32 Drivers */
+
+/* end of N32 Drivers */
/* end of HAL & SDK Drivers */
/* sensors drivers */
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.py b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.py
index 5cd0142118f8..efab680241ab 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.py
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/rtconfig.py
@@ -29,11 +29,11 @@
if os.getenv('RTT_EXEC_PATH'):
EXEC_PATH = os.getenv('RTT_EXEC_PATH')
-BUILD = 'debug'
-# BUILD = 'release'
+# BUILD = 'debug'
+BUILD = 'release'
# Read linker script selection from rtconfig.h (set by Kconfig BSP_LINKER_SCRIPT_* choice).
-# Supported types: RAM, HYPERRAM, FLEXSPI_NOR, FLEXSPI_NOR_HYPERRAM
+# Supported types: RAM, RAM_INDUSTRY, HYPERRAM, FLEXSPI_NOR, FLEXSPI_NOR_HYPERRAM, FLEXSPI_NOR_INDUSTRY
# Default to RAM when no match is found.
_LINKER_SCRIPT_TYPE = 'RAM'
_rtconfig_h = os.path.join(os.path.dirname(__file__), 'rtconfig.h')
@@ -47,12 +47,18 @@
if _s.startswith('#define BSP_LINKER_SCRIPT_FLEXSPI_NOR_HYPERRAM'):
_LINKER_SCRIPT_TYPE = 'FLEXSPI_NOR_HYPERRAM'
break
+ if _s.startswith('#define BSP_LINKER_SCRIPT_FLEXSPI_NOR_INDUSTRY'):
+ _LINKER_SCRIPT_TYPE = 'FLEXSPI_NOR_INDUSTRY'
+ break
if _s.startswith('#define BSP_LINKER_SCRIPT_FLEXSPI_NOR'):
_LINKER_SCRIPT_TYPE = 'FLEXSPI_NOR'
break
if _s.startswith('#define BSP_LINKER_SCRIPT_HYPERRAM'):
_LINKER_SCRIPT_TYPE = 'HYPERRAM'
break
+ if _s.startswith('#define BSP_LINKER_SCRIPT_RAM_INDUSTRY'):
+ _LINKER_SCRIPT_TYPE = 'RAM_INDUSTRY'
+ break
if _s.startswith('#define BSP_LINKER_SCRIPT_RAM'):
_LINKER_SCRIPT_TYPE = 'RAM'
break
@@ -60,9 +66,11 @@
# Base filename (without extension) for the selected linker script.
_LINKER_SCRIPT_BASE = {
'RAM': 'MIMXRT1189xxxxx_cm7_ram',
+ 'RAM_INDUSTRY': 'MIMXRT1189xxxxx_cm7_ram_industry',
'HYPERRAM': 'MIMXRT1189xxxxx_cm7_hyperram',
'FLEXSPI_NOR': 'MIMXRT1189xxxxx_cm7_flexspi_nor',
'FLEXSPI_NOR_HYPERRAM': 'MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram',
+ 'FLEXSPI_NOR_INDUSTRY': 'MIMXRT1189xxxxx_cm7_flexspi_nor_industry',
}[_LINKER_SCRIPT_TYPE]
@@ -245,9 +253,11 @@
# Map from linker script type to the matching Keil target name.
_LINKER_SCRIPT_TO_KEIL_TARGET = {
'RAM': 'rtthread_ram',
+ 'RAM_INDUSTRY': 'rtthread_ram_industry',
'HYPERRAM': 'rtthread_hyperram',
'FLEXSPI_NOR': 'rtthread_flexspi_nor',
'FLEXSPI_NOR_HYPERRAM': 'rtthread_flexspi_nor_hyperram',
+ 'FLEXSPI_NOR_INDUSTRY': 'rtthread_flexspi_nor_industry',
}
def update_keil_active_target(uvoptx_path='project.uvoptx'):
@@ -262,6 +272,10 @@ def update_keil_active_target(uvoptx_path='project.uvoptx'):
tree = etree.parse(uvoptx_path)
root = tree.getroot()
+ if not any(tgt.findtext('TargetName') == active for tgt in tree.findall('Target')):
+ print('Keil target not found: ' + active + '; active target unchanged')
+ return
+
for tgt in tree.findall('Target'):
tname = tgt.find('TargetName')
is_current = tgt.find('TargetOption/OPTFL/IsCurrentTarget')
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewd b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewd
index 820c6102c6e8..672e0eca0066 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewd
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewd
@@ -4920,6 +4920,1645 @@
0
+
+ rtthread_flexspi_nor_industry
+
+ ARM
+
+ 1
+
+ C-SPY
+ 2
+
+ 33
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ARMSIM_ID
+ 2
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ CADI_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+ CMSISDAP_ID
+ 2
+
+ 4
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ E2_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+ GDBSERVER_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+ GPLINK_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ IJET_ID
+ 2
+
+ 10
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JLINK_ID
+ 2
+
+ 16
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LMIFTDI_ID
+ 2
+
+ 3
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+ NULINK_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ PEMICRO_ID
+ 2
+
+ 3
+ 1
+ 1
+
+
+
+
+
+
+
+ STLINK_ID
+ 2
+
+ 8
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THIRDPARTY_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+ TIFET_ID
+ 2
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XDS100_ID
+ 2
+
+ 9
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Azure\AzureArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin
+ 0
+
+
rtthread_flexspi_nor_hyperram
@@ -6561,4 +8200,1644 @@
+
+ rtthread_ram_industry
+
+ ARM
+
+ 1
+
+ C-SPY
+ 2
+
+ 33
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ARMSIM_ID
+ 2
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ CADI_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+ CMSISDAP_ID
+ 2
+
+ 4
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ E2_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+ GDBSERVER_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+ GPLINK_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ IJET_ID
+ 2
+
+ 10
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JLINK_ID
+ 2
+
+ 16
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LMIFTDI_ID
+ 2
+
+ 3
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+ NULINK_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ PEMICRO_ID
+ 2
+
+ 3
+ 1
+ 1
+
+
+
+
+
+
+
+ STLINK_ID
+ 2
+
+ 8
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THIRDPARTY_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+ TIFET_ID
+ 2
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XDS100_ID
+ 2
+
+ 9
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Azure\AzureArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin
+ 0
+
+
+
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewp b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewp
index 4227328af4f0..82c3076f547b 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewp
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.ewp
@@ -3297,6 +3297,1104 @@
2
+
+ rtthread_flexspi_nor_industry
+
+ ARM
+
+ 1
+
+ General
+ 3
+
+ 37
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCARM
+ 2
+
+ 39
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AARM
+ 2
+
+ 12
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OBJCOPY
+ 0
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ CUSTOM
+ 4
+
+
+
+ inputOutputBased
+
+
+
+ ILINK
+ 0
+
+ 28
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IARCHIVE
+ 0
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ BUILDACTION
+ 2
+
+
rtthread_flexspi_nor_hyperram
@@ -4402,4 +5500,1103 @@
true
+
+ rtthread_ram_industry
+
+ ARM
+
+ 1
+
+ General
+ 3
+
+ 37
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCARM
+ 2
+
+ 39
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AARM
+ 2
+
+ 12
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OBJCOPY
+ 0
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ CUSTOM
+ 4
+
+
+
+ inputOutputBased
+
+
+
+ ILINK
+ 0
+
+ 28
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IARCHIVE
+ 0
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ BUILDACTION
+ 2
+
+
+
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvoptx b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvoptx
index 55a3a16d0e3b..92b530b01294 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvoptx
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvoptx
@@ -75,7 +75,7 @@
0
0
- 1
+ 0
8
@@ -516,6 +516,171 @@
+
+ rtthread_flexspi_nor_industry
+ 0x4
+ ARM-ADS
+
+ 12000000
+
+ 1
+ 1
+ 0
+ 1
+ 0
+
+
+ 1
+ 65535
+ 0
+ 0
+ 0
+
+
+ 79
+ 66
+ 8
+ .\build\keil\List\
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+
+ 8
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 4
+
+
+
+
+
+
+
+
+
+ .\evkmimxrt1180_flexspi_nor_cm7.ini
+ Segger\JL2CM3.dll
+
+
+
+ 0
+ JL2CM3
+ -U603001820 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD30500000 -FC8000 -FN1 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLMIMXRT1180 CM7 FLEXSPI -FS028000000 -FL01000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM)
+
+
+ 0
+ UL2CM3
+ UL2CM3(-S0 -C0 -P0 ) -FN2 -FC20000 -FD20000000 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33 -FF1MIMXRT1180_EVK_FSPI1_QSPI_CM7 -FL01000000 -FL11000000 -FS028000000 -FS128000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM) -FP1($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM)
+
+
+ 0
+ CMSIS_AGDI
+ UL2CM3(-S0 -C0 -P0 ) -FN2 -FC20000 -FD20000000 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33 -FF1MIMXRT1180_EVK_FSPI1_QSPI_CM7 -FL01000000 -FL11000000 -FS028000000 -FS128000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM) -FP1($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM)
+
+
+
+
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+ 1
+ 0
+ 2
+ 10000000
+
+
+
+
rtthread_flexspi_nor_hyperram
0x4
@@ -681,4 +846,169 @@
+
+ rtthread_ram_industry
+ 0x4
+ ARM-ADS
+
+ 12000000
+
+ 1
+ 1
+ 0
+ 1
+ 0
+
+
+ 1
+ 65535
+ 0
+ 0
+ 0
+
+
+ 79
+ 66
+ 8
+ .\build\keil\ram_industry\List\
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 0
+ 0
+ 1
+
+ 8
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 4
+
+
+
+
+
+
+
+
+
+ .\evkmimxrt1180_ram_cm7.ini
+ Segger\JL2CM3.dll
+
+
+
+ 0
+ JL2CM3
+ -U603001820 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD30500000 -FC8000 -FN1 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLMIMXRT1180 CM7 FLEXSPI -FS028000000 -FL01000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM)
+
+
+ 0
+ UL2CM3
+ UL2CM3(-S0 -C0 -P0 ) -FN2 -FC20000 -FD20000000 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33 -FF1MIMXRT1180_EVK_FSPI1_QSPI_CM7 -FL01000000 -FL11000000 -FS028000000 -FS128000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM) -FP1($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM)
+
+
+ 0
+ CMSIS_AGDI
+ UL2CM3(-S0 -C0 -P0 ) -FN2 -FC20000 -FD20000000 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33 -FF1MIMXRT1180_EVK_FSPI1_QSPI_CM7 -FL01000000 -FL11000000 -FS028000000 -FS128000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM) -FP1($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM)
+
+
+
+
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+ 1
+ 0
+ 2
+ 10000000
+
+
+
+
diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvprojx b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvprojx
index 78acfd77ca4d..2271da9c970e 100644
--- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvprojx
+++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/template.uvprojx
@@ -1132,7 +1132,7 @@
- rtthread_flexspi_nor_hyperram
+ rtthread_flexspi_nor_industry
0x4
ARM-ADS
6220000::V6.22::ARMCLANG
@@ -1496,7 +1496,7 @@
0x00000000
0x10000000
- .\board\linker_scripts\MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.scf
+ .\board\linker_scripts\MIMXRT1189xxxxx_cm7_flexspi_nor_industry.scf
--legacyalign
@@ -1506,6 +1506,756 @@
+
+ rtthread_flexspi_nor_hyperram
+ 0x4
+ ARM-ADS
+ 6220000::V6.22::ARMCLANG
+ 1
+
+
+ MIMXRT1189CVM8C:cm7
+ NXP
+ NXP.MIMXRT1189_DFP.25.06.00
+ https://mcuxpresso.nxp.com/cmsis_pack/repo/
+ IRAM(0x20484000,0x07c000) IRAM2(0x20500000,0x040000) IROM(0x00000000,0x028000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE
+
+
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC20000 -FN2 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33 -FS028000000 -FL01000000 -FF1MIMXRT1180_EVK_FSPI1_QSPI_CM7 -FS128000000 -FL11000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM) -FP1($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM))
+ 0
+ $$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\fsl_device_registers.h
+
+
+
+
+
+
+
+
+
+ $$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\MIMXRT1189_cm7.xml
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\build\keil\Obj\
+ rtthread
+ 1
+ 0
+ 1
+ 1
+ 1
+ .\build\keil\List\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+ fromelf --bin !L --output rtthread.bin
+
+ 0
+ 0
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMCM3.DLL
+ -REMAP -MPU
+ DCM.DLL
+ -pCM7
+ SARMCM3.DLL
+ -MPU
+ TCM.DLL
+ -pCM7
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+ 1
+ 4096
+
+ 1
+ BIN\UL2CM3.DLL
+ "" ()
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ "Cortex-M7"
+
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 3
+ 0
+ 0
+ 0
+ 1
+ 0
+ 8
+ 1
+ 0
+ 0
+ 0
+ 3
+ 4
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 1
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20484000
+ 0x7c000
+
+
+ 1
+ 0x0
+ 0x28000
+
+
+ 1
+ 0x1ffe0000
+ 0x20000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x28000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20484000
+ 0x7c000
+
+
+ 0
+ 0x20500000
+ 0x40000
+
+
+
+
+
+ 1
+ 5
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3
+ 0
+ 0
+ 1
+ 0
+ 0
+ 3
+ 3
+ 1
+ 1
+ 0
+ 0
+ 0
+
+ -xc -std=gnu99 -mimplicit-float
+ RELOC_VECTOR
+
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ -x assembler-with-cpp
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x10000000
+
+ .\board\linker_scripts\MIMXRT1189xxxxx_cm7_flexspi_nor_hyperram.scf
+
+
+ --legacyalign
+
+ 6439,6314
+
+
+
+
+
+ rtthread_ram_industry
+ 0x4
+ ARM-ADS
+ 6220000::V6.22::ARMCLANG
+ 1
+
+
+ MIMXRT1189CVM8C:cm7
+ NXP
+ NXP.MIMXRT1189_DFP.25.06.00
+ https://mcuxpresso.nxp.com/cmsis_pack/repo/
+ IRAM(0x20484000,0x07c000) IRAM2(0x20520000,0x018000) IROM(0x00000000,0x040000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE
+
+
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC20000 -FN2 -FF0MIMXRT1180_EVK_FSPI1_QSPI_CM33 -FS028000000 -FL01000000 -FF1MIMXRT1180_EVK_FSPI1_QSPI_CM7 -FS128000000 -FL11000000 -FP0($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM33.FLM) -FP1($$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\arm\MIMXRT1180_EVK_FSPI1_QSPI_CM7.FLM))
+ 0
+ $$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\fsl_device_registers.h
+
+
+
+
+
+
+
+
+
+ $$Device:MIMXRT1189CVM8C$devices\MIMXRT1189\MIMXRT1189_cm7.xml
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\build\keil\ram_industry\Obj\
+ rtthread
+ 1
+ 0
+ 1
+ 1
+ 1
+ .\build\keil\ram_industry\List\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+ fromelf --bin !L --output rtthread.bin
+
+ 0
+ 0
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMCM3.DLL
+ -REMAP -MPU
+ DCM.DLL
+ -pCM7
+ SARMCM3.DLL
+ -MPU
+ TCM.DLL
+ -pCM7
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ 4096
+
+ 1
+ BIN\UL2CM3.DLL
+ "" ()
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ "Cortex-M7"
+
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 3
+ 0
+ 0
+ 0
+ 1
+ 0
+ 8
+ 1
+ 0
+ 0
+ 0
+ 3
+ 4
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 1
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20484000
+ 0x7c000
+
+
+ 1
+ 0x0
+ 0x40000
+
+
+ 1
+ 0x1ffe0000
+ 0x20000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x40000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20484000
+ 0x7c000
+
+
+ 0
+ 0x20520000
+ 0x18000
+
+
+
+
+
+ 1
+ 5
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3
+ 0
+ 0
+ 1
+ 0
+ 0
+ 3
+ 3
+ 1
+ 1
+ 0
+ 0
+ 0
+
+ -xc -std=gnu99 -mimplicit-float
+ RELOC_VECTOR
+
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ -x assembler-with-cpp
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x20000000
+
+ .\board\linker_scripts\MIMXRT1189xxxxx_cm7_ram_industry.scf
+
+
+ --legacyalign --predefine="-D__use_shmem__=1 -D__multicore__=1"
+
+ 6439,6314
+
+
+
+
diff --git a/bsp/nxp/imx/imxrt/libraries/drivers/drv_flexspi.c b/bsp/nxp/imx/imxrt/libraries/drivers/drv_flexspi.c
index 8e1b3b997446..e9b2d3d1b866 100644
--- a/bsp/nxp/imx/imxrt/libraries/drivers/drv_flexspi.c
+++ b/bsp/nxp/imx/imxrt/libraries/drivers/drv_flexspi.c
@@ -70,7 +70,7 @@ static flexspi_device_config_t deviceconfig = {
.AHBWriteWaitUnit = kFLEXSPI_AhbWriteWaitUnit2AhbCycle,
.AHBWriteWaitInterval = 0,
};
-const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
+uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
/* 8bit mode */
[4 * ARD_SEQ_INDEX] =
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_8PAD, 0),
@@ -98,7 +98,7 @@ static flexspi_device_config_t deviceconfig = {
.AHBWriteWaitInterval = 0,
};
-const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
+uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
#ifndef BSP_USING_OSPI_FLASH
/* Normal read mode - SDR */
[4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL] =