BL31: Enable pointer authentication support in warm boot path
authorAlexei Fedorov <Alexei.Fedorov@arm.com>
Wed, 6 Mar 2019 11:15:51 +0000 (11:15 +0000)
committerAlexei Fedorov <Alexei.Fedorov@arm.com>
Thu, 7 Mar 2019 10:50:10 +0000 (10:50 +0000)
In the current Pointer Authentication support added in
commit b86048c40cb7d9ccd7aeac1681945676a6dc36ff
PAuth gets enabled in BL31 cold boot entrypoint only,
(see bl31_entrypoint() in bl31\aarch64\bl31_entrypoint.S)
but not in bl31_warm_entrypoint().
This results in EnIA bit [31] in SCTLR_EL3 not being set
and pointer authentication disabled after CPU wake-up event.

Fixes ARM-software/tf-issues#684

Change-Id: I27a67804764dfba2a6d72ca119ca2bcff4f536d6
Signed-off-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
bl31/aarch64/bl31_entrypoint.S

index 8e9528b47488ebca41281d8236d9c802a96a1e25..065edffc7d51e089ed1194f6f0dafe9becf11020 100644 (file)
@@ -201,6 +201,19 @@ func bl31_warm_entrypoint
 #endif
        bl      bl31_plat_enable_mmu
 
+       /* --------------------------------------------------------------------
+        * Enable pointer authentication
+        * --------------------------------------------------------------------
+        */
+#if ENABLE_PAUTH
+       bl      pauth_load_bl_apiakey
+
+       mrs     x0, sctlr_el3
+       orr     x0, x0, #SCTLR_EnIA_BIT
+       msr     sctlr_el3, x0
+       isb
+#endif /* ENABLE_PAUTH */
+
        bl      psci_warmboot_entrypoint
 
 #if ENABLE_RUNTIME_INSTRUMENTATION