Merge tag 'io_uring-5.15-2021-09-11' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / arch / arm64 / include / asm / kvm_mte.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2020-2021 ARM Ltd.
4  */
5 #ifndef __ASM_KVM_MTE_H
6 #define __ASM_KVM_MTE_H
7
8 #ifdef __ASSEMBLY__
9
10 #include <asm/sysreg.h>
11
12 #ifdef CONFIG_ARM64_MTE
13
14 .macro mte_switch_to_guest g_ctxt, h_ctxt, reg1
15 alternative_if_not ARM64_MTE
16         b       .L__skip_switch\@
17 alternative_else_nop_endif
18         mrs     \reg1, hcr_el2
19         tbz     \reg1, #(HCR_ATA_SHIFT), .L__skip_switch\@
20
21         mrs_s   \reg1, SYS_RGSR_EL1
22         str     \reg1, [\h_ctxt, #CPU_RGSR_EL1]
23         mrs_s   \reg1, SYS_GCR_EL1
24         str     \reg1, [\h_ctxt, #CPU_GCR_EL1]
25
26         ldr     \reg1, [\g_ctxt, #CPU_RGSR_EL1]
27         msr_s   SYS_RGSR_EL1, \reg1
28         ldr     \reg1, [\g_ctxt, #CPU_GCR_EL1]
29         msr_s   SYS_GCR_EL1, \reg1
30
31 .L__skip_switch\@:
32 .endm
33
34 .macro mte_switch_to_hyp g_ctxt, h_ctxt, reg1
35 alternative_if_not ARM64_MTE
36         b       .L__skip_switch\@
37 alternative_else_nop_endif
38         mrs     \reg1, hcr_el2
39         tbz     \reg1, #(HCR_ATA_SHIFT), .L__skip_switch\@
40
41         mrs_s   \reg1, SYS_RGSR_EL1
42         str     \reg1, [\g_ctxt, #CPU_RGSR_EL1]
43         mrs_s   \reg1, SYS_GCR_EL1
44         str     \reg1, [\g_ctxt, #CPU_GCR_EL1]
45
46         ldr     \reg1, [\h_ctxt, #CPU_RGSR_EL1]
47         msr_s   SYS_RGSR_EL1, \reg1
48         ldr     \reg1, [\h_ctxt, #CPU_GCR_EL1]
49         msr_s   SYS_GCR_EL1, \reg1
50
51         isb
52
53 .L__skip_switch\@:
54 .endm
55
56 #else /* !CONFIG_ARM64_MTE */
57
58 .macro mte_switch_to_guest g_ctxt, h_ctxt, reg1
59 .endm
60
61 .macro mte_switch_to_hyp g_ctxt, h_ctxt, reg1
62 .endm
63
64 #endif /* CONFIG_ARM64_MTE */
65 #endif /* __ASSEMBLY__ */
66 #endif /* __ASM_KVM_MTE_H */