xref: /linux/arch/arm64/mm/trans_pgd-asm.S (revision 788bfdd97434982b6d575062581e8e72eea755af)
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