From 55c97d35b7f1fbb45d4310332b4713591b1190c0 Mon Sep 17 00:00:00 2001 From: panhengchang Date: Wed, 4 Jun 2025 03:06:41 -0400 Subject: [PATCH] add virtcca capability and kae vf interface virtcca inclusion category: feature bugzilla: https://gitee.com/openeuler/release-management/issues/IBXVC7 -------------------------------- VirtCCA Feature: add virtcca capability and kae vf interface Signed-off-by: panhengchang bugzilla: https://gitee.com/openeuler/release-management/issues/IBXVC7 --- arch/arm64/include/asm/kvm_tmi.h | 4 ++++ arch/arm64/kvm/tmi.c | 10 ++++++++++ arch/arm64/kvm/virtcca_cvm.c | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/arch/arm64/include/asm/kvm_tmi.h b/arch/arm64/include/asm/kvm_tmi.h index 11eacf161a02..a8818aa013dd 100644 --- a/arch/arm64/include/asm/kvm_tmi.h +++ b/arch/arm64/include/asm/kvm_tmi.h @@ -235,6 +235,7 @@ struct tmi_tec_run { #define TMI_FNUM_INF_TEST U(0x270) #define TMI_FNUM_KAE_INIT U(0x273) #define TMI_FNUM_KAE_ENABLE U(0x274) +#define TMI_FNUM_INFO_SHOW U(0x275) #define TMI_FNUM_SMMU_QUEUE_CREATE U(0x277) #define TMI_FNUM_SMMU_QUEUE_WRITE U(0x278) @@ -272,6 +273,7 @@ struct tmi_tec_run { #define TMI_TMM_INF_TEST TMI_FID(SMC_64, TMI_FNUM_INF_TEST) #define TMI_TMM_KAE_INIT TMI_FID(SMC_64, TMI_FNUM_KAE_INIT) #define TMI_TMM_KAE_ENABLE TMI_FID(SMC_64, TMI_FNUM_KAE_ENABLE) +#define TMI_TMM_INFO_SHOW TMI_FID(SMC_64, TMI_FNUM_INFO_SHOW) #define TMI_TMM_SMMU_QUEUE_CREATE TMI_FID(SMC_64, TMI_FNUM_SMMU_QUEUE_CREATE) #define TMI_TMM_SMMU_QUEUE_WRITE TMI_FID(SMC_64, TMI_FNUM_SMMU_QUEUE_WRITE) @@ -415,6 +417,7 @@ u64 tmi_smmu_write(u64 smmu_base, u64 reg_offset, u64 val, u64 bits); u64 tmi_smmu_read(u64 smmu_base, u64 reg_offset, u64 bits); u64 tmi_kae_init(void); u64 tmi_kae_enable(u64 rd, u64 numa_set, u64 is_enable); +u64 tmi_tmm_info_show(u64 option, u64 tmm_info_addr); u64 mmio_va_to_pa(void *addr); int virtcca_io_mem_abort(struct kvm_vcpu *vcpu, unsigned long hva, phys_addr_t fault_ipa); @@ -429,5 +432,6 @@ int kvm_enable_virtcca_cvm(struct kvm *kvm); int kvm_cvm_map_ipa(struct kvm *kvm, phys_addr_t ipa, kvm_pfn_t pfn, unsigned long map_size, enum kvm_pgtable_prot prot, int ret); void virtcca_cvm_set_secure_flag(void *vdev, void *info); +bool is_virtcca_available(void); #endif #endif diff --git a/arch/arm64/kvm/tmi.c b/arch/arm64/kvm/tmi.c index fecd0ee1a960..db043f8e9bd7 100644 --- a/arch/arm64/kvm/tmi.c +++ b/arch/arm64/kvm/tmi.c @@ -377,3 +377,13 @@ u64 tmi_kae_enable(u64 rd, u64 numa_set, u64 is_enable) arm_smccc_1_1_smc(TMI_TMM_KAE_ENABLE, rd, numa_set, is_enable, &res); return res.a1; } + +u64 tmi_tmm_info_show(u64 option, u64 tmm_info_addr) +{ + struct arm_smccc_res res; + + arm_smccc_1_1_smc(TMI_TMM_INFO_SHOW, option, tmm_info_addr, &res); + return res.a1; +} +EXPORT_SYMBOL_GPL(tmi_tmm_info_show); + diff --git a/arch/arm64/kvm/virtcca_cvm.c b/arch/arm64/kvm/virtcca_cvm.c index cb2ee7e4fe76..2ede72570578 100644 --- a/arch/arm64/kvm/virtcca_cvm.c +++ b/arch/arm64/kvm/virtcca_cvm.c @@ -27,6 +27,13 @@ DEFINE_STATIC_KEY_FALSE(virtcca_cvm_is_available); #define UEFI_MAX_SIZE 0x8000000 #define UEFI_DTB_START 0x40000000 #define DTB_MAX_SIZE 0x200000 + +bool is_virtcca_available(void) +{ + return static_key_enabled(&virtcca_cvm_is_available); +} +EXPORT_SYMBOL_GPL(is_virtcca_available); + int kvm_enable_virtcca_cvm(struct kvm *kvm) { if (!static_key_enabled(&virtcca_cvm_is_available)) -- Gitee