[PATCH] armv8: Handle EL2 Host mode
Mark Kettenis
kettenis at openbsd.org
Sat Jan 30 13:12:32 CET 2021
On implementations that support VHE, the layout of the CPTR_EL2
register depends on whether HCR_EL2.E2H is set. Check this bit
and and set the aprropriate bits to enable access to the FP/SIMD
registers. This allows U-Boot to run on systems that pass
control to U-Boot in EL2 with EL2 Host mode enabled such as
machine with Apple's M1 SoC.
Signed-off-by: Mark Kettenis <kettenis at openbsd.org>
---
arch/arm/cpu/armv8/start.S | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
index 662449156b..a259717e67 100644
--- a/arch/arm/cpu/armv8/start.S
+++ b/arch/arm/cpu/armv8/start.S
@@ -133,9 +133,15 @@ pie_fixup_done:
#endif
b 0f
2: set_vbar vbar_el2, x0
+ mrs x0, hcr_el2
+ tbnz x0, #34, el2_host /* HCR_EL2.E2H */
mov x0, #0x33ff
msr cptr_el2, x0 /* Enable FP/SIMD */
b 0f
+el2_host:
+ mov x0, #3 << 20
+ msr cptr_el2, x0 /* Enable FP/SIMD */
+ b 0f
1: set_vbar vbar_el1, x0
mov x0, #3 << 20
msr cpacr_el1, x0 /* Enable FP/SIMD */
--
2.30.0
More information about the U-Boot
mailing list