1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2020-2021 ARM Ltd.
5 #ifndef __ASM_KVM_MTE_H
6 #define __ASM_KVM_MTE_H
10 #include <asm/sysreg.h>
12 #ifdef CONFIG_ARM64_MTE
14 .macro mte_switch_to_guest g_ctxt
, h_ctxt
, reg1
15 alternative_if_not ARM64_MTE
17 alternative_else_nop_endif
19 tbz
\reg
1, #(HCR_ATA_SHIFT), .L__skip_switch\@
21 mrs_s
\reg
1, SYS_RGSR_EL1
22 str
\reg
1, [\h_ctxt
, #CPU_RGSR_EL1]
23 mrs_s
\reg
1, SYS_GCR_EL1
24 str
\reg
1, [\h_ctxt
, #CPU_GCR_EL1]
26 ldr
\reg
1, [\g_ctxt
, #CPU_RGSR_EL1]
27 msr_s SYS_RGSR_EL1
, \reg
1
28 ldr
\reg
1, [\g_ctxt
, #CPU_GCR_EL1]
29 msr_s SYS_GCR_EL1
, \reg
1
34 .macro mte_switch_to_hyp g_ctxt
, h_ctxt
, reg1
35 alternative_if_not ARM64_MTE
37 alternative_else_nop_endif
39 tbz
\reg
1, #(HCR_ATA_SHIFT), .L__skip_switch\@
41 mrs_s
\reg
1, SYS_RGSR_EL1
42 str
\reg
1, [\g_ctxt
, #CPU_RGSR_EL1]
43 mrs_s
\reg
1, SYS_GCR_EL1
44 str
\reg
1, [\g_ctxt
, #CPU_GCR_EL1]
46 ldr
\reg
1, [\h_ctxt
, #CPU_RGSR_EL1]
47 msr_s SYS_RGSR_EL1
, \reg
1
48 ldr
\reg
1, [\h_ctxt
, #CPU_GCR_EL1]
49 msr_s SYS_GCR_EL1
, \reg
1
56 #else /* !CONFIG_ARM64_MTE */
58 .macro mte_switch_to_guest g_ctxt
, h_ctxt
, reg1
61 .macro mte_switch_to_hyp g_ctxt
, h_ctxt
, reg1
64 #endif /* CONFIG_ARM64_MTE */
65 #endif /* __ASSEMBLY__ */
66 #endif /* __ASM_KVM_MTE_H */