Skip to content

Commit

Permalink
ARM: hyp-stub: improve ABI
Browse files Browse the repository at this point in the history
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: Keerthy <j-keerthy@ti.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <cdall@linaro.org>
  • Loading branch information
Russell King authored and Christoffer Dall committed Apr 9, 2017
1 parent 506c372 commit 1342337
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions arch/arm/kernel/hyp-stub.S
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand All @@ -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)
Expand Down

0 comments on commit 1342337

Please sign in to comment.