linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC v2 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2
@ 2020-01-31 19:08 Elliot Berman
  2020-01-31 19:08 ` [RFC v2 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Elliot Berman @ 2020-01-31 19:08 UTC (permalink / raw)
  To: Mark Rutland, Lorenzo Pieralisi, Sudeep Holla
  Cc: Elliot Berman, Bjorn Andersson, Trilok Soni, Prasad Sodagudi,
	David Collins, linux-arm-kernel, linux-arm-msm, linux-kernel

This patch adds support for vendor-specific SYSTEM_RESET2 to support
Qualcomm target use cases of rebooting into a RAM dump download mode.

This patch series applies on top of [1].

[1]: https://lore.kernel.org/patchwork/cover/1185759/

Elliot Berman (3):
  dt: psci: Add arm,psci-sys-reset2-type property
  firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type
  arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type

 Documentation/devicetree/bindings/arm/psci.yaml |  5 +++++
 arch/arm64/boot/dts/qcom/sm8250.dtsi            |  1 +
 drivers/firmware/psci/psci.c                    | 21 +++++++++++++++++----
 include/linux/psci.h                            |  1 +
 include/uapi/linux/psci.h                       |  2 ++
 5 files changed, 26 insertions(+), 4 deletions(-)

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [RFC v2 1/3] dt: psci: Add arm,psci-sys-reset2-type property
  2020-01-31 19:08 [RFC v2 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
@ 2020-01-31 19:08 ` Elliot Berman
  2020-01-31 19:08 ` [RFC v2 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type Elliot Berman
  2020-01-31 19:08 ` [RFC v2 3/3] arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type Elliot Berman
  2 siblings, 0 replies; 4+ messages in thread
From: Elliot Berman @ 2020-01-31 19:08 UTC (permalink / raw)
  To: Mark Rutland, Lorenzo Pieralisi, Sudeep Holla
  Cc: Elliot Berman, Bjorn Andersson, Trilok Soni, Prasad Sodagudi,
	David Collins, linux-arm-kernel, linux-arm-msm, linux-kernel

Some implementors of PSCI may relax the requirements of the PSCI
architectural warm reset. In order to comply with PSCI specification, a
different reset_type value must be used. The alternate PSCI
SYSTEM_RESET2 may be used in all warm/soft reboot scenarios, replacing
the architectural warm reset.

Signed-off-by: Elliot Berman <eberman@codeaurora.org>
---
 Documentation/devicetree/bindings/arm/psci.yaml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/psci.yaml b/Documentation/devicetree/bindings/arm/psci.yaml
index 8ef8542..a790e5a 100644
--- a/Documentation/devicetree/bindings/arm/psci.yaml
+++ b/Documentation/devicetree/bindings/arm/psci.yaml
@@ -102,6 +102,11 @@ properties:
       [1] Kernel documentation - ARM idle states bindings
         Documentation/devicetree/bindings/arm/idle-states.txt
 
+  arm,psci-sys-reset2-type:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: |
+        reset_type parameter value to use during a warm or soft reboot.
+
   "#power-domain-cells":
     description:
       The number of cells in a PM domain specifier as per binding in [3].
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [RFC v2 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type
  2020-01-31 19:08 [RFC v2 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
  2020-01-31 19:08 ` [RFC v2 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
@ 2020-01-31 19:08 ` Elliot Berman
  2020-01-31 19:08 ` [RFC v2 3/3] arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type Elliot Berman
  2 siblings, 0 replies; 4+ messages in thread
From: Elliot Berman @ 2020-01-31 19:08 UTC (permalink / raw)
  To: Mark Rutland, Lorenzo Pieralisi, Sudeep Holla
  Cc: Elliot Berman, Bjorn Andersson, Trilok Soni, Prasad Sodagudi,
	David Collins, linux-arm-kernel, linux-arm-msm, linux-kernel

Some implementors of PSCI may relax the requirements of the PSCI
architectural warm reset. In order to comply with PSCI specification, a
different reset_type value must be used. The alternate PSCI
SYSTEM_RESET2 may be used in all warm/soft reboot scenarios, replacing
the architectural warm reset.

Signed-off-by: Elliot Berman <eberman@codeaurora.org>
---
 drivers/firmware/psci/psci.c | 21 +++++++++++++++++----
 include/linux/psci.h         |  1 +
 include/uapi/linux/psci.h    |  2 ++
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index 2937d44..75e6a38 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -55,6 +55,7 @@ bool psci_tos_resident_on(int cpu)
 struct psci_operations psci_ops = {
 	.conduit = SMCCC_CONDUIT_NONE,
 	.smccc_version = SMCCC_VERSION_1_0,
+	.sys_reset2_reset_type = PSCI_1_1_SYSTEM_RESET2_SYSTEM_WARM_RESET,
 };
 
 enum arm_smccc_conduit arm_smccc_1_1_get_conduit(void)
@@ -272,11 +273,10 @@ static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd)
 	if ((reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) &&
 	    psci_system_reset2_supported) {
 		/*
-		 * reset_type[31] = 0 (architectural)
-		 * reset_type[30:0] = 0 (SYSTEM_WARM_RESET)
 		 * cookie = 0 (ignored by the implementation)
 		 */
-		invoke_psci_fn(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2), 0, 0, 0);
+		invoke_psci_fn(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2),
+			       psci_ops.sys_reset2_reset_type, 0, 0);
 	} else {
 		invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0);
 	}
@@ -493,6 +493,7 @@ typedef int (*psci_initcall_t)(const struct device_node *);
 static int __init psci_0_2_init(struct device_node *np)
 {
 	int err;
+	u32 param;
 
 	err = get_set_conduit_method(np);
 	if (err)
@@ -505,7 +506,19 @@ static int __init psci_0_2_init(struct device_node *np)
 	 * can be carried out according to the specific version reported
 	 * by firmware
 	 */
-	return psci_probe();
+	err = psci_probe();
+	if (err)
+		return err;
+
+	if (psci_system_reset2_supported &&
+	    !of_property_read_u32(np, "arm,psci-sys-reset2-type", &param)) {
+		if ((s32)param > 0)
+			pr_warn("%08x is an invalid architectural reset type.\n",
+				param);
+		psci_ops.sys_reset2_reset_type = param;
+	}
+
+	return 0;
 }
 
 /*
diff --git a/include/linux/psci.h b/include/linux/psci.h
index a67712b..1959a80 100644
--- a/include/linux/psci.h
+++ b/include/linux/psci.h
@@ -37,6 +37,7 @@ struct psci_operations {
 	int (*migrate_info_type)(void);
 	enum arm_smccc_conduit conduit;
 	enum smccc_version smccc_version;
+	u32 sys_reset2_reset_type;
 };
 
 extern struct psci_operations psci_ops;
diff --git a/include/uapi/linux/psci.h b/include/uapi/linux/psci.h
index 2fcad1d..d786ec8 100644
--- a/include/uapi/linux/psci.h
+++ b/include/uapi/linux/psci.h
@@ -55,6 +55,8 @@
 #define PSCI_1_0_FN64_SYSTEM_SUSPEND		PSCI_0_2_FN64(14)
 #define PSCI_1_1_FN64_SYSTEM_RESET2		PSCI_0_2_FN64(18)
 
+#define PSCI_1_1_SYSTEM_RESET2_SYSTEM_WARM_RESET	0
+
 /* PSCI v0.2 power state encoding for CPU_SUSPEND function */
 #define PSCI_0_2_POWER_STATE_ID_MASK		0xffff
 #define PSCI_0_2_POWER_STATE_ID_SHIFT		0
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [RFC v2 3/3] arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type
  2020-01-31 19:08 [RFC v2 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
  2020-01-31 19:08 ` [RFC v2 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
  2020-01-31 19:08 ` [RFC v2 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type Elliot Berman
@ 2020-01-31 19:08 ` Elliot Berman
  2 siblings, 0 replies; 4+ messages in thread
From: Elliot Berman @ 2020-01-31 19:08 UTC (permalink / raw)
  To: Mark Rutland, Lorenzo Pieralisi, Sudeep Holla
  Cc: Elliot Berman, Bjorn Andersson, Trilok Soni, Prasad Sodagudi,
	David Collins, linux-arm-kernel, linux-arm-msm, linux-kernel

Qualcomm Technologies, Inc. SoCs do not guarantee that an architectural
warm reset boots back into Linux kernel. For instance, if download mode
or reboot reason cookies are set, the SoC would do a warm reset into an
alternate exception level (e.g. a mode to collect RAM dumps) or
application at EL1 (e.g. fastboot mode). Thus, Qualcomm Technologies,
Inc. SoCs support a vendor-specific warm reset type that can be used in
all instances of warm/soft reboots.

Signed-off-by: Elliot Berman <eberman@codeaurora.org>
---
 arch/arm64/boot/dts/qcom/sm8250.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/qcom/sm8250.dtsi b/arch/arm64/boot/dts/qcom/sm8250.dtsi
index 76c0fcd..bbaeee9 100644
--- a/arch/arm64/boot/dts/qcom/sm8250.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8250.dtsi
@@ -162,6 +162,7 @@
 	psci {
 		compatible = "arm,psci-1.0";
 		method = "smc";
+		arm,psci-sys-reset2-type = <0x80000000>;
 	};
 
 	reserved_memory: reserved-memory {
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-01-31 19:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-31 19:08 [RFC v2 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
2020-01-31 19:08 ` [RFC v2 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
2020-01-31 19:08 ` [RFC v2 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type Elliot Berman
2020-01-31 19:08 ` [RFC v2 3/3] arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type Elliot Berman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).