1 /* SPDX-License-Identifier: GPL-2.0-only */
4 * Copyright (c) 2021, Microsoft Corporation.
5 * Pasha Tatashin <pasha.tatashin@soleen.com>
8 #include <linux/linkage.h>
9 #include <asm/assembler.h>
10 #include <asm/kvm_asm.h>
12 .macro invalid_vector label
13 SYM_CODE_START_LOCAL(\label)
19 .macro el1_sync_vector
20 SYM_CODE_START_LOCAL(el1_sync)
22 cmp x0, #HVC_SET_VECTORS /* Called from hibernate */
27 1: cmp x0, #HVC_SOFT_RESTART /* Called from kexec */
34 2: /* Unexpected argument, set an error */
35 mov_q x0, HVC_STUB_ERR
37 SYM_CODE_END(el1_sync)
40 SYM_CODE_START(trans_pgd_stub_vectors)
41 invalid_vector hyp_stub_el2t_sync_invalid // Synchronous EL2t
42 invalid_vector hyp_stub_el2t_irq_invalid // IRQ EL2t
43 invalid_vector hyp_stub_el2t_fiq_invalid // FIQ EL2t
44 invalid_vector hyp_stub_el2t_error_invalid // Error EL2t
46 invalid_vector hyp_stub_el2h_sync_invalid // Synchronous EL2h
47 invalid_vector hyp_stub_el2h_irq_invalid // IRQ EL2h
48 invalid_vector hyp_stub_el2h_fiq_invalid // FIQ EL2h
49 invalid_vector hyp_stub_el2h_error_invalid // Error EL2h
51 el1_sync_vector // Synchronous 64-bit EL1
52 invalid_vector hyp_stub_el1_irq_invalid // IRQ 64-bit EL1
53 invalid_vector hyp_stub_el1_fiq_invalid // FIQ 64-bit EL1
54 invalid_vector hyp_stub_el1_error_invalid // Error 64-bit EL1
56 invalid_vector hyp_stub_32b_el1_sync_invalid // Synchronous 32-bit EL1
57 invalid_vector hyp_stub_32b_el1_irq_invalid // IRQ 32-bit EL1
58 invalid_vector hyp_stub_32b_el1_fiq_invalid // FIQ 32-bit EL1
59 invalid_vector hyp_stub_32b_el1_error_invalid // Error 32-bit EL1
61 SYM_INNER_LABEL(__trans_pgd_stub_vectors_end, SYM_L_LOCAL)
62 SYM_CODE_END(trans_pgd_stub_vectors)
64 # Check the trans_pgd_stub_vectors didn't overflow
65 .org . - (__trans_pgd_stub_vectors_end - trans_pgd_stub_vectors) + SZ_2K