This supports SDEI_VERSION hypercall by returning v1.1, which is the specification version we're following. The vendor is set to one of the values returned from ARM_SMCCC_VENDOR_HYP_CALL_UID hypercall. Signed-off-by: Gavin Shan <gshan@xxxxxxxxxx> --- arch/arm64/include/asm/kvm_sdei.h | 3 +++ arch/arm64/kvm/sdei.c | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/arch/arm64/include/asm/kvm_sdei.h b/arch/arm64/include/asm/kvm_sdei.h index f946d4ebdc14..32dfd5595f15 100644 --- a/arch/arm64/include/asm/kvm_sdei.h +++ b/arch/arm64/include/asm/kvm_sdei.h @@ -71,6 +71,9 @@ struct kvm_sdei_vcpu { struct kvm_sdei_vcpu_context context[SDEI_EVENT_PRIORITY_CRITICAL + 1]; }; +/* Returned as vendor through SDEI_VERSION hypercall */ +#define KVM_SDEI_VENDOR ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_2 + /* * According to SDEI specification (v1.1), the event number spans 32-bits * and the lower 24-bits are used as the (real) event number. I don't diff --git a/arch/arm64/kvm/sdei.c b/arch/arm64/kvm/sdei.c index ab0b7b5e3191..5d9b49a4355c 100644 --- a/arch/arm64/kvm/sdei.c +++ b/arch/arm64/kvm/sdei.c @@ -117,6 +117,14 @@ static int inject_event(struct kvm_vcpu *vcpu, return 0; } +static unsigned long hypercall_version(struct kvm_vcpu *vcpu) +{ + /* v1.1 and vendor ID */ + return (1UL << SDEI_VERSION_MAJOR_SHIFT) | + (1UL << SDEI_VERSION_MINOR_SHIFT) | + KVM_SDEI_VENDOR; +} + static unsigned long hypercall_register(struct kvm_vcpu *vcpu) { struct kvm_sdei_vcpu *vsdei = vcpu->arch.sdei; @@ -565,6 +573,9 @@ int kvm_sdei_call(struct kvm_vcpu *vcpu) } switch (func) { + case SDEI_1_0_FN_SDEI_VERSION: + ret = hypercall_version(vcpu); + break; case SDEI_1_0_FN_SDEI_EVENT_REGISTER: ret = hypercall_register(vcpu); break; -- 2.23.0 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm