[U-Boot] [PATCH 1/2] imx8: Jump from alias to OCRAM address at SPL init

When running SPL on iMX8, the A core starts at address 0 which is a alias to OCRAM 0x100000. The alias only map first 96KB of OCRAM, so this require the SPL size can't beyond 96KB. But when using SPL DM, the size increase significantly and may exceed 96KB. So to fix the problem, we will change SPL linker address to OCRAM address 0x100000. And then jump to the absolute address not the PC relative address for entering OCRAM.
Signed-off-by: Ye Li ye.li@nxp.com --- arch/arm/Kconfig | 1 + arch/arm/include/asm/arch-imx8/boot0.h | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/boot0.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 01ff57c..6ea21b7 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -755,6 +755,7 @@ config ARCH_IMX8 select ARM64 select DM select OF_CONTROL + select ENABLE_ARM_SOC_BOOT0_HOOK
config ARCH_IMX8M bool "NXP i.MX8M platform" diff --git a/arch/arm/include/asm/arch-imx8/boot0.h b/arch/arm/include/asm/arch-imx8/boot0.h new file mode 100644 index 0000000..5ce781a --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/boot0.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2019 NXP + */ + +#if defined(CONFIG_SPL_BUILD) + /* + * We use absolute address not PC relative address to jump. + * When running SPL on iMX8, the A core starts at address 0, a alias to OCRAM 0x100000, + * our linker address for SPL is from 0x100000. So using absolute address can jump to + * the OCRAM address from the alias. + * The alias only map first 96KB of OCRAM, so this require the SPL size can't beyond 96KB. + * But when using SPL DM, the size increase significantly and may exceed 96KB. + * That's why we have to jump to OCRAM. + */ + + ldr x0, =reset + br x0 +#else + b reset +#endif

Modify the SPL TEXT base from OCRAM alias to OCRAM base 0x100000, so we can use full OCRAM not limit to 96KB
Signed-off-by: Ye Li ye.li@nxp.com --- configs/imx8qm_mek_defconfig | 1 + configs/imx8qxp_mek_defconfig | 1 + include/configs/imx8qm_mek.h | 1 - 3 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/configs/imx8qm_mek_defconfig b/configs/imx8qm_mek_defconfig index a4d2619..544a5d9 100644 --- a/configs/imx8qm_mek_defconfig +++ b/configs/imx8qm_mek_defconfig @@ -3,6 +3,7 @@ CONFIG_SPL_SYS_ICACHE_OFF=y CONFIG_SPL_SYS_DCACHE_OFF=y CONFIG_ARCH_IMX8=y CONFIG_SYS_TEXT_BASE=0x80020000 +CONFIG_SPL_TEXT_BASE=0x100000 CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y diff --git a/configs/imx8qxp_mek_defconfig b/configs/imx8qxp_mek_defconfig index 92927e3..73d6d13 100644 --- a/configs/imx8qxp_mek_defconfig +++ b/configs/imx8qxp_mek_defconfig @@ -3,6 +3,7 @@ CONFIG_SPL_SYS_ICACHE_OFF=y CONFIG_SPL_SYS_DCACHE_OFF=y CONFIG_ARCH_IMX8=y CONFIG_SYS_TEXT_BASE=0x80020000 +CONFIG_SPL_TEXT_BASE=0x100000 CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y diff --git a/include/configs/imx8qm_mek.h b/include/configs/imx8qm_mek.h index d06ed61..148a4ff 100644 --- a/include/configs/imx8qm_mek.h +++ b/include/configs/imx8qm_mek.h @@ -10,7 +10,6 @@ #include <asm/arch/imx-regs.h>
#ifdef CONFIG_SPL_BUILD -#define CONFIG_SPL_TEXT_BASE 0x0 #define CONFIG_SPL_MAX_SIZE (124 * 1024) #define CONFIG_SYS_MONITOR_LEN (1024 * 1024) #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR

On Fri, 12 Jul 2019 at 12:34, Ye Li ye.li@nxp.com wrote:
Modify the SPL TEXT base from OCRAM alias to OCRAM base 0x100000, so we can use full OCRAM not limit to 96KB
Signed-off-by: Ye Li ye.li@nxp.com
Reviewed-by: Oleksandr Suvorov oleksandr.suvorov@toradex.com
configs/imx8qm_mek_defconfig | 1 + configs/imx8qxp_mek_defconfig | 1 + include/configs/imx8qm_mek.h | 1 - 3 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/configs/imx8qm_mek_defconfig b/configs/imx8qm_mek_defconfig index a4d2619..544a5d9 100644 --- a/configs/imx8qm_mek_defconfig +++ b/configs/imx8qm_mek_defconfig @@ -3,6 +3,7 @@ CONFIG_SPL_SYS_ICACHE_OFF=y CONFIG_SPL_SYS_DCACHE_OFF=y CONFIG_ARCH_IMX8=y CONFIG_SYS_TEXT_BASE=0x80020000 +CONFIG_SPL_TEXT_BASE=0x100000 CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y diff --git a/configs/imx8qxp_mek_defconfig b/configs/imx8qxp_mek_defconfig index 92927e3..73d6d13 100644 --- a/configs/imx8qxp_mek_defconfig +++ b/configs/imx8qxp_mek_defconfig @@ -3,6 +3,7 @@ CONFIG_SPL_SYS_ICACHE_OFF=y CONFIG_SPL_SYS_DCACHE_OFF=y CONFIG_ARCH_IMX8=y CONFIG_SYS_TEXT_BASE=0x80020000 +CONFIG_SPL_TEXT_BASE=0x100000 CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y diff --git a/include/configs/imx8qm_mek.h b/include/configs/imx8qm_mek.h index d06ed61..148a4ff 100644 --- a/include/configs/imx8qm_mek.h +++ b/include/configs/imx8qm_mek.h @@ -10,7 +10,6 @@ #include <asm/arch/imx-regs.h>
#ifdef CONFIG_SPL_BUILD -#define CONFIG_SPL_TEXT_BASE 0x0 #define CONFIG_SPL_MAX_SIZE (124 * 1024) #define CONFIG_SYS_MONITOR_LEN (1024 * 1024)
#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
2.7.4
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot

On Fri, 12 Jul 2019 at 12:34, Ye Li ye.li@nxp.com wrote:
When running SPL on iMX8, the A core starts at address 0 which is a alias to OCRAM 0x100000. The alias only map first 96KB of OCRAM, so this require the SPL size can't beyond 96KB. But when using SPL DM, the size increase significantly and may exceed 96KB. So to fix the problem, we will change SPL linker address to OCRAM address 0x100000. And then jump to the absolute address not the PC relative address for entering OCRAM.
Signed-off-by: Ye Li ye.li@nxp.com
Reviewed-by: Oleksandr Suvorov oleksandr.suvorov@toradex.com
arch/arm/Kconfig | 1 + arch/arm/include/asm/arch-imx8/boot0.h | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/boot0.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 01ff57c..6ea21b7 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -755,6 +755,7 @@ config ARCH_IMX8 select ARM64 select DM select OF_CONTROL
select ENABLE_ARM_SOC_BOOT0_HOOK
config ARCH_IMX8M bool "NXP i.MX8M platform" diff --git a/arch/arm/include/asm/arch-imx8/boot0.h b/arch/arm/include/asm/arch-imx8/boot0.h new file mode 100644 index 0000000..5ce781a --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/boot0.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright 2019 NXP
- */
+#if defined(CONFIG_SPL_BUILD)
/*
* We use absolute address not PC relative address to jump.
* When running SPL on iMX8, the A core starts at address 0, a alias to OCRAM 0x100000,
* our linker address for SPL is from 0x100000. So using absolute address can jump to
* the OCRAM address from the alias.
* The alias only map first 96KB of OCRAM, so this require the SPL size can't beyond 96KB.
* But when using SPL DM, the size increase significantly and may exceed 96KB.
* That's why we have to jump to OCRAM.
*/
ldr x0, =reset
br x0
+#else
b reset
+#endif
2.7.4
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
participants (3)
-
Oleksandr Suvorov
-
Oleksandr Suvorov
-
Ye Li