[U-Boot] [PATCH 1/3] ARM: HYP/non-sec: save and restore stack
Mark Kettenis
kettenis at openbsd.org
Tue Jun 12 17:27:46 UTC 2018
The current code that switches into HYP mode doesn't bother to set
up a stack for HYP mode. This doesn't work for EFI applications
as they expect a usable stack. Fix this by saving the stack
pointer before switching and use it to set SP_hyp from monitor.
This restores the stack pointer when we drop into HYP mode.
Signed-off-by: Mark Kettenis <kettenis at openbsd.org>
---
arch/arm/cpu/armv7/nonsec_virt.S | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv7/nonsec_virt.S b/arch/arm/cpu/armv7/nonsec_virt.S
index 56bdba1d38..246d817340 100644
--- a/arch/arm/cpu/armv7/nonsec_virt.S
+++ b/arch/arm/cpu/armv7/nonsec_virt.S
@@ -52,9 +52,9 @@ _secure_monitor:
bl psci_stack_setup
@ Configure the PSCI backend
- push {r0, r1, r2, ip}
+ push {r0, r1, r2, r3, ip}
bl psci_arch_init
- pop {r0, r1, r2, ip}
+ pop {r0, r1, r2, r3, ip}
#endif
#ifdef CONFIG_ARM_ERRATA_773022
@@ -80,6 +80,7 @@ _secure_monitor:
#ifdef CONFIG_ARMV7_VIRT
orreq r5, r5, #0x100 @ allow HVC instruction
moveq r6, #HYP_MODE @ Enter the kernel as HYP
+ msreq sp_hyp, r3 @ restore saved stack
#endif
mcr p15, 0, r5, c1, c1, 0 @ write SCR (with NS bit set)
@@ -106,6 +107,7 @@ ENTRY(_do_nonsec_entry)
mov r0, r1
mov r1, r2
mov r2, r3
+ mov r3, sp
smc #0
ENDPROC(_do_nonsec_entry)
--
2.16.2
More information about the U-Boot
mailing list