Commit 4d5f9c14 authored by Marc Zyngier's avatar Marc Zyngier Committed by Christoffer Dall
Browse files

ARM: KVM: Implement HVC_SOFT_RESTART in the init code



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: default avatarKeerthy <j-keerthy@ti.com>
Acked-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarChristoffer Dall <cdall@linaro.org>
parent a92ce8f6
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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)