Message ID | 20210521104807.138269-6-jaxson.han@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add Armv8-R AArch64 support | expand |
On Fri, 21 May 2021 18:48:04 +0800 Jaxson Han <jaxson.han@arm.com> wrote: Hi, > Save SPSR_KERNEL into spsr_to_elx during el3_init. > The jump_kernel will load spsr_to_elx into spsr_el3. > > This change will make it easier to control whether drop to lower EL > before jumping to the kernel. Looks good, but this needs some adaption after fixing patch 2/8: > > Signed-off-by: Jaxson Han <jaxson.han@arm.com> > --- > arch/aarch64/boot.S | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S > index b8f9e4e..5600859 100644 > --- a/arch/aarch64/boot.S > +++ b/arch/aarch64/boot.S > @@ -118,7 +118,16 @@ el3_init: > mov x0, #ZCR_EL3_LEN_MASK // SVE: Enable full vector len > msr ZCR_EL3, x0 // for EL2. > > -1: > + /* > + * Save SPSR_KERNEL into spsr_to_elx. > + * The jump_kernel will load spsr_to_elx into spsr_el3 > + */ > +1: mov w0, #SPSR_KERNEL > + ldr x1, =spsr_to_elx > + str w0, [x1] > + b el_max_init > + > +el_max_init: > ldr x0, =CNTFRQ > msr cntfrq_el0, x0 > > @@ -166,7 +175,7 @@ jump_kernel: > b.eq 1f > br x19 // Keep current EL > > -1: ldr w4, #SPSR_KERNEL > +1: ldr w4, spsr_to_elx This would be the place where you change the original "mov x4, #SPSR_KERNEL" line into this one here (and not in patch 2). With that fixed: Reviewed-by: Andre Przywara <andre.przywara@arm.com> Cheers, Andre > > /* > * If bit 0 of the kernel address is set, we're entering in AArch32 > @@ -184,3 +193,5 @@ jump_kernel: > .align 3 > flag_keep_el: > .long 0 > +spsr_to_elx: > + .long 0
diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S index b8f9e4e..5600859 100644 --- a/arch/aarch64/boot.S +++ b/arch/aarch64/boot.S @@ -118,7 +118,16 @@ el3_init: mov x0, #ZCR_EL3_LEN_MASK // SVE: Enable full vector len msr ZCR_EL3, x0 // for EL2. -1: + /* + * Save SPSR_KERNEL into spsr_to_elx. + * The jump_kernel will load spsr_to_elx into spsr_el3 + */ +1: mov w0, #SPSR_KERNEL + ldr x1, =spsr_to_elx + str w0, [x1] + b el_max_init + +el_max_init: ldr x0, =CNTFRQ msr cntfrq_el0, x0 @@ -166,7 +175,7 @@ jump_kernel: b.eq 1f br x19 // Keep current EL -1: ldr w4, #SPSR_KERNEL +1: ldr w4, spsr_to_elx /* * If bit 0 of the kernel address is set, we're entering in AArch32 @@ -184,3 +193,5 @@ jump_kernel: .align 3 flag_keep_el: .long 0 +spsr_to_elx: + .long 0
Save SPSR_KERNEL into spsr_to_elx during el3_init. The jump_kernel will load spsr_to_elx into spsr_el3. This change will make it easier to control whether drop to lower EL before jumping to the kernel. Signed-off-by: Jaxson Han <jaxson.han@arm.com> --- arch/aarch64/boot.S | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)