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

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
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/virt.h> #include <asm/virt.h>
#define HVC_GET_VECTORS 0
#define HVC_SET_VECTORS 1
#ifndef ZIMAGE #ifndef ZIMAGE
/* /*
* For the kernel proper, we need to find out the CPU boot mode long after * 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 ...@@ -202,9 +205,19 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE
ENDPROC(__hyp_stub_install_secondary) ENDPROC(__hyp_stub_install_secondary)
__hyp_stub_do_trap: __hyp_stub_do_trap:
cmp r0, #-1 teq r0, #HVC_GET_VECTORS
mrceq p15, 4, r0, c12, c0, 0 @ get HVBAR bne 1f
mcrne p15, 4, r0, c12, c0, 0 @ set HVBAR 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 __ERET
ENDPROC(__hyp_stub_do_trap) ENDPROC(__hyp_stub_do_trap)
...@@ -231,10 +244,14 @@ ENDPROC(__hyp_stub_do_trap) ...@@ -231,10 +244,14 @@ ENDPROC(__hyp_stub_do_trap)
* initialisation entry point. * initialisation entry point.
*/ */
ENTRY(__hyp_get_vectors) ENTRY(__hyp_get_vectors)
mov r0, #-1 mov r0, #HVC_GET_VECTORS
__HVC(0)
ret lr
ENDPROC(__hyp_get_vectors) ENDPROC(__hyp_get_vectors)
@ fall through
ENTRY(__hyp_set_vectors) ENTRY(__hyp_set_vectors)
mov r1, r0
mov r0, #HVC_SET_VECTORS
__HVC(0) __HVC(0)
ret lr ret lr
ENDPROC(__hyp_set_vectors) ENDPROC(__hyp_set_vectors)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment