summaryrefslogtreecommitdiffstats
path: root/arch/arm64/kvm/hypercalls.c
diff options
context:
space:
mode:
authorArd Biesheuvel <ardb@kernel.org>2021-01-06 10:34:53 +0000
committerMarc Zyngier <maz@kernel.org>2021-01-25 22:19:31 +0000
commita8e190cdae1bf8e9e490776b8179babc1962bb25 (patch)
treee98b87e0f127a6ab0e1f2c2230aae17a8bef7cfc /arch/arm64/kvm/hypercalls.c
parent67c6bb56b649590a3f59c2a92331aa4e83d4534c (diff)
downloadlinux-a8e190cdae1bf8e9e490776b8179babc1962bb25.tar.gz
linux-a8e190cdae1bf8e9e490776b8179babc1962bb25.tar.bz2
linux-a8e190cdae1bf8e9e490776b8179babc1962bb25.zip
KVM: arm64: Implement the TRNG hypervisor call
Provide a hypervisor implementation of the ARM architected TRNG firmware interface described in ARM spec DEN0098. All function IDs are implemented, including both 32-bit and 64-bit versions of the TRNG_RND service, which is the centerpiece of the API. The API is backed by the kernel's entropy pool only, to avoid guests draining more precious direct entropy sources. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> [Andre: minor fixes, drop arch_get_random() usage] Signed-off-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20210106103453.152275-6-andre.przywara@arm.com
Diffstat (limited to 'arch/arm64/kvm/hypercalls.c')
-rw-r--r--arch/arm64/kvm/hypercalls.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
index 25ea4ecb6449..ead21b98b620 100644
--- a/arch/arm64/kvm/hypercalls.c
+++ b/arch/arm64/kvm/hypercalls.c
@@ -71,6 +71,12 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)
if (gpa != GPA_INVALID)
val = gpa;
break;
+ case ARM_SMCCC_TRNG_VERSION:
+ case ARM_SMCCC_TRNG_FEATURES:
+ case ARM_SMCCC_TRNG_GET_UUID:
+ case ARM_SMCCC_TRNG_RND32:
+ case ARM_SMCCC_TRNG_RND64:
+ return kvm_trng_call(vcpu);
default:
return kvm_psci_call(vcpu);
}