Re: [kvm-unit-tests PATCH v1 1/7] arm64: drop to EL1 if booted at EL2

Joey Gouly
2025-03-04T17:02:17Z

Hi,

On Thu, Feb 27, 2025 at 04:53:15PM +0000, Alexandru Elisei wrote:
> Hi Joey,
>
> On Thu, Feb 20, 2025 at 02:13:48PM +0000, Joey Gouly wrote:
> > EL2 is not currently supported, drop to EL1 to conitnue booting.
> >
> > Signed-off-by: Joey Gouly <joey.gouly@arm.com>
> > ---
> > arm/cstart64.S | 27 +++++++++++++++++++++++++--
> > 1 file changed, 25 insertions(+), 2 deletions(-)
> >
> > diff --git a/arm/cstart64.S b/arm/cstart64.S
> > index b480a552..3a305ad0 100644
> > --- a/arm/cstart64.S
> > +++ b/arm/cstart64.S
> > @@ -57,14 +57,25 @@ start:
> > add x6, x6, :lo12:reloc_end
> > 1:
> > cmp x5, x6
> > - b.hs 1f
> > + b.hs reloc_done
> > ldr x7, [x5] // r_offset
> > ldr x8, [x5, #16] // r_addend
> > add x8, x8, x4 // val = base + r_addend
> > str x8, [x4, x7] // base[r_offset] = val
> > add x5, x5, #24
> > b 1b
> > -
> > +reloc_done:
> > + mrs x4, CurrentEL
> > + cmp x4, CurrentEL_EL2
> > + b.ne 1f
> > +drop_to_el1:
> > + mov x4, 4
> > + msr spsr_el2, x4
> > + adrp x4, 1f
> > + add x4, x4, :lo12:1f
> > + msr elr_el2, x4
>
> I'm going to assume this works because KVM is nice enough to initialise the
> EL2 registers that affect execution at EL1 to some sane defaults. Is that
> something that can be relied on going forward?

I was just trying to keep the changes minimal.

>
> What about UEFI?

Haven't tested it yet.

>
> I was expecting some kind of initialization of the registers that affect
> EL1.

I'll look into it.

Thanks,
Joey

>
> Thanks,
> Alex
>
> > + isb
> > + eret
> > 1:
> > /* zero BSS */
> > adrp x4, bss
> > @@ -186,6 +197,18 @@ get_mmu_off:
> >
> > .globl secondary_entry
> > secondary_entry:
> > + mrs x0, CurrentEL
> > + cmp x0, CurrentEL_EL2
> > + b.ne 1f
> > +drop_to_el1_secondary:
> > + mov x0, 4
> > + msr spsr_el2, x0
> > + adrp x0, 1f
> > + add x0, x0, :lo12:1f
> > + msr elr_el2, x0
> > + isb
> > + eret
> > +1:
> > /* enable FP/ASIMD and SVE */
> > mov x0, #(3 << 20)
> > orr x0, x0, #(3 << 16)
> > --
> > 2.25.1
> >