On 12.06.18 19:27, Mark Kettenis wrote: > 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 <kette...@openbsd.org>
Can we be sure that the stack in MON is usable from HYP? Alex > --- > 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) > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot