1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 /* 4 * Copyright (c) 2021, Microsoft Corporation. 5 * Pasha Tatashin <pasha.tatashin@soleen.com> 6 */ 7 8 #include <linux/linkage.h> 9 #include <asm/assembler.h> 10 #include <asm/kvm_asm.h> 11 12 .macro invalid_vector label 13 SYM_CODE_START_LOCAL(\label) 14 .align 7 15 b \label 16 SYM_CODE_END(\label) 17 .endm 18 19 .macro el1_sync_vector 20 SYM_CODE_START_LOCAL(el1_sync) 21 .align 7 22 cmp x0, #HVC_SET_VECTORS /* Called from hibernate */ 23 b.ne 1f 24 msr vbar_el2, x1 25 mov x0, xzr 26 eret 27 1: cmp x0, #HVC_SOFT_RESTART /* Called from kexec */ 28 b.ne 2f 29 mov x0, x2 30 mov x2, x4 31 mov x4, x1 32 mov x1, x3 33 br x4 34 2: /* Unexpected argument, set an error */ 35 mov_q x0, HVC_STUB_ERR 36 eret 37 SYM_CODE_END(el1_sync) 38 .endm 39 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 45 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 50 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 55 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 60 .align 11 61 SYM_INNER_LABEL(__trans_pgd_stub_vectors_end, SYM_L_LOCAL) 62 SYM_CODE_END(trans_pgd_stub_vectors) 63 64 # Check the trans_pgd_stub_vectors didn't overflow 65 .org . - (__trans_pgd_stub_vectors_end - trans_pgd_stub_vectors) + SZ_2K
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.