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

Reply via email to