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 735d9ac1a5a2..a1e960943515 100644 --- a/arch/arm64/include/asm/kvm_sdei.h +++ b/arch/arm64/include/asm/kvm_sdei.h @@ -62,6 +62,9 @@ struct kvm_sdei_vcpu { struct kvm_sdei_event_context ctxt; }; +/* Returned as vendor through SDEI_VERSION hypercall */ +#define KVM_SDEI_VENDOR ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_2 + /* APIs */ int kvm_sdei_call(struct kvm_vcpu *vcpu); int kvm_sdei_inject_event(struct kvm_vcpu *vcpu, diff --git a/arch/arm64/kvm/sdei.c b/arch/arm64/kvm/sdei.c index d295f84f6940..f95b9bcce13c 100644 --- a/arch/arm64/kvm/sdei.c +++ b/arch/arm64/kvm/sdei.c @@ -13,6 +13,14 @@ #include <kvm/arm_hypercalls.h> #include <asm/kvm_sdei.h> +static unsigned long sdei_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 event_register(struct kvm_vcpu *vcpu) { struct kvm_sdei_vcpu *vsdei = vcpu->arch.sdei; @@ -308,6 +316,9 @@ int kvm_sdei_call(struct kvm_vcpu *vcpu) } switch (func) { + case SDEI_1_0_FN_SDEI_VERSION: + ret = sdei_version(vcpu); + break; case SDEI_1_0_FN_SDEI_EVENT_REGISTER: ret = event_register(vcpu); break; -- 2.23.0 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm