lkml.org 
[lkml]   [2022]   [Jan]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 14/21] arm64: move !VHE work to end of el2_setup
    Date
    From: Mark Rutland <mark.rutland@arm.com>

    commit d61c97a7773d0848b4bf5c4697855c7ce117362c upstream.

    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>
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/arm64/kernel/head.S | 37 +++++++++++++++++--------------------
    1 file changed, 17 insertions(+), 20 deletions(-)

    --- a/arch/arm64/kernel/head.S
    +++ b/arch/arm64/kernel/head.S
    @@ -553,26 +553,6 @@ set_hcr:
    msr vpidr_el2, x0
    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
    msr hstr_el2, xzr // Disable CP15 traps to EL2
    #endif
    @@ -598,6 +578,23 @@ CPU_LE( movk x0, #0x30d0, lsl #16 ) // C
    ret

    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 */
    adrp x0, __hyp_stub_vectors
    add x0, x0, #:lo12:__hyp_stub_vectors

    \
     
     \ /
      Last update: 2022-01-10 08:27    [W:5.404 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site