2020-04-30 11:52:22

by Sudeep Holla

[permalink] [raw]
Subject: [PATCH 0/5] arm/arm64: smccc: Add ARCH_SOC_ID support

Hi,

This patch series adds support for SMCCCv1.2 ARCH_SOC_ID.
This doesn't add other changes added in SMCCC v1.2 yet. They will
follow these soon along with its first user SPCI/PSA-FF.

This is tested using upstream TF-A + the patch[1] fixing the original
implementation there.

Sudeep Holla (5):
arm/arm64: smccc: Update link to latest SMCCC specification
arm/arm64: smccc: Add the definition for SMCCCv1.2 version/error codes
arm/arm64: smccc: Drop smccc_version enum and use ARM_SMCCC_VERSION_1_x instead
firmware: psci: Add function to fetch SMCCC version
arm/arm64: smccc: Add ARCH_SOC_ID support

--
Regards,
Sudeep

[1] https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/4001

arch/arm64/kernel/paravirt.c | 2 +-
drivers/firmware/psci/Makefile | 2 +-
drivers/firmware/psci/psci.c | 13 ++-
drivers/firmware/psci/soc_id.c | 148 +++++++++++++++++++++++++++++++++
include/linux/arm-smccc.h | 23 ++++-
include/linux/psci.h | 7 +-
6 files changed, 181 insertions(+), 14 deletions(-)
create mode 100644 drivers/firmware/psci/soc_id.c

--
2.17.1


2020-04-30 11:52:54

by Sudeep Holla

[permalink] [raw]
Subject: [PATCH 4/5] firmware: psci: Add function to fetch SMCCC version

For backward compatibility reasons, PSCI maintains SMCCC version as
SMCCC didn't provide ARM_SMCCC_VERSION_FUNC_ID until v1.1

Let us provide accessors to fetch the SMCCC version in PSCI so that
other SMCCC v1.1+ features can use it.

Signed-off-by: Sudeep Holla <[email protected]>
---
drivers/firmware/psci/psci.c | 5 +++++
include/linux/arm-smccc.h | 9 +++++++++
2 files changed, 14 insertions(+)

diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index 6a56d7196697..04426e16fee6 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -65,6 +65,11 @@ enum arm_smccc_conduit arm_smccc_1_1_get_conduit(void)
return psci_ops.conduit;
}

+u32 arm_smccc_get_version(void)
+{
+ return psci_ops.smccc_version;
+}
+
typedef unsigned long (psci_fn)(unsigned long, unsigned long,
unsigned long, unsigned long);
static psci_fn *invoke_psci_fn;
diff --git a/include/linux/arm-smccc.h b/include/linux/arm-smccc.h
index 9d9a2e42e919..d6b0f4acc707 100644
--- a/include/linux/arm-smccc.h
+++ b/include/linux/arm-smccc.h
@@ -98,6 +98,15 @@ enum arm_smccc_conduit {
*/
enum arm_smccc_conduit arm_smccc_1_1_get_conduit(void);

+/**
+ * arm_smccc_get_version()
+ *
+ * Returns the version to be used for SMCCCv1.1 or later.
+ *
+ * When SMCCCv1.1 or above is not present, assumes and returns SMCCCv1.0.
+ */
+u32 arm_smccc_get_version(void);
+
/**
* struct arm_smccc_res - Result from SMC/HVC call
* @a0-a3 result values from registers 0 to 3
--
2.17.1