[U-Boot,1/2] imx8: Jump from alias to OCRAM address at SPL init
diff mbox series

Message ID 1562924015-109688-1-git-send-email-ye.li@nxp.com
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show
Series
  • [U-Boot,1/2] imx8: Jump from alias to OCRAM address at SPL init
Related show

Commit Message

Ye Li July 12, 2019, 9:33 a.m. UTC
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

Comments

Oleksandr Suvorov July 12, 2019, 11:20 a.m. UTC | #1
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

Patch
diff mbox series

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