Message ID | 20190722213958.5761-26-julien.grall@arm.com |
---|---|
State | Superseded |
Headers | show |
Series | xen/arm: Rework head.S to make it more compliant with the Arm Arm | expand |
On Mon, 22 Jul 2019, Julien Grall wrote: > A branch in the success case can be avoided by inverting the branch > condition. At the same time, remove a pointless comment as Xen can only > run at Hypervisor Mode. > > Lastly, document the behavior and the main registers usage within the > function. > > Signed-off-by: Julien Grall <julien.grall@arm.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > Changes in v2: > - Patch added > --- > xen/arch/arm/arm32/head.S | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S > index 13793e85d8..0959c4f044 100644 > --- a/xen/arch/arm/arm32/head.S > +++ b/xen/arch/arm/arm32/head.S > @@ -205,6 +205,16 @@ secondary_switched: > b launch > ENDPROC(init_secondary) > > +/* > + * Check if the CPU supports virtualization extensions and has been booted > + * in Hypervisor mode. > + * > + * This function will never return when the CPU doesn't support > + * virtualization extensions or is booted in another mode than > + * Hypervisor mode. > + * > + * Clobbers r0 - r3 > + */ > check_cpu_mode: > /* Check that this CPU has Hyp mode */ > mrc CP32(r0, ID_PFR1) > @@ -219,15 +229,12 @@ check_cpu_mode: > mrs r0, cpsr > and r0, r0, #0x1f /* Mode is in the low 5 bits of CPSR */ > teq r0, #0x1a /* Hyp Mode? */ > - beq hyp > + moveq pc, lr /* Yes, return */ > > /* OK, we're boned. */ > PRINT("- Xen must be entered in NS Hyp mode -\r\n") > PRINT("- Please update the bootloader -\r\n") > b fail > - > -hyp: PRINT("- Xen starting in Hyp mode -\r\n") > - mov pc, lr > ENDPROC(check_cpu_mode) > > zero_bss: > -- > 2.11.0 >
diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S index 13793e85d8..0959c4f044 100644 --- a/xen/arch/arm/arm32/head.S +++ b/xen/arch/arm/arm32/head.S @@ -205,6 +205,16 @@ secondary_switched: b launch ENDPROC(init_secondary) +/* + * Check if the CPU supports virtualization extensions and has been booted + * in Hypervisor mode. + * + * This function will never return when the CPU doesn't support + * virtualization extensions or is booted in another mode than + * Hypervisor mode. + * + * Clobbers r0 - r3 + */ check_cpu_mode: /* Check that this CPU has Hyp mode */ mrc CP32(r0, ID_PFR1) @@ -219,15 +229,12 @@ check_cpu_mode: mrs r0, cpsr and r0, r0, #0x1f /* Mode is in the low 5 bits of CPSR */ teq r0, #0x1a /* Hyp Mode? */ - beq hyp + moveq pc, lr /* Yes, return */ /* OK, we're boned. */ PRINT("- Xen must be entered in NS Hyp mode -\r\n") PRINT("- Please update the bootloader -\r\n") b fail - -hyp: PRINT("- Xen starting in Hyp mode -\r\n") - mov pc, lr ENDPROC(check_cpu_mode) zero_bss:
A branch in the success case can be avoided by inverting the branch condition. At the same time, remove a pointless comment as Xen can only run at Hypervisor Mode. Lastly, document the behavior and the main registers usage within the function. Signed-off-by: Julien Grall <julien.grall@arm.com> --- Changes in v2: - Patch added --- xen/arch/arm/arm32/head.S | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)