Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1342337b authored by Russell King's avatar Russell King Committed by Christoffer Dall
Browse files

ARM: hyp-stub: improve ABI



Improve the hyp-stub ABI to allow it to do more than just get/set the
vectors.  We follow the example in ARM64, where r0 is used as an opcode
with the other registers as an argument.

Tested-by: default avatarKeerthy <j-keerthy@ti.com>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarChristoffer Dall <cdall@linaro.org>
parent 506c372a
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -22,6 +22,9 @@
#include <asm/assembler.h>
#include <asm/virt.h>

#define HVC_GET_VECTORS 0
#define HVC_SET_VECTORS 1

#ifndef ZIMAGE
/*
 * For the kernel proper, we need to find out the CPU boot mode long after
@@ -202,9 +205,19 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE
ENDPROC(__hyp_stub_install_secondary)

__hyp_stub_do_trap:
	cmp	r0, #-1
	mrceq	p15, 4, r0, c12, c0, 0	@ get HVBAR
	mcrne	p15, 4, r0, c12, c0, 0	@ set HVBAR
	teq	r0, #HVC_GET_VECTORS
	bne	1f
	mrc	p15, 4, r0, c12, c0, 0	@ get HVBAR
	b	__hyp_stub_exit

1:	teq	r0, #HVC_SET_VECTORS
	bne	1f
	mcr	p15, 4, r1, c12, c0, 0	@ set HVBAR
	b	__hyp_stub_exit

1:	mov	r0, #-1

__hyp_stub_exit:
	__ERET
ENDPROC(__hyp_stub_do_trap)

@@ -231,10 +244,14 @@ ENDPROC(__hyp_stub_do_trap)
 * initialisation entry point.
 */
ENTRY(__hyp_get_vectors)
	mov	r0, #-1
	mov	r0, #HVC_GET_VECTORS
	__HVC(0)
	ret	lr
ENDPROC(__hyp_get_vectors)
	@ fall through

ENTRY(__hyp_set_vectors)
	mov	r1, r0
	mov	r0, #HVC_SET_VECTORS
	__HVC(0)
	ret	lr
ENDPROC(__hyp_set_vectors)