xref: /openbmc/linux/arch/arm64/mm/trans_pgd-asm.S (revision 788bfdd9)
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:	/* Unexpected argument, set an error */
28	mov_q	x0, HVC_STUB_ERR
29	eret
30SYM_CODE_END(el1_sync)
31.endm
32
33SYM_CODE_START(trans_pgd_stub_vectors)
34	invalid_vector	hyp_stub_el2t_sync_invalid	// Synchronous EL2t
35	invalid_vector	hyp_stub_el2t_irq_invalid	// IRQ EL2t
36	invalid_vector	hyp_stub_el2t_fiq_invalid	// FIQ EL2t
37	invalid_vector	hyp_stub_el2t_error_invalid	// Error EL2t
38
39	invalid_vector	hyp_stub_el2h_sync_invalid	// Synchronous EL2h
40	invalid_vector	hyp_stub_el2h_irq_invalid	// IRQ EL2h
41	invalid_vector	hyp_stub_el2h_fiq_invalid	// FIQ EL2h
42	invalid_vector	hyp_stub_el2h_error_invalid	// Error EL2h
43
44	el1_sync_vector					// Synchronous 64-bit EL1
45	invalid_vector	hyp_stub_el1_irq_invalid	// IRQ 64-bit EL1
46	invalid_vector	hyp_stub_el1_fiq_invalid	// FIQ 64-bit EL1
47	invalid_vector	hyp_stub_el1_error_invalid	// Error 64-bit EL1
48
49	invalid_vector	hyp_stub_32b_el1_sync_invalid	// Synchronous 32-bit EL1
50	invalid_vector	hyp_stub_32b_el1_irq_invalid	// IRQ 32-bit EL1
51	invalid_vector	hyp_stub_32b_el1_fiq_invalid	// FIQ 32-bit EL1
52	invalid_vector	hyp_stub_32b_el1_error_invalid	// Error 32-bit EL1
53	.align 11
54SYM_INNER_LABEL(__trans_pgd_stub_vectors_end, SYM_L_LOCAL)
55SYM_CODE_END(trans_pgd_stub_vectors)
56
57# Check the trans_pgd_stub_vectors didn't overflow
58.org . - (__trans_pgd_stub_vectors_end - trans_pgd_stub_vectors) + SZ_2K
59