aboutsummaryrefslogtreecommitdiff
path: root/src/arch/arm/boot_linux.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/boot_linux.S')
-rw-r--r--src/arch/arm/boot_linux.S21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/arch/arm/boot_linux.S b/src/arch/arm/boot_linux.S
new file mode 100644
index 0000000000..e3985eae56
--- /dev/null
+++ b/src/arch/arm/boot_linux.S
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <arch/asm.h>
+
+/* Required to jump to kernel in ARM state */
+.arm
+/* void boot_linux(void *kernel_ptr, void *fdt_ptr); */
+ENTRY(boot_linux)
+ /* Save kernel ptr */
+ mov r3, r0
+ /* Set R2 = fdt */
+ mov r2, r1
+ /* Set R0 = 0x00000000 as expected by Linux ABI */
+ mov r0, #0
+ /* Set R1 = 0xffffffff as expected by Linux ABI */
+ mov r1, #-1
+ /* Linux ABI expects SVC mode (0x13) with IRQ(7) and FIQ(6) disabled. */
+ msr cpsr_cxf, #0xd3
+ /* Jump to kernel */
+ mov pc, r3
+ENDPROC(boot_linux)