add el1 transfer at the boot stage in case higher EL is implemented
[lunaix-os.git] / lunaix-os / arch / aarch64 / boot / start.S
index 13878da38ac93e7c88e40df94efdbd48c06f1d2c..05787b6f1f7dfcc3ca62b3215d0ef19ca1d24451 100644 (file)
@@ -1,3 +1,5 @@
+#include <asm/aa64_msrs.h>
+
 .section .boot.data
     .align 4
     stack_end:
 .section .boot.data
     .align 4
     stack_end:
         mov sp, x4
         mov fp, xzr
 
         mov sp, x4
         mov fp, xzr
 
+        mov x19, x0
+        bl aarch64_pre_el1_init
+
+        bl aarch64_prepare_el1_transfer
+        cbz x0, 1f
+
+        /* transfer to EL1 if we are currently not in */
+        adr x0, stack_top
+        msr SP_EL1, x0      /* EL1 stack */
+
+        adr x0, 1f
+        msr elr, x0         /* PC to resume at EL1, elr aliased to ELR_ELx */
+
+        eret
+    1:
+        mov x0, x19
         adr x4, aarch64_init
         bl x4
          
         adr x4, aarch64_init
         bl x4