#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
 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)
 
  * 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)