lkml.org 
[lkml]   [2020]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 12/24] kvm: arm64: Extract __do_hyp_init into a helper function
    Date
    In preparation for adding a CPU entry point in nVHE hyp code, extract
    most of __do_hyp_init hypervisor initialization code into a common
    helper function. This will be invoked by the entry point to install KVM
    on the newly booted CPU.

    Signed-off-by: David Brazdil <dbrazdil@google.com>
    ---
    arch/arm64/kvm/hyp/nvhe/hyp-init.S | 39 +++++++++++++++++++++---------
    1 file changed, 28 insertions(+), 11 deletions(-)

    diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-init.S b/arch/arm64/kvm/hyp/nvhe/hyp-init.S
    index 6f3ac5d428ec..1697d25756e9 100644
    --- a/arch/arm64/kvm/hyp/nvhe/hyp-init.S
    +++ b/arch/arm64/kvm/hyp/nvhe/hyp-init.S
    @@ -68,16 +68,35 @@ __do_hyp_init:
    mov x0, #SMCCC_RET_NOT_SUPPORTED
    eret

    -1: ldr x0, [x1, #NVHE_INIT_TPIDR_EL2]
    - msr tpidr_el2, x0
    +1: mov x0, x1
    + mov x4, lr
    + bl ___kvm_hyp_init
    + mov lr, x4

    - ldr x0, [x1, #NVHE_INIT_STACK_PTR]
    - mov sp, x0
    + /* Hello, World! */
    + mov x0, #SMCCC_RET_SUCCESS
    + eret
    +SYM_CODE_END(__kvm_hyp_init)
    +
    +/*
    + * Initialize the hypervisor in EL2.
    + *
    + * Only uses x0..x3 so as to not clobber callee-saved SMCCC registers
    + * and leave x4 for the caller.
    + *
    + * x0: struct kvm_nvhe_init_params PA
    + */
    +SYM_CODE_START(___kvm_hyp_init)
    + ldr x1, [x0, #NVHE_INIT_TPIDR_EL2]
    + msr tpidr_el2, x1
    +
    + ldr x1, [x0, #NVHE_INIT_STACK_PTR]
    + mov sp, x1

    - ldr x0, [x1, #NVHE_INIT_VECTOR_PTR]
    - msr vbar_el2, x0
    + ldr x1, [x0, #NVHE_INIT_VECTOR_PTR]
    + msr vbar_el2, x1

    - ldr x1, [x1, #NVHE_INIT_PGD_PTR]
    + ldr x1, [x0, #NVHE_INIT_PGD_PTR]
    phys_to_ttbr x0, x1
    alternative_if ARM64_HAS_CNP
    orr x0, x0, #TTBR_CNP_BIT
    @@ -137,10 +156,8 @@ alternative_else_nop_endif
    msr sctlr_el2, x0
    isb

    - /* Hello, World! */
    - mov x0, #SMCCC_RET_SUCCESS
    - eret
    -SYM_CODE_END(__kvm_hyp_init)
    + ret
    +SYM_CODE_END(___kvm_hyp_init)

    SYM_CODE_START(__kvm_handle_stub_hvc)
    cmp x0, #HVC_SOFT_RESTART
    --
    2.29.2.222.g5d2a92d10f8-goog
    \
     
     \ /
      Last update: 2020-11-09 12:37    [W:4.133 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site