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 <dbraz...@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 67342cc9930f..d4a71ac34254 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_VECTOR_HYP_VA]
-       msr     vbar_el2, 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_VECTOR_HYP_VA]
+       msr     vbar_el2, x1
 
-       ldr     x0, [x1, #NVHE_INIT_STACK_HYP_VA]
-       mov     sp, x0
+       ldr     x1, [x0, #NVHE_INIT_STACK_HYP_VA]
+       mov     sp, x1
 
-       ldr     x1, [x1, #NVHE_INIT_PGD_PA]
+       ldr     x1, [x0, #NVHE_INIT_PGD_PA]
        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.299.gdc1121823c-goog

Reply via email to