Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/mm/trans_pgd-asm.S
26426 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
3
/*
4
* Copyright (c) 2021, Microsoft Corporation.
5
* Pasha Tatashin <[email protected]>
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
66
67