mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-09 02:46:15 +00:00
arm64: move !VHE work to end of el2_setup
We only need to initialise sctlr_el1 if we're installing an EL2 stub, so we may as well defer this until we're doing so. Similarly, we can defer intialising CPTR_EL2 until then, as we do not access any trapped functionality as part of el2_setup. This patch modified el2_setup accordingly, allowing us to remove a branch and simplify the code flow. Acked-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Mark Rutland <mark.rutland@arm.com> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
3ad47d055a
commit
d61c97a777
@ -611,26 +611,6 @@ set_hcr:
|
|||||||
msr vpidr_el2, x0
|
msr vpidr_el2, x0
|
||||||
msr vmpidr_el2, x1
|
msr vmpidr_el2, x1
|
||||||
|
|
||||||
/*
|
|
||||||
* When VHE is not in use, early init of EL2 and EL1 needs to be
|
|
||||||
* done here.
|
|
||||||
* When VHE _is_ in use, EL1 will not be used in the host and
|
|
||||||
* requires no configuration, and all non-hyp-specific EL2 setup
|
|
||||||
* will be done via the _EL1 system register aliases in __cpu_setup.
|
|
||||||
*/
|
|
||||||
cbnz x2, 1f
|
|
||||||
|
|
||||||
/* sctlr_el1 */
|
|
||||||
mov x0, #0x0800 // Set/clear RES{1,0} bits
|
|
||||||
CPU_BE( movk x0, #0x33d0, lsl #16 ) // Set EE and E0E on BE systems
|
|
||||||
CPU_LE( movk x0, #0x30d0, lsl #16 ) // Clear EE and E0E on LE systems
|
|
||||||
msr sctlr_el1, x0
|
|
||||||
|
|
||||||
/* Coprocessor traps. */
|
|
||||||
mov x0, #0x33ff
|
|
||||||
msr cptr_el2, x0 // Disable copro. traps to EL2
|
|
||||||
1:
|
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
msr hstr_el2, xzr // Disable CP15 traps to EL2
|
msr hstr_el2, xzr // Disable CP15 traps to EL2
|
||||||
#endif
|
#endif
|
||||||
@ -667,6 +647,23 @@ CPU_LE( movk x0, #0x30d0, lsl #16 ) // Clear EE and E0E on LE systems
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
install_el2_stub:
|
install_el2_stub:
|
||||||
|
/*
|
||||||
|
* When VHE is not in use, early init of EL2 and EL1 needs to be
|
||||||
|
* done here.
|
||||||
|
* When VHE _is_ in use, EL1 will not be used in the host and
|
||||||
|
* requires no configuration, and all non-hyp-specific EL2 setup
|
||||||
|
* will be done via the _EL1 system register aliases in __cpu_setup.
|
||||||
|
*/
|
||||||
|
/* sctlr_el1 */
|
||||||
|
mov x0, #0x0800 // Set/clear RES{1,0} bits
|
||||||
|
CPU_BE( movk x0, #0x33d0, lsl #16 ) // Set EE and E0E on BE systems
|
||||||
|
CPU_LE( movk x0, #0x30d0, lsl #16 ) // Clear EE and E0E on LE systems
|
||||||
|
msr sctlr_el1, x0
|
||||||
|
|
||||||
|
/* Coprocessor traps. */
|
||||||
|
mov x0, #0x33ff
|
||||||
|
msr cptr_el2, x0 // Disable copro. traps to EL2
|
||||||
|
|
||||||
/* Hypervisor stub */
|
/* Hypervisor stub */
|
||||||
adr_l x0, __hyp_stub_vectors
|
adr_l x0, __hyp_stub_vectors
|
||||||
msr vbar_el2, x0
|
msr vbar_el2, x0
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user