diff --git a/arch/arm64/include/asm/kvm_tmi.h b/arch/arm64/include/asm/kvm_tmi.h index 11eacf161a02b6ab5951c96ef79c50707dfa0eff..a8818aa013dddac8695591d38ac24147450e6029 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 fecd0ee1a96080aa7d8ed7d307bd3bbe1da0cc5d..db043f8e9bd71013d27d1e120812084c6489c368 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 cb2ee7e4fe7694a68a03008f21d1c89e78983180..2ede72570578dac5700e45a434c95c153e0e88e4 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))