From patchwork Fri Jul 12 05:28:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 168897 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp395876ilk; Thu, 11 Jul 2019 22:30:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqzX+MBKBPvNAFOCNtW2K4D1SNIC81KbQsnkEJQILvEwXGSt55LFuCBaHblhpc1Q9/wCNivV X-Received: by 2002:a17:90a:350c:: with SMTP id q12mr9451102pjb.46.1562909445867; Thu, 11 Jul 2019 22:30:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562909445; cv=none; d=google.com; s=arc-20160816; b=sB9oWJDqroqGIeEEORNHxI8s9/wddhlm5ru28ttPElhBYGYyDwEpyGHqL+afxzSz1K VIBSwcsxJRQooU+KejknE+KUENh7d1/aMS5GhS3rSeBYC0ISvCwLGflIsWKV+uGwnBa4 C2v2xXYcG9YZRLke0SzlCaafcWdWZcOmsoeOm3ghPEgEY/NsVmJrS0TnWWLh3+FzlSdo ugmszkgtSiv6O3kCXe1L0RA8Yz9PnBbdI1T1brfVWGGm41yeU2JwSj4ofPpxZuBwAUER 0KM9w2JBvKpxmJhweovD8It+t2ZIZcEfTS+CNkxmhDMgXPCdUAqNKzrCdrzCVRZ4S9vE 48VQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=8FgYZ0lVoh76yEFRGdkiTuXxRHgDjc15a9Db0UAG0RM=; b=Tueqf+ngCpVBY8beOJ0itlRIuD/qQYU1aU22op8RtNQzgc6KLeueTNd9LuEsnuIb7f dj8BP3IvWVvrPMXz9t+zV/P0xzd0K+bdUGmBH/LUkmGiSRScnX/ZCZE6UOeo0AEtNvz7 ipeM3hEEuiwQ+0Keq0wPly4NG+e3excP5qD8eWjhs9D0ALgYHVA97h2OzzvuccjK/kxB Qzc2bmksAVZAOhd2XMOeNMePzwNxSzPjJRG3AOd91h5DNBSw8NZI95nujyBwHQSjg8ei hCvgOeIH4hyQnw94KXsoWK3lNqCNPmaWJOJw5drJefzUjQVw1KFiDqHWRv356nMRPV/N gy9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=uXGGypMH; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e36si5303191pgm.17.2019.07.11.22.30.44; Thu, 11 Jul 2019 22:30:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=uXGGypMH; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725846AbfGLFao (ORCPT + 13 others); Fri, 12 Jul 2019 01:30:44 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:35724 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725791AbfGLFao (ORCPT ); Fri, 12 Jul 2019 01:30:44 -0400 Received: by mail-pl1-f193.google.com with SMTP id w24so4215733plp.2 for ; Thu, 11 Jul 2019 22:30:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8FgYZ0lVoh76yEFRGdkiTuXxRHgDjc15a9Db0UAG0RM=; b=uXGGypMHVt8OBJK0oz1SIqeyivCTwb+XosVqZO6Z8pfXIWt3o9Wse0MliB8FJK7coj i9zDUx0ssuhIq5bOu1lXzTuwwGoV/cD3u+E+njn76T5BvHXKUm2mKq9DJ9v0NaHXafh1 xwS3cCczzJUArfTjM38b4vB7QivwtkEkDa+Z7k7BJXIjHGE8S1lnPd7GmGCI+/6RfWa2 gV5qZ6dfkwSAF6u5lem0YH7L9RG1d2OKyrWCNhZbDfsBt1q5ZG9zF61cQJhOgEpLSqb7 87zCh43s6vgHb6eZiBjhnREIh4CkzuMShDQt7xfDoKjO7CTAqyP0bKUIyYOzhfk6AVy7 8PKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8FgYZ0lVoh76yEFRGdkiTuXxRHgDjc15a9Db0UAG0RM=; b=gd4SHa+IngRhfA5dAwZXRXhpncKdL+g3vU5MTrTBLiVPByQowLBibXZFfORf4plHwc PbMEil/93JNj+05OkSsd51JnV0YoHBFK+mQ/6W3pm7/2FkssgaIgUfuk0siZUa7w5Kcz vRDS5m7OzQsjsN5yA8Ul7ACENZUvsCUDOPg2dGnjzJUCTn+S5P68KT5RY1K0mtbKCIGO iIh1X5d7DSE3GqES2SjbBXGgdmmVv4UE1VziInNmtf4FAMOcbQL73BRVrqrbolP4KCrd k0AsNxcYBw5Ro9dJnx8BfIKjZN0+tmP6IpY/iZB4KkAXmRC5OV43n/ujK//Z/lSjOO2l LopQ== X-Gm-Message-State: APjAAAUlgMjWYE5GrozAbeTGXZayZaUv1vMZFd3811dE6qHcZgeTF1UG fyt0eYsGW08NShtX4v9+G5WfkLlI6zc= X-Received: by 2002:a17:902:a40c:: with SMTP id p12mr9159340plq.146.1562909443260; Thu, 11 Jul 2019 22:30:43 -0700 (PDT) Received: from localhost ([122.172.28.117]) by smtp.gmail.com with ESMTPSA id n19sm7333448pfa.11.2019.07.11.22.30.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jul 2019 22:30:42 -0700 (PDT) From: Viresh Kumar To: stable@vger.kernel.org, Julien Thierry Cc: Viresh Kumar , linux-arm-kernel@lists.infradead.org, Catalin Marinas , Marc Zyngier , Mark Rutland , Will Deacon , Russell King , Vincent Guittot , mark.brown@arm.com Subject: [PATCH v4.4 V2 38/43] firmware/psci: Expose SMCCC version through psci_ops Date: Fri, 12 Jul 2019 10:58:26 +0530 Message-Id: <420f2392296122b9a375194e74d212422b00d673.1562908075.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.21.0.rc0.269.g1a574e7a288b In-Reply-To: References: MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Marc Zyngier commit e78eef554a912ef6c1e0bbf97619dafbeae3339f upstream. Since PSCI 1.0 allows the SMCCC version to be (indirectly) probed, let's do that at boot time, and expose the version of the calling convention as part of the psci_ops structure. Acked-by: Lorenzo Pieralisi Reviewed-by: Robin Murphy Tested-by: Ard Biesheuvel Signed-off-by: Marc Zyngier Signed-off-by: Catalin Marinas [ v4.4: Included arm-smccc.h ] Signed-off-by: Viresh Kumar --- drivers/firmware/psci.c | 28 ++++++++++++++++++++++++++++ include/linux/psci.h | 6 ++++++ 2 files changed, 34 insertions(+) -- 2.21.0.rc0.269.g1a574e7a288b diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c index 7b2665f6b38d..0809a48e8089 100644 --- a/drivers/firmware/psci.c +++ b/drivers/firmware/psci.c @@ -13,6 +13,7 @@ #define pr_fmt(fmt) "psci: " fmt +#include #include #include #include @@ -56,6 +57,7 @@ bool psci_tos_resident_on(int cpu) struct psci_operations psci_ops = { .conduit = PSCI_CONDUIT_NONE, + .smccc_version = SMCCC_VERSION_1_0, }; typedef unsigned long (psci_fn)(unsigned long, unsigned long, @@ -320,6 +322,31 @@ static void __init psci_init_migrate(void) pr_info("Trusted OS resident on physical CPU 0x%lx\n", cpuid); } +static void __init psci_init_smccc(void) +{ + u32 ver = ARM_SMCCC_VERSION_1_0; + int feature; + + feature = psci_features(ARM_SMCCC_VERSION_FUNC_ID); + + if (feature != PSCI_RET_NOT_SUPPORTED) { + u32 ret; + ret = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0); + if (ret == ARM_SMCCC_VERSION_1_1) { + psci_ops.smccc_version = SMCCC_VERSION_1_1; + ver = ret; + } + } + + /* + * Conveniently, the SMCCC and PSCI versions are encoded the + * same way. No, this isn't accidental. + */ + pr_info("SMC Calling Convention v%d.%d\n", + PSCI_VERSION_MAJOR(ver), PSCI_VERSION_MINOR(ver)); + +} + static void __init psci_0_2_set_functions(void) { pr_info("Using standard PSCI v0.2 function IDs\n"); @@ -368,6 +395,7 @@ static int __init psci_probe(void) psci_init_migrate(); if (PSCI_VERSION_MAJOR(ver) >= 1) { + psci_init_smccc(); psci_init_cpu_suspend(); psci_init_system_suspend(); } diff --git a/include/linux/psci.h b/include/linux/psci.h index e071a1b8ddb5..e5c3277bfd78 100644 --- a/include/linux/psci.h +++ b/include/linux/psci.h @@ -30,6 +30,11 @@ enum psci_conduit { PSCI_CONDUIT_HVC, }; +enum smccc_version { + SMCCC_VERSION_1_0, + SMCCC_VERSION_1_1, +}; + struct psci_operations { u32 (*get_version)(void); int (*cpu_suspend)(u32 state, unsigned long entry_point); @@ -40,6 +45,7 @@ struct psci_operations { unsigned long lowest_affinity_level); int (*migrate_info_type)(void); enum psci_conduit conduit; + enum smccc_version smccc_version; }; extern struct psci_operations psci_ops;