Refactor ARMv8.3 Pointer Authentication support code
[project/bcm63xx/atf.git] / bl31 / aarch64 / ea_delegate.S
index 8dca10cf93385051818289163bae3a5b9fb2499b..6e71a063a2550ee98c3c9f2668ff6676e97da043 100644 (file)
@@ -65,22 +65,16 @@ func enter_lower_el_sync_ea
        mrs     x30, esr_el3
        tbz     x30, #ESR_ISS_EABORT_EA_BIT, 2f
 
-       /* Save GP registers */
-       bl      save_gp_registers
-
        /*
-        * If Secure Cycle Counter is not disabled in MDCR_EL3
-        * when ARMv8.5-PMU is implemented, save PMCR_EL0 and
-        * disable all event counters and cycle counter.
+        * Save general purpose and ARMv8.3-PAuth registers (if enabled).
+        * If Secure Cycle Counter is not disabled in MDCR_EL3 when
+        * ARMv8.5-PMU is implemented, save PMCR_EL0 and disable Cycle Counter.
         */
-       bl      save_pmcr_disable_pmu
+       bl      save_gp_pmcr_pauth_regs
 
-       /* Save ARMv8.3-PAuth registers and load firmware key */
-#if CTX_INCLUDE_PAUTH_REGS
-       bl      pauth_context_save
-#endif
 #if ENABLE_PAUTH
-       bl      pauth_load_bl_apiakey
+       /* Load and program APIAKey firmware key */
+       bl      pauth_load_bl31_apiakey
 #endif
 
        /* Setup exception class and syndrome arguments for platform handler */
@@ -110,22 +104,16 @@ func enter_lower_el_async_ea
         */
        str     x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
 
-       /* Save GP registers */
-       bl      save_gp_registers
-
        /*
-        * If Secure Cycle Counter is not disabled in MDCR_EL3
-        * when ARMv8.5-PMU is implemented, save PMCR_EL0 and
-        * disable all event counters and cycle counter.
+        * Save general purpose and ARMv8.3-PAuth registers (if enabled).
+        * If Secure Cycle Counter is not disabled in MDCR_EL3 when
+        * ARMv8.5-PMU is implemented, save PMCR_EL0 and disable Cycle Counter.
         */
-       bl      save_pmcr_disable_pmu
+       bl      save_gp_pmcr_pauth_regs
 
-       /* Save ARMv8.3-PAuth registers and load firmware key */
-#if CTX_INCLUDE_PAUTH_REGS
-       bl      pauth_context_save
-#endif
 #if ENABLE_PAUTH
-       bl      pauth_load_bl_apiakey
+       /* Load and program APIAKey firmware key */
+       bl      pauth_load_bl31_apiakey
 #endif
 
        /* Setup exception class and syndrome arguments for platform handler */
@@ -247,7 +235,7 @@ func ea_proceed
 
        /* Switch to runtime stack */
        ldr     x5, [sp, #CTX_EL3STATE_OFFSET + CTX_RUNTIME_SP]
-       msr     spsel, #0
+       msr     spsel, #MODE_SP_EL0
        mov     sp, x5
 
        mov     x29, x30
@@ -269,7 +257,7 @@ func ea_proceed
 #endif
 
        /* Make SP point to context */
-       msr     spsel, #1
+       msr     spsel, #MODE_SP_ELX
 
        /* Restore EL3 state and ESR */
        ldp     x1, x2, [sp, #CTX_EL3STATE_OFFSET + CTX_SPSR_EL3]