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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxx>
> > ---
> >  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
> > 




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux