From 2be211e6af9105e3e9c4072bfc11da03ef2cbe42 Mon Sep 17 00:00:00 2001 From: Yongxu Wang Date: Wed, 2 Jul 2025 14:47:59 +0530 Subject: [PATCH] soc: imx93 m33: add tcm init m33 must ensure the TCM is ECC clean by initializing all dtcm memories Otherwise, it can only run it by loading m33 under uboot. Based on this fixed, we can run M33 by mkimage into flash.bin. Signed-off-by: Yongxu Wang --- soc/nxp/imx/imx9/imx93/CMakeLists.txt | 1 + soc/nxp/imx/imx9/imx93/Kconfig | 1 + .../imx/imx9/imx93/m33/imx93_m33_startup.S | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 soc/nxp/imx/imx9/imx93/m33/imx93_m33_startup.S diff --git a/soc/nxp/imx/imx9/imx93/CMakeLists.txt b/soc/nxp/imx/imx9/imx93/CMakeLists.txt index 1d511e7d5ff..0ddfb39b65d 100644 --- a/soc/nxp/imx/imx9/imx93/CMakeLists.txt +++ b/soc/nxp/imx/imx9/imx93/CMakeLists.txt @@ -12,4 +12,5 @@ elseif(CONFIG_SOC_MIMX9352_M33) zephyr_include_directories(m33) zephyr_sources(m33/soc.c) set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm/cortex_m/scripts/linker.ld CACHE INTERNAL "") + zephyr_library_sources_ifdef(CONFIG_SOC_RESET_HOOK m33/imx93_m33_startup.S) endif() diff --git a/soc/nxp/imx/imx9/imx93/Kconfig b/soc/nxp/imx/imx9/imx93/Kconfig index f17c1378911..b84c92a7791 100644 --- a/soc/nxp/imx/imx9/imx93/Kconfig +++ b/soc/nxp/imx/imx9/imx93/Kconfig @@ -22,6 +22,7 @@ config SOC_MIMX9352_M33 select HAS_MCUX_IOMUXC if PINCTRL select HAS_MCUX_CACHE select SOC_EARLY_INIT_HOOK + select SOC_RESET_HOOK config MCUX_CORE_SUFFIX default "_ca55" if SOC_MIMX9352_A55 diff --git a/soc/nxp/imx/imx9/imx93/m33/imx93_m33_startup.S b/soc/nxp/imx/imx9/imx93/m33/imx93_m33_startup.S new file mode 100644 index 00000000000..4df11a46439 --- /dev/null +++ b/soc/nxp/imx/imx9/imx93/m33/imx93_m33_startup.S @@ -0,0 +1,26 @@ +/* + * Copyright 2025 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +_ASM_FILE_PROLOGUE + +GTEXT(soc_reset_hook) + +SECTION_FUNC(TEXT, soc_reset_hook) + + mov r0, #0 + ldr r1, = DT_REG_ADDR(DT_NODELABEL(dtcm)) + ldr r2, = DT_REG_ADDR(DT_NODELABEL(dtcm)) + DT_REG_SIZE(DT_NODELABEL(dtcm)) +DTCM_LOOP: + cmp r1, r2 + itt lt + strlt r0, [r1], #4 + blt DTCM_LOOP + + bx lr