]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/arm64/kernel/hyp-stub.S
Merge tag 'davinci-fixes-for-v4.12-p2' of git://git.kernel.org/pub/scm/linux/kernel...
[karo-tx-linux.git] / arch / arm64 / kernel / hyp-stub.S
index d3b5f75e652efce050f8c0c7d5cdef69e0351dfd..e1261fbaa374e02471214664df742cb26c4da1d7 100644 (file)
@@ -55,18 +55,7 @@ ENDPROC(__hyp_stub_vectors)
        .align 11
 
 el1_sync:
-       mrs     x30, esr_el2
-       lsr     x30, x30, #ESR_ELx_EC_SHIFT
-
-       cmp     x30, #ESR_ELx_EC_HVC64
-       b.ne    9f                              // Not an HVC trap
-
-       cmp     x0, #HVC_GET_VECTORS
-       b.ne    1f
-       mrs     x0, vbar_el2
-       b       9f
-
-1:     cmp     x0, #HVC_SET_VECTORS
+       cmp     x0, #HVC_SET_VECTORS
        b.ne    2f
        msr     vbar_el2, x1
        b       9f
@@ -79,10 +68,15 @@ el1_sync:
        mov     x1, x3
        br      x4                              // no return
 
+3:     cmp     x0, #HVC_RESET_VECTORS
+       beq     9f                              // Nothing to reset!
+
        /* Someone called kvm_call_hyp() against the hyp-stub... */
-3:     mov     x0, #ARM_EXCEPTION_HYP_GONE
+       ldr     x0, =HVC_STUB_ERR
+       eret
 
-9:     eret
+9:     mov     x0, xzr
+       eret
 ENDPROC(el1_sync)
 
 .macro invalid_vector  label
@@ -121,19 +115,15 @@ ENDPROC(\label)
  * initialisation entry point.
  */
 
-ENTRY(__hyp_get_vectors)
-       str     lr, [sp, #-16]!
-       mov     x0, #HVC_GET_VECTORS
-       hvc     #0
-       ldr     lr, [sp], #16
-       ret
-ENDPROC(__hyp_get_vectors)
-
 ENTRY(__hyp_set_vectors)
-       str     lr, [sp, #-16]!
        mov     x1, x0
        mov     x0, #HVC_SET_VECTORS
        hvc     #0
-       ldr     lr, [sp], #16
        ret
 ENDPROC(__hyp_set_vectors)
+
+ENTRY(__hyp_reset_vectors)
+       mov     x0, #HVC_RESET_VECTORS
+       hvc     #0
+       ret
+ENDPROC(__hyp_reset_vectors)