1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2021, Microsoft Corporation.
- * Pasha Tatashin <[email protected]>
- */
- #include <linux/linkage.h>
- #include <asm/assembler.h>
- #include <asm/kvm_asm.h>
- .macro invalid_vector label
- SYM_CODE_START_LOCAL(\label)
- .align 7
- b \label
- SYM_CODE_END(\label)
- .endm
- .macro el1_sync_vector
- SYM_CODE_START_LOCAL(el1_sync)
- .align 7
- cmp x0, #HVC_SET_VECTORS /* Called from hibernate */
- b.ne 1f
- msr vbar_el2, x1
- mov x0, xzr
- eret
- 1: cmp x0, #HVC_SOFT_RESTART /* Called from kexec */
- b.ne 2f
- mov x0, x2
- mov x2, x4
- mov x4, x1
- mov x1, x3
- br x4
- 2: /* Unexpected argument, set an error */
- mov_q x0, HVC_STUB_ERR
- eret
- SYM_CODE_END(el1_sync)
- .endm
- SYM_CODE_START(trans_pgd_stub_vectors)
- invalid_vector hyp_stub_el2t_sync_invalid // Synchronous EL2t
- invalid_vector hyp_stub_el2t_irq_invalid // IRQ EL2t
- invalid_vector hyp_stub_el2t_fiq_invalid // FIQ EL2t
- invalid_vector hyp_stub_el2t_error_invalid // Error EL2t
- invalid_vector hyp_stub_el2h_sync_invalid // Synchronous EL2h
- invalid_vector hyp_stub_el2h_irq_invalid // IRQ EL2h
- invalid_vector hyp_stub_el2h_fiq_invalid // FIQ EL2h
- invalid_vector hyp_stub_el2h_error_invalid // Error EL2h
- el1_sync_vector // Synchronous 64-bit EL1
- invalid_vector hyp_stub_el1_irq_invalid // IRQ 64-bit EL1
- invalid_vector hyp_stub_el1_fiq_invalid // FIQ 64-bit EL1
- invalid_vector hyp_stub_el1_error_invalid // Error 64-bit EL1
- invalid_vector hyp_stub_32b_el1_sync_invalid // Synchronous 32-bit EL1
- invalid_vector hyp_stub_32b_el1_irq_invalid // IRQ 32-bit EL1
- invalid_vector hyp_stub_32b_el1_fiq_invalid // FIQ 32-bit EL1
- invalid_vector hyp_stub_32b_el1_error_invalid // Error 32-bit EL1
- .align 11
- SYM_INNER_LABEL(__trans_pgd_stub_vectors_end, SYM_L_LOCAL)
- SYM_CODE_END(trans_pgd_stub_vectors)
- # Check the trans_pgd_stub_vectors didn't overflow
- .org . - (__trans_pgd_stub_vectors_end - trans_pgd_stub_vectors) + SZ_2K
|