Received: by 10.223.176.5 with SMTP id f5csp2640692wra; Thu, 1 Feb 2018 03:49:08 -0800 (PST) X-Google-Smtp-Source: AH8x224mmiWE0v6HyJilOcpGrLdYIK2/aHY5CWw8PoeA2z3fXlu3D3S3bbh22WTSCRhFxiD6sszq X-Received: by 10.99.127.24 with SMTP id a24mr28748618pgd.225.1517485748003; Thu, 01 Feb 2018 03:49:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517485747; cv=none; d=google.com; s=arc-20160816; b=X3/b5mguxmkErT6+AP1E+BVjQ8/Ch1S8ljLnTuC/Z6w5zKuc9f7T7kCBTJfI2Qm4VE 1d3yh+ZyTeqLSxToWa9FFjDkxttTGdmbVGrne0py63YUXnL6kVa62vmZN1DEQmYe6Upw nBIltA0nmL1uYZHDt52QPz5tc9esRVlnsNP89DI77kBIMwPIjJpxj1XBpFBszAQor4Bo liKbTAGDBs326Y+5WqYtXGjlYk7C+PnCvl6mvVeUUblip3KIYXOUKenppej5OcLUuqq3 pCdY0xeIWGD0f8dwMDzCuq/9a4lgwbsZCslcCMZLP0UQ8dLFvSer4L5NH1pMZjloGJmf BdBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=O40jkAtvPfg3Tkr7qsBJkknqwigsN9oOLX6ytDjR1bw=; b=gqtXH5IXWFmWtPUHtAAblaP2718xvs1Bu5oSQDdBvN6J+8vNQFGNOXK8Yr8rZToqBc Kz4TDErJoRJQacRkv7U0F/bEvC2EgoS/swEo2LhbasYv60y80z8hHQ/JivDGjkfj98pq zZhire+BAtRXm2Q87yuAFcY4R0V0hKij8/VQ7MlmuY4XOuKfgR2+3kxpniVMSehB+XzO RiPZV47yvSlxOadDxoqodlVw60+5FcefefQeYr2rqtPMQzDgqnAvXBGPgyERiyAMTXHR T834GDFd7PnzDcfmALLsG8G+FQKfaDUmpywkkhp5YzWpD+GVs7DDrOpeU1Oi5VNDjKLM kpXQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a25si1369646pfl.324.2018.02.01.03.48.53; Thu, 01 Feb 2018 03:49:07 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752496AbeBALsG (ORCPT + 99 others); Thu, 1 Feb 2018 06:48:06 -0500 Received: from foss.arm.com ([217.140.101.70]:48416 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752257AbeBALr6 (ORCPT ); Thu, 1 Feb 2018 06:47:58 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E6D431596; Thu, 1 Feb 2018 03:47:57 -0800 (PST) Received: from approximate.cambridge.arm.com (approximate.cambridge.arm.com [10.1.207.62]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2A2CB3F25C; Thu, 1 Feb 2018 03:47:55 -0800 (PST) From: Marc Zyngier To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu Cc: Catalin Marinas , Will Deacon , Peter Maydell , Christoffer Dall , Lorenzo Pieralisi , Mark Rutland , Robin Murphy , Ard Biesheuvel , Andrew Jones , Hanjun Guo , Jayachandran C , Jon Masters , Russell King - ARM Linux Subject: [PATCH v3 07/18] arm/arm64: KVM: Implement PSCI 1.0 support Date: Thu, 1 Feb 2018 11:46:46 +0000 Message-Id: <20180201114657.7323-8-marc.zyngier@arm.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180201114657.7323-1-marc.zyngier@arm.com> References: <20180201114657.7323-1-marc.zyngier@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. We happily ignore everything else, as it is optional. Signed-off-by: Marc Zyngier --- 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