1*788bfdd9SPasha Tatashin/* SPDX-License-Identifier: GPL-2.0-only */ 2*788bfdd9SPasha Tatashin 3*788bfdd9SPasha Tatashin/* 4*788bfdd9SPasha Tatashin * Copyright (c) 2021, Microsoft Corporation. 5*788bfdd9SPasha Tatashin * Pasha Tatashin <pasha.tatashin@soleen.com> 6*788bfdd9SPasha Tatashin */ 7*788bfdd9SPasha Tatashin 8*788bfdd9SPasha Tatashin#include <linux/linkage.h> 9*788bfdd9SPasha Tatashin#include <asm/assembler.h> 10*788bfdd9SPasha Tatashin#include <asm/kvm_asm.h> 11*788bfdd9SPasha Tatashin 12*788bfdd9SPasha Tatashin.macro invalid_vector label 13*788bfdd9SPasha TatashinSYM_CODE_START_LOCAL(\label) 14*788bfdd9SPasha Tatashin .align 7 15*788bfdd9SPasha Tatashin b \label 16*788bfdd9SPasha TatashinSYM_CODE_END(\label) 17*788bfdd9SPasha Tatashin.endm 18*788bfdd9SPasha Tatashin 19*788bfdd9SPasha Tatashin.macro el1_sync_vector 20*788bfdd9SPasha TatashinSYM_CODE_START_LOCAL(el1_sync) 21*788bfdd9SPasha Tatashin .align 7 22*788bfdd9SPasha Tatashin cmp x0, #HVC_SET_VECTORS /* Called from hibernate */ 23*788bfdd9SPasha Tatashin b.ne 1f 24*788bfdd9SPasha Tatashin msr vbar_el2, x1 25*788bfdd9SPasha Tatashin mov x0, xzr 26*788bfdd9SPasha Tatashin eret 27*788bfdd9SPasha Tatashin1: /* Unexpected argument, set an error */ 28*788bfdd9SPasha Tatashin mov_q x0, HVC_STUB_ERR 29*788bfdd9SPasha Tatashin eret 30*788bfdd9SPasha TatashinSYM_CODE_END(el1_sync) 31*788bfdd9SPasha Tatashin.endm 32*788bfdd9SPasha Tatashin 33*788bfdd9SPasha TatashinSYM_CODE_START(trans_pgd_stub_vectors) 34*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2t_sync_invalid // Synchronous EL2t 35*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2t_irq_invalid // IRQ EL2t 36*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2t_fiq_invalid // FIQ EL2t 37*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2t_error_invalid // Error EL2t 38*788bfdd9SPasha Tatashin 39*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2h_sync_invalid // Synchronous EL2h 40*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2h_irq_invalid // IRQ EL2h 41*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2h_fiq_invalid // FIQ EL2h 42*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el2h_error_invalid // Error EL2h 43*788bfdd9SPasha Tatashin 44*788bfdd9SPasha Tatashin el1_sync_vector // Synchronous 64-bit EL1 45*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el1_irq_invalid // IRQ 64-bit EL1 46*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el1_fiq_invalid // FIQ 64-bit EL1 47*788bfdd9SPasha Tatashin invalid_vector hyp_stub_el1_error_invalid // Error 64-bit EL1 48*788bfdd9SPasha Tatashin 49*788bfdd9SPasha Tatashin invalid_vector hyp_stub_32b_el1_sync_invalid // Synchronous 32-bit EL1 50*788bfdd9SPasha Tatashin invalid_vector hyp_stub_32b_el1_irq_invalid // IRQ 32-bit EL1 51*788bfdd9SPasha Tatashin invalid_vector hyp_stub_32b_el1_fiq_invalid // FIQ 32-bit EL1 52*788bfdd9SPasha Tatashin invalid_vector hyp_stub_32b_el1_error_invalid // Error 32-bit EL1 53*788bfdd9SPasha Tatashin .align 11 54*788bfdd9SPasha TatashinSYM_INNER_LABEL(__trans_pgd_stub_vectors_end, SYM_L_LOCAL) 55*788bfdd9SPasha TatashinSYM_CODE_END(trans_pgd_stub_vectors) 56*788bfdd9SPasha Tatashin 57*788bfdd9SPasha Tatashin# Check the trans_pgd_stub_vectors didn't overflow 58*788bfdd9SPasha Tatashin.org . - (__trans_pgd_stub_vectors_end - trans_pgd_stub_vectors) + SZ_2K 59