On Thu, Feb 01, 2018 at 11:46:46AM +0000, Marc Zyngier wrote:
> PSCI 1.0 can be trivially implemented by having PSCI 0.2 and
> the FEATURES call. Of, and returning 1.0 as the PSCI version.

Of?  (Oh ?)

> 
> We happily ignore everything else, as it is optional.

nit: Might be worth mentioning that there are other changes between v0.2
but they are clarifications or relaxations and therefore don't require
additional changes.

Reviewed-by: Christoffer Dall <christoffer.d...@linaro.org>

> 
> Signed-off-by: Marc Zyngier <marc.zyng...@arm.com>
> ---
>  include/kvm/arm_psci.h |  1 +
>  virt/kvm/arm/psci.c    | 43 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 44 insertions(+)
> 
> diff --git a/include/kvm/arm_psci.h b/include/kvm/arm_psci.h
> index 5659343580a3..5446435457c2 100644
> --- a/include/kvm/arm_psci.h
> +++ b/include/kvm/arm_psci.h
> @@ -22,6 +22,7 @@
>  
>  #define KVM_ARM_PSCI_0_1     PSCI_VERSION(0, 1)
>  #define KVM_ARM_PSCI_0_2     PSCI_VERSION(0, 2)
> +#define KVM_ARM_PSCI_1_0     PSCI_VERSION(1, 0)
>  
>  int kvm_psci_version(struct kvm_vcpu *vcpu);
>  int kvm_psci_call(struct kvm_vcpu *vcpu);
> diff --git a/virt/kvm/arm/psci.c b/virt/kvm/arm/psci.c
> index c41553d35110..291874cff85e 100644
> --- a/virt/kvm/arm/psci.c
> +++ b/virt/kvm/arm/psci.c
> @@ -313,6 +313,47 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
>       return ret;
>  }
>  
> +static int kvm_psci_1_0_call(struct kvm_vcpu *vcpu)
> +{
> +     u32 psci_fn = smccc_get_function(vcpu);
> +     u32 feature;
> +     unsigned long val;
> +     int ret = 1;
> +
> +     switch(psci_fn) {
> +     case PSCI_0_2_FN_PSCI_VERSION:
> +             val = KVM_ARM_PSCI_1_0;
> +             break;
> +     case PSCI_1_0_FN_PSCI_FEATURES:
> +             feature = smccc_get_arg1(vcpu);
> +             switch(feature) {
> +             case PSCI_0_2_FN_PSCI_VERSION:
> +             case PSCI_0_2_FN_CPU_SUSPEND:
> +             case PSCI_0_2_FN64_CPU_SUSPEND:
> +             case PSCI_0_2_FN_CPU_OFF:
> +             case PSCI_0_2_FN_CPU_ON:
> +             case PSCI_0_2_FN64_CPU_ON:
> +             case PSCI_0_2_FN_AFFINITY_INFO:
> +             case PSCI_0_2_FN64_AFFINITY_INFO:
> +             case PSCI_0_2_FN_MIGRATE_INFO_TYPE:
> +             case PSCI_0_2_FN_SYSTEM_OFF:
> +             case PSCI_0_2_FN_SYSTEM_RESET:
> +             case PSCI_1_0_FN_PSCI_FEATURES:
> +                     val = 0;
> +                     break;
> +             default:
> +                     val = PSCI_RET_NOT_SUPPORTED;
> +                     break;
> +             }
> +             break;
> +     default:
> +             return kvm_psci_0_2_call(vcpu);
> +     }
> +
> +     smccc_set_retval(vcpu, val, 0, 0, 0);
> +     return ret;
> +}
> +
>  static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
>  {
>       struct kvm *kvm = vcpu->kvm;
> @@ -355,6 +396,8 @@ static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
>  int kvm_psci_call(struct kvm_vcpu *vcpu)
>  {
>       switch (kvm_psci_version(vcpu)) {
> +     case KVM_ARM_PSCI_1_0:
> +             return kvm_psci_1_0_call(vcpu);
>       case KVM_ARM_PSCI_0_2:
>               return kvm_psci_0_2_call(vcpu);
>       case KVM_ARM_PSCI_0_1:
> -- 
> 2.14.2
> 
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to