linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2
@ 2020-02-21 23:28 Elliot Berman
  2020-02-21 23:28 ` [PATCH 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Elliot Berman @ 2020-02-21 23:28 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/

Changes since RFC v2:
 - None, tested on SM8250 MTP

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] 6+ messages in thread

* [PATCH 1/3] dt: psci: Add arm,psci-sys-reset2-type property
  2020-02-21 23:28 [PATCH 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
@ 2020-02-21 23:28 ` Elliot Berman
  2020-02-24  9:52   ` Sudeep Holla
  2020-02-21 23:28 ` [PATCH 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type Elliot Berman
  2020-02-21 23:28 ` [PATCH 3/3] arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type Elliot Berman
  2 siblings, 1 reply; 6+ messages in thread
From: Elliot Berman @ 2020-02-21 23:28 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] 6+ messages in thread

* [PATCH 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type
  2020-02-21 23:28 [PATCH 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
  2020-02-21 23:28 ` [PATCH 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
@ 2020-02-21 23:28 ` Elliot Berman
  2020-02-24  9:59   ` Sudeep Holla
  2020-02-21 23:28 ` [PATCH 3/3] arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type Elliot Berman
  2 siblings, 1 reply; 6+ messages in thread
From: Elliot Berman @ 2020-02-21 23:28 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] 6+ messages in thread

* [PATCH 3/3] arm64: dts: qcom: sm8250: Add vendor-specific PSCI system reset2 type
  2020-02-21 23:28 [PATCH 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
  2020-02-21 23:28 ` [PATCH 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
  2020-02-21 23:28 ` [PATCH 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type Elliot Berman
@ 2020-02-21 23:28 ` Elliot Berman
  2 siblings, 0 replies; 6+ messages in thread
From: Elliot Berman @ 2020-02-21 23:28 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 f63df12..b85d234 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] 6+ messages in thread

* Re: [PATCH 1/3] dt: psci: Add arm,psci-sys-reset2-type property
  2020-02-21 23:28 ` [PATCH 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
@ 2020-02-24  9:52   ` Sudeep Holla
  0 siblings, 0 replies; 6+ messages in thread
From: Sudeep Holla @ 2020-02-24  9:52 UTC (permalink / raw)
  To: Elliot Berman
  Cc: Mark Rutland, Lorenzo Pieralisi, Bjorn Andersson, Trilok Soni,
	Prasad Sodagudi, David Collins, linux-arm-kernel, linux-arm-msm,
	linux-kernel

On Fri, Feb 21, 2020 at 03:28:03PM -0800, Elliot Berman wrote:
> 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.
> +

I would rather use param instead of type in the name.

--
Regards,
Sudeep

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

* Re: [PATCH 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type
  2020-02-21 23:28 ` [PATCH 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type Elliot Berman
@ 2020-02-24  9:59   ` Sudeep Holla
  0 siblings, 0 replies; 6+ messages in thread
From: Sudeep Holla @ 2020-02-24  9:59 UTC (permalink / raw)
  To: Elliot Berman
  Cc: Mark Rutland, Lorenzo Pieralisi, Bjorn Andersson, Trilok Soni,
	Prasad Sodagudi, David Collins, linux-arm-msm, linux-kernel

Hi Elliot,

I have dropped the wrong mailing list you had used. The right one is
linux-arm-kernel@lists.infradead.org. I won't add now as it makes no
sense to just have the response there without the patch.

On Fri, Feb 21, 2020 at 03:28:04PM -0800, Elliot Berman wrote:
> 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/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;

Why this needs to be in this header ? Can't it be just local to psci.c ?

-- 
Regards,
Sudeep

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

end of thread, other threads:[~2020-02-24  9:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-21 23:28 [PATCH 0/3] ARM PSCI: Add support for vendor-specific SYSTEM_RESET2 Elliot Berman
2020-02-21 23:28 ` [PATCH 1/3] dt: psci: Add arm,psci-sys-reset2-type property Elliot Berman
2020-02-24  9:52   ` Sudeep Holla
2020-02-21 23:28 ` [PATCH 2/3] firmware: psci: Add support for dt-supplied SYSTEM_RESET2 type Elliot Berman
2020-02-24  9:59   ` Sudeep Holla
2020-02-21 23:28 ` [PATCH 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).