imx8: save args passed from ATF
authorPeng Fan <peng.fan@nxp.com>
Mon, 26 Aug 2019 08:12:09 +0000 (08:12 +0000)
committerStefano Babic <sbabic@denx.de>
Tue, 8 Oct 2019 14:35:59 +0000 (16:35 +0200)
We use information from ATF to know whether OP-TEE is running or not.
So save args passed from ATF.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
arch/arm/include/asm/arch-imx8/sys_proto.h
arch/arm/mach-imx/imx8/Makefile
arch/arm/mach-imx/imx8/lowlevel_init.S [new file with mode: 0644]

index b8d2a0b8f0c3bb4edcd263b90fd6b64f80d280a6..0e981ae950e00fbc5d56627583c00af12f8d7b4b 100644 (file)
@@ -16,6 +16,7 @@ struct pass_over_info_t {
        u32 g_ap_mu;
 };
 
+extern unsigned long boot_pointer[];
 void build_info(void);
 enum boot_device get_boot_device(void);
 int print_bootinfo(void);
index 7fc34762a2ac0be37a710f4263ab55eec6a49389..97f9d2294512eaf6fb6e16be69769872592d2100 100644 (file)
@@ -4,7 +4,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y += cpu.o iomux.o misc.o
+obj-y += cpu.o iomux.o misc.o lowlevel_init.o
 obj-$(CONFIG_OF_SYSTEM_SETUP) += fdt.o
 
 ifdef CONFIG_SPL_BUILD
diff --git a/arch/arm/mach-imx/imx8/lowlevel_init.S b/arch/arm/mach-imx/imx8/lowlevel_init.S
new file mode 100644 (file)
index 0000000..a66243c
--- /dev/null
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2019 NXP
+ */
+
+#include <config.h>
+
+.align 8
+.global boot_pointer
+boot_pointer:
+       .space 32
+
+/*
+ * Routine: save_boot_params (called after reset from start.S)
+ */
+
+.global save_boot_params
+save_boot_params:
+       /* The firmware provided ATAG/FDT address can be found in r2/x0 */
+       adr     x0, boot_pointer
+       stp     x1, x2, [x0], #16
+       stp     x3, x4, [x0], #16
+
+       /*
+        * We use absolute address not PC relative address for return.
+        * When running SPL on iMX8, the A core starts at address 0,
+        * an 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
+        * always beyonds 96KB. That's why we have to jump to OCRAM.
+        * Normal u-boot also runs into this codes, but there is no impact.
+        */
+       ldr     x1, =save_boot_params_ret
+       br      x1