162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2020-2021 ARM Ltd. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#ifndef __ASM_KVM_MTE_H 662306a36Sopenharmony_ci#define __ASM_KVM_MTE_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifdef __ASSEMBLY__ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <asm/sysreg.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#ifdef CONFIG_ARM64_MTE 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci.macro mte_switch_to_guest g_ctxt, h_ctxt, reg1 1562306a36Sopenharmony_cialternative_if_not ARM64_MTE 1662306a36Sopenharmony_ci b .L__skip_switch\@ 1762306a36Sopenharmony_cialternative_else_nop_endif 1862306a36Sopenharmony_ci mrs \reg1, hcr_el2 1962306a36Sopenharmony_ci tbz \reg1, #(HCR_ATA_SHIFT), .L__skip_switch\@ 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci mrs_s \reg1, SYS_RGSR_EL1 2262306a36Sopenharmony_ci str \reg1, [\h_ctxt, #CPU_RGSR_EL1] 2362306a36Sopenharmony_ci mrs_s \reg1, SYS_GCR_EL1 2462306a36Sopenharmony_ci str \reg1, [\h_ctxt, #CPU_GCR_EL1] 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci ldr \reg1, [\g_ctxt, #CPU_RGSR_EL1] 2762306a36Sopenharmony_ci msr_s SYS_RGSR_EL1, \reg1 2862306a36Sopenharmony_ci ldr \reg1, [\g_ctxt, #CPU_GCR_EL1] 2962306a36Sopenharmony_ci msr_s SYS_GCR_EL1, \reg1 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci.L__skip_switch\@: 3262306a36Sopenharmony_ci.endm 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci.macro mte_switch_to_hyp g_ctxt, h_ctxt, reg1 3562306a36Sopenharmony_cialternative_if_not ARM64_MTE 3662306a36Sopenharmony_ci b .L__skip_switch\@ 3762306a36Sopenharmony_cialternative_else_nop_endif 3862306a36Sopenharmony_ci mrs \reg1, hcr_el2 3962306a36Sopenharmony_ci tbz \reg1, #(HCR_ATA_SHIFT), .L__skip_switch\@ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci mrs_s \reg1, SYS_RGSR_EL1 4262306a36Sopenharmony_ci str \reg1, [\g_ctxt, #CPU_RGSR_EL1] 4362306a36Sopenharmony_ci mrs_s \reg1, SYS_GCR_EL1 4462306a36Sopenharmony_ci str \reg1, [\g_ctxt, #CPU_GCR_EL1] 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci ldr \reg1, [\h_ctxt, #CPU_RGSR_EL1] 4762306a36Sopenharmony_ci msr_s SYS_RGSR_EL1, \reg1 4862306a36Sopenharmony_ci ldr \reg1, [\h_ctxt, #CPU_GCR_EL1] 4962306a36Sopenharmony_ci msr_s SYS_GCR_EL1, \reg1 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci isb 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci.L__skip_switch\@: 5462306a36Sopenharmony_ci.endm 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#else /* !CONFIG_ARM64_MTE */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci.macro mte_switch_to_guest g_ctxt, h_ctxt, reg1 5962306a36Sopenharmony_ci.endm 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci.macro mte_switch_to_hyp g_ctxt, h_ctxt, reg1 6262306a36Sopenharmony_ci.endm 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci#endif /* CONFIG_ARM64_MTE */ 6562306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 6662306a36Sopenharmony_ci#endif /* __ASM_KVM_MTE_H */ 67