[PULL 59/79] ARM: KVM: Implement HVC_SOFT_RESTART in the init code
Christoffer Dall
cdall at linaro.org
Sun Apr 23 13:09:09 EDT 2017
From: Marc Zyngier <marc.zyngier at arm.com>
Another missing stub hypercall is HVC_SOFT_RESTART. It turns out
that it is pretty easy to implement in terms of HVC_RESET_VECTORS
(since it needs to turn the MMU off).
Tested-by: Keerthy <j-keerthy at ti.com>
Acked-by: Russell King <rmk+kernel at armlinux.org.uk>
Acked-by: Catalin Marinas <catalin.marinas at arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
Signed-off-by: Christoffer Dall <cdall at linaro.org>
---
arch/arm/kvm/init.S | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/arch/arm/kvm/init.S b/arch/arm/kvm/init.S
index fb33609..e53360d 100644
--- a/arch/arm/kvm/init.S
+++ b/arch/arm/kvm/init.S
@@ -127,8 +127,22 @@ ENTRY(__kvm_handle_stub_hvc)
mrc p15, 4, r0, c12, c0, 0 @ get HVBAR
b exit
+1: cmp r0, #HVC_SOFT_RESTART
+ bne 1f
+
+ /* The target is expected in r1 */
+ msr ELR_hyp, r1
+ mrs r0, cpsr
+ bic r0, r0, #MODE_MASK
+ orr r0, r0, #HYP_MODE
+THUMB( orr r0, r0, #PSR_T_BIT )
+ msr spsr_cxsf, r0
+ b reset
+
1: cmp r0, #HVC_RESET_VECTORS
bne 1f
+
+reset:
/* We're now in idmap, disable MMU */
mrc p15, 4, r1, c1, c0, 0 @ HSCTLR
ldr r0, =(HSCTLR_M | HSCTLR_A | HSCTLR_C | HSCTLR_I)
--
2.9.0
More information about the linux-arm-kernel
mailing list