1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00

KVM: arm64: Bump guest PSCI version to 1.1

Expose PSCI version v1.1 to the guest by default. The only difference
for now is that an updated version number is reported by PSCI_VERSION.

Cc: Marc Zyngier <maz@kernel.org>
Cc: James Morse <james.morse@arm.com>
Cc: Alexandru Elisei <alexandru.elisei@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20220221153524.15397-2-will@kernel.org
This commit is contained in:
Will Deacon 2022-02-21 15:35:22 +00:00 committed by Marc Zyngier
parent dfd42facf1
commit 512865d83f
2 changed files with 11 additions and 4 deletions

View file

@ -305,16 +305,19 @@ out:
return ret; return ret;
} }
static int kvm_psci_1_0_call(struct kvm_vcpu *vcpu) static int kvm_psci_1_x_call(struct kvm_vcpu *vcpu, u32 minor)
{ {
u32 psci_fn = smccc_get_function(vcpu); u32 psci_fn = smccc_get_function(vcpu);
u32 feature; u32 feature;
unsigned long val; unsigned long val;
int ret = 1; int ret = 1;
if (minor > 1)
return -EINVAL;
switch(psci_fn) { switch(psci_fn) {
case PSCI_0_2_FN_PSCI_VERSION: case PSCI_0_2_FN_PSCI_VERSION:
val = KVM_ARM_PSCI_1_0; val = minor == 0 ? KVM_ARM_PSCI_1_0 : KVM_ARM_PSCI_1_1;
break; break;
case PSCI_1_0_FN_PSCI_FEATURES: case PSCI_1_0_FN_PSCI_FEATURES:
feature = smccc_get_arg1(vcpu); feature = smccc_get_arg1(vcpu);
@ -393,8 +396,10 @@ static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
int kvm_psci_call(struct kvm_vcpu *vcpu) int kvm_psci_call(struct kvm_vcpu *vcpu)
{ {
switch (kvm_psci_version(vcpu, vcpu->kvm)) { switch (kvm_psci_version(vcpu, vcpu->kvm)) {
case KVM_ARM_PSCI_1_1:
return kvm_psci_1_x_call(vcpu, 1);
case KVM_ARM_PSCI_1_0: case KVM_ARM_PSCI_1_0:
return kvm_psci_1_0_call(vcpu); return kvm_psci_1_x_call(vcpu, 0);
case KVM_ARM_PSCI_0_2: case KVM_ARM_PSCI_0_2:
return kvm_psci_0_2_call(vcpu); return kvm_psci_0_2_call(vcpu);
case KVM_ARM_PSCI_0_1: case KVM_ARM_PSCI_0_1:
@ -511,6 +516,7 @@ int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
return 0; return 0;
case KVM_ARM_PSCI_0_2: case KVM_ARM_PSCI_0_2:
case KVM_ARM_PSCI_1_0: case KVM_ARM_PSCI_1_0:
case KVM_ARM_PSCI_1_1:
if (!wants_02) if (!wants_02)
return -EINVAL; return -EINVAL;
vcpu->kvm->arch.psci_version = val; vcpu->kvm->arch.psci_version = val;

View file

@ -13,8 +13,9 @@
#define KVM_ARM_PSCI_0_1 PSCI_VERSION(0, 1) #define KVM_ARM_PSCI_0_1 PSCI_VERSION(0, 1)
#define KVM_ARM_PSCI_0_2 PSCI_VERSION(0, 2) #define KVM_ARM_PSCI_0_2 PSCI_VERSION(0, 2)
#define KVM_ARM_PSCI_1_0 PSCI_VERSION(1, 0) #define KVM_ARM_PSCI_1_0 PSCI_VERSION(1, 0)
#define KVM_ARM_PSCI_1_1 PSCI_VERSION(1, 1)
#define KVM_ARM_PSCI_LATEST KVM_ARM_PSCI_1_0 #define KVM_ARM_PSCI_LATEST KVM_ARM_PSCI_1_1
/* /*
* We need the KVM pointer independently from the vcpu as we can call * We need the KVM pointer independently from the vcpu as we can call