trans_pgd-asm.S (1939B)
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 13SYM_CODE_START_LOCAL(\label) 14 .align 7 15 b \label 16SYM_CODE_END(\label) 17.endm 18 19.macro el1_sync_vector 20SYM_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 271: 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 342: /* Unexpected argument, set an error */ 35 mov_q x0, HVC_STUB_ERR 36 eret 37SYM_CODE_END(el1_sync) 38.endm 39 40SYM_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 61SYM_INNER_LABEL(__trans_pgd_stub_vectors_end, SYM_L_LOCAL) 62SYM_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