|
@@ -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
|
|
ENDPROC(__hyp_stub_install_secondary)
|
|
ENDPROC(__hyp_stub_install_secondary)
|
|
|
|
|
|
__hyp_stub_do_trap:
|
|
__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
|
|
__ERET
|
|
ENDPROC(__hyp_stub_do_trap)
|
|
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)
|