diff --git a/boards/arm/mimxrt1020_evk/Kconfig.defconfig b/boards/arm/mimxrt1020_evk/Kconfig.defconfig index a9524ed455f..4ecf9c39c1d 100644 --- a/boards/arm/mimxrt1020_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1020_evk/Kconfig.defconfig @@ -15,6 +15,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + if NETWORKING config NET_L2_ETHERNET diff --git a/boards/arm/mimxrt1024_evk/Kconfig.defconfig b/boards/arm/mimxrt1024_evk/Kconfig.defconfig index 26f5e06810a..704743ded71 100644 --- a/boards/arm/mimxrt1024_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1024_evk/Kconfig.defconfig @@ -15,6 +15,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + config I2C_MCUX_LPI2C_BUS_RECOVERY default y depends on I2C_MCUX_LPI2C && PINCTRL diff --git a/boards/arm/mimxrt1040_evk/Kconfig.defconfig b/boards/arm/mimxrt1040_evk/Kconfig.defconfig index c9adb66fc31..683da9279ed 100644 --- a/boards/arm/mimxrt1040_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1040_evk/Kconfig.defconfig @@ -13,4 +13,7 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + endif # BOARD_MIMXRT1040_EVK diff --git a/boards/arm/mimxrt1050_evk/Kconfig.defconfig b/boards/arm/mimxrt1050_evk/Kconfig.defconfig index dc245ececa1..f59f3de75c3 100644 --- a/boards/arm/mimxrt1050_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1050_evk/Kconfig.defconfig @@ -16,6 +16,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + if FLASH config FLASH_MCUX_FLEXSPI_HYPERFLASH diff --git a/boards/arm/mimxrt1060_evk/Kconfig.defconfig b/boards/arm/mimxrt1060_evk/Kconfig.defconfig index 332a0b758b2..c0116651515 100644 --- a/boards/arm/mimxrt1060_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1060_evk/Kconfig.defconfig @@ -17,6 +17,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + if FLASH config FLASH_MCUX_FLEXSPI_NOR diff --git a/boards/arm/mimxrt1062_fmurt6/Kconfig.defconfig b/boards/arm/mimxrt1062_fmurt6/Kconfig.defconfig index ea12512b60e..8e349eb07ed 100644 --- a/boards/arm/mimxrt1062_fmurt6/Kconfig.defconfig +++ b/boards/arm/mimxrt1062_fmurt6/Kconfig.defconfig @@ -15,6 +15,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + if NETWORKING config NET_L2_ETHERNET diff --git a/boards/arm/mimxrt1064_evk/Kconfig.defconfig b/boards/arm/mimxrt1064_evk/Kconfig.defconfig index 18e70a2ce53..8a574dc2f0e 100644 --- a/boards/arm/mimxrt1064_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1064_evk/Kconfig.defconfig @@ -15,6 +15,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + config KSCAN default y if LVGL diff --git a/boards/arm/mimxrt1160_evk/Kconfig.defconfig b/boards/arm/mimxrt1160_evk/Kconfig.defconfig index b3525cf5114..9f7f09e84c2 100644 --- a/boards/arm/mimxrt1160_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1160_evk/Kconfig.defconfig @@ -19,6 +19,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y if CPU_CORTEX_M7 +config NXP_IMX_EXTERNAL_SDRAM + default y if CPU_CORTEX_M7 + if SECOND_CORE_MCUX && BOARD_MIMXRT1160_EVK_CM4 config BUILD_OUTPUT_INFO_HEADER diff --git a/boards/arm/mimxrt1170_evk/Kconfig.defconfig b/boards/arm/mimxrt1170_evk/Kconfig.defconfig index 3c8c1d57885..867999f701c 100644 --- a/boards/arm/mimxrt1170_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1170_evk/Kconfig.defconfig @@ -22,6 +22,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y if CPU_CORTEX_M7 +config NXP_IMX_EXTERNAL_SDRAM + default y if CPU_CORTEX_M7 + if SECOND_CORE_MCUX && CPU_CORTEX_M4 config BUILD_OUTPUT_INFO_HEADER diff --git a/boards/arm/mm_feather/Kconfig.defconfig b/boards/arm/mm_feather/Kconfig.defconfig index 1a75f9241fa..80201fdcb86 100644 --- a/boards/arm/mm_feather/Kconfig.defconfig +++ b/boards/arm/mm_feather/Kconfig.defconfig @@ -16,6 +16,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + config DISK_DRIVER_SDMMC default y if DISK_DRIVERS diff --git a/boards/arm/mm_swiftio/Kconfig.defconfig b/boards/arm/mm_swiftio/Kconfig.defconfig index 92ac1f7b76f..95fe8e06d9c 100644 --- a/boards/arm/mm_swiftio/Kconfig.defconfig +++ b/boards/arm/mm_swiftio/Kconfig.defconfig @@ -16,6 +16,9 @@ endchoice config DEVICE_CONFIGURATION_DATA default y +config NXP_IMX_EXTERNAL_SDRAM + default y + config DISK_DRIVER_SDMMC default y if DISK_DRIVERS diff --git a/doc/releases/release-notes-3.5.rst b/doc/releases/release-notes-3.5.rst index 9d481dbe4f9..8ff9daa2343 100644 --- a/doc/releases/release-notes-3.5.rst +++ b/doc/releases/release-notes-3.5.rst @@ -96,6 +96,7 @@ Boards & SoC Support * i.MX RT SOCs no longer enable CONFIG_DEVICE_CONFIGURATION_DATA by default. boards using external SDRAM should set CONFIG_DEVICE_CONFIGURATION_DATA + and CONFIG_NXP_IMX_EXTERNAL_SDRAM to enabled. * Added support for these ARC boards: diff --git a/soc/arm/nxp_imx/rt/CMakeLists.txt b/soc/arm/nxp_imx/rt/CMakeLists.txt index ceb7468fcf6..ee8708e827f 100644 --- a/soc/arm/nxp_imx/rt/CMakeLists.txt +++ b/soc/arm/nxp_imx/rt/CMakeLists.txt @@ -9,9 +9,9 @@ zephyr_sources_ifdef(CONFIG_SOC_SERIES_IMX_RT10XX soc_rt10xx.c) zephyr_linker_sources_ifdef(CONFIG_NXP_IMX_RT_BOOT_HEADER ROM_START SORT_KEY 0 boot_header.ld) -# Enable custom OCRAM noncacheable region +# Add custom mpu regions +zephyr_sources(mpu_regions.c) zephyr_linker_sources_ifdef(CONFIG_OCRAM_NOCACHE SECTIONS sections.ld) -zephyr_sources_ifdef(CONFIG_OCRAM_NOCACHE mpu_regions.c) zephyr_linker_section_configure( SECTION .rom_start diff --git a/soc/arm/nxp_imx/rt/Kconfig.series b/soc/arm/nxp_imx/rt/Kconfig.series index 0a94b3963b1..65edffe3cd5 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.series +++ b/soc/arm/nxp_imx/rt/Kconfig.series @@ -1,6 +1,6 @@ # iMX RT series -# Copyright (c) 2017-2021, NXP +# Copyright (c) 2017-2021,2023 NXP # SPDX-License-Identifier: Apache-2.0 config SOC_SERIES_IMX_RT @@ -9,5 +9,6 @@ config SOC_SERIES_IMX_RT select SOC_FAMILY_IMX select CLOCK_CONTROL select HAS_PM + select CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS help Enable support for i.MX RT MCU series diff --git a/soc/arm/nxp_imx/rt/Kconfig.soc b/soc/arm/nxp_imx/rt/Kconfig.soc index a0567de26c1..f38abbd3959 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.soc +++ b/soc/arm/nxp_imx/rt/Kconfig.soc @@ -795,6 +795,14 @@ config OCRAM_NOCACHE Creates linker section and MPU region for OCRAM region with noncacheable attribute. OCRAM memory is useful for fast DMA transfers. +config NXP_IMX_EXTERNAL_SDRAM + bool "Allow access to external SDRAM region" + help + Enable access to external SDRAM region managed by the SEMC. This + setting should be enabled when the application uses SDRAM, or + an MPU region will be defined to disable cached access to the + SDRAM memory space. + config SECOND_CORE_MCUX bool "Dual core operation on the RT11xx series" depends on SOC_SERIES_IMX_RT11XX diff --git a/soc/arm/nxp_imx/rt/mpu_regions.c b/soc/arm/nxp_imx/rt/mpu_regions.c index e6108b7a327..8a4f36586b0 100644 --- a/soc/arm/nxp_imx/rt/mpu_regions.c +++ b/soc/arm/nxp_imx/rt/mpu_regions.c @@ -1,10 +1,13 @@ /* - * Copyright (c) 2022 NXP + * Copyright 2022-2023 NXP * * SPDX-License-Identifier: Apache-2.0 */ +#define SDRAM_BASE_ADDR 0x80000000 + #include +#include #include "../../common/cortex_m/arm_mpu_mem_cfg.h" #define IS_CHOSEN_SRAM(x) (DT_DEP_ORD(DT_NODELABEL(x)) == DT_DEP_ORD(DT_CHOSEN(zephyr_sram))) @@ -31,7 +34,18 @@ static const struct arm_mpu_region mpu_regions[] = { DT_REG_ADDR(DT_NODELABEL(ocram)), REGION_RAM_NOCACHE_ATTR(REGION_256K)), #endif + +#ifndef CONFIG_NXP_IMX_EXTERNAL_SDRAM + /* + * Region 3 - mark SDRAM0 as device type memory to prevent core + * from executing speculative prefetches against this region when + * no SDRAM is present. + */ + MPU_REGION_ENTRY("SDRAM0", SDRAM_BASE_ADDR, REGION_IO_ATTR(REGION_512M)), #endif + + /* DT-defined regions */ + DT_MEMORY_ATTR_APPLY(ARM_MPU_REGION_INIT) }; const struct arm_mpu_config mpu_config = {