[PATCH] aarch64: improve start code for aarch32 mode

Gedare Bloom gedare at rtems.org
Thu Jul 1 22:35:27 UTC 2021


---
 bsps/aarch64/shared/start/start.S | 31 ++++++++++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/bsps/aarch64/shared/start/start.S b/bsps/aarch64/shared/start/start.S
index f4c39dacdf..f47625ef99 100644
--- a/bsps/aarch64/shared/start/start.S
+++ b/bsps/aarch64/shared/start/start.S
@@ -107,30 +107,43 @@ _start:
 _el3_start:
   /* Drop from EL3 to EL2 */
 
+  msr CPTR_EL3, XZR
+
   /* Initialize HCR_EL2 and SCTLR_EL2 */
   msr HCR_EL2, XZR
   msr SCTLR_EL2, XZR
+
   /* Set EL2 Execution state via SCR_EL3 */
   mrs x0, SCR_EL3
+#ifdef AARCH64_MULTILIB_ARCH_V8_ILP32
+  bic x0, x0, #(1<<10)
+#else
   /* Set EL2 to AArch64 */
   orr x0, x0, #(1<<10)
-#ifdef AARCH64_IS_NONSECURE
+#endif
+#if defined(AARCH64_IS_NONSECURE)
   /* Set EL1 to NS */
   orr x0, x0, #1
 #endif
   msr SCR_EL3, x0
 
+#if defined(AARCH64_IS_NONSECURE)
   /* set EL2h mode for eret */
-#ifdef AARCH64_IS_NONSECURE
   mov x0, #0b01001
 #else
+  /* set EL1h mode for eret */
   mov x0, #0b00101
 #endif
 
+#if defined(AARCH64_MULTILIB_ARCH_V8_ILP32)
+  /* set aarch32 mode */
+  orr x0, x0, #(1<<4)
+#endif
+
   msr SPSR_EL3, x0
 
   /* Set EL2 entry point */
-#ifdef AARCH64_IS_NONSECURE
+#if defined(AARCH64_IS_NONSECURE)
   adr x0, _el2_start
 #else
   adr x0, _el1_start
@@ -143,8 +156,12 @@ _el2_start:
 
   /* Configure HCR_EL2 */
   mrs x0, HCR_EL2
+
+#ifndef AARCH64_MULTILIB_ARCH_V8_ILP32
   /* Set EL1 Execution state to AArch64 */
   orr x0, x0, #(1<<31)
+#endif
+
   /* Disable ID traps */
   bic x0, x0, #(1<<15)
   bic x0, x0, #(1<<16)
@@ -152,8 +169,16 @@ _el2_start:
   bic x0, x0, #(1<<18)
   msr HCR_EL2, x0
 
+  /* Disable coprocessor traps */
+  msr CPTR_EL2, XZR
+  msr HSTR_EL2, XZR
+
   /* Set to EL1h mode for eret */
   mov x0, #0b00101
+#if defined(AARCH64_MULTILIB_ARCH_V8_ILP32)
+  /* set aarch32 mode */
+  orr x0, x0, #(1<<4)
+#endif
   msr SPSR_EL2, x0
 
   /* Set EL1 entry point */
-- 
2.25.1



More information about the devel mailing list