devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree
@ 2023-05-12  9:39 Arnaud Pouliquen
  2023-05-12  9:39 ` [PATCH v3 1/4] dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations Arnaud Pouliquen
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Arnaud Pouliquen @ 2023-05-12  9:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Bjorn Andersson,
	Mathieu Poirier, Alexandre Torgue
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel, Arnaud Pouliquen

Update vs V2[1]:
---------------
- update yaml to remove label in examples
- fix error management for  devm_reset_control_get_optional(dev, "hold_boot")
- rebased on commit ac9a78681b92 ("Linux 6.4-rc1")

[1]https://lore.kernel.org/lkml/20230504094641.870378-1-arnaud.pouliquen@foss.st.com/T/


Description:
-----------
This series updates the stm32_rproc driver and associated DT node to
support device tree configuration with and without SCMI server. 
The impact is mainly on the MCU hold boot management.

Three configurations have to be supported:

1) Configuration without OP-TEE SCMI (legacy): Trusted context not activated
- The MCU reset is controlled through the Linux RCC reset driver.
- The MCU HOLD BOOT is controlled through The RCC sysconf.

2) Configuration with SCMI server: Trusted context activated
- The MCU reset is controlled through the SCMI reset service.
- The MCU HOLD BOOT is no more controlled through a SMC call service but
  through the SCMI reset service.

3) Configuration with OP-TEE SMC call (deprecated): Trusted context activated
- The MCU reset is controlled through the Linux RCC reset driver.
- The MCU HOLD BOOT is controlled through The SMC call.

In consequence this series:
- adds the use of the SCMI reset service to manage the MCU hold boot,
- determines the configuration to use depending on the presence of the
  "reset-names" property
  if ( "reset-names" property contains "hold_boot")
  then use reset_control services
  else use regmap access based on "st,syscfg-holdboot" property.
- set the DT st,syscfg-tz property as deprecated

Arnaud Pouliquen (4):
  dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations
  remoteproc: stm32: Allow hold boot management by the SCMI reset
    controller
  ARM: dts: stm32: Update reset declarations
  ARM: dts: stm32: fix m4_rproc references to use SCMI

 .../bindings/remoteproc/st,stm32-rproc.yaml   | 44 +++++++++--
 arch/arm/boot/dts/stm32mp151.dtsi             |  2 +-
 arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts    |  6 +-
 arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts    |  6 +-
 arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts    |  6 +-
 arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts    |  6 +-
 drivers/remoteproc/stm32_rproc.c              | 76 ++++++++++++++-----
 7 files changed, 111 insertions(+), 35 deletions(-)

-- 
2.25.1


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

* [PATCH v3 1/4] dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations
  2023-05-12  9:39 [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Arnaud Pouliquen
@ 2023-05-12  9:39 ` Arnaud Pouliquen
  2023-05-14  9:40   ` Krzysztof Kozlowski
  2023-05-12  9:39 ` [PATCH v3 2/4] remoteproc: stm32: Allow hold boot management by the SCMI reset controller Arnaud Pouliquen
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Arnaud Pouliquen @ 2023-05-12  9:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Bjorn Andersson,
	Mathieu Poirier, Alexandre Torgue
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel, Arnaud Pouliquen

With the introduction of the SCMI (System Control and Management
Interface), it is now possible to use the SCMI to handle the
hold boot instead of a dedicated SMC call.

As consequence two configurations are possible:
- without SCMI server on OP-TEE:
  use the Linux rcc reset service and use syscon for the MCU hold boot
- With SCMI server on OP-TEE:
  use the SCMI reset service for both the MCU reset and the MCU hold boot.

This patch:
- make optional and deprecated the use of the property st,syscfg-tz
  which was used to check if the trusted Zone was enable to use scm call,
  to manage the hold boot. The reset controller phandle is used instead
  to select the configurations.
- make st,syscfg-holdboot optional
- adds properties check on resets definitions.
- adds an example of the SCMI reset service usage.

Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
---
update vs previous version.
 - Replace explicit (but useless) labels in examples by a comment on holdboot.
---
 .../bindings/remoteproc/st,stm32-rproc.yaml   | 44 ++++++++++++++++---
 1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/remoteproc/st,stm32-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/st,stm32-rproc.yaml
index 959a56f1b6c7..370af61d8f28 100644
--- a/Documentation/devicetree/bindings/remoteproc/st,stm32-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/st,stm32-rproc.yaml
@@ -25,7 +25,14 @@ properties:
     maxItems: 3
 
   resets:
-    maxItems: 1
+    minItems: 1
+    maxItems: 2
+
+  reset-names:
+    items:
+      - const: mcu_rst
+      - const: hold_boot
+    minItems: 1
 
   st,syscfg-holdboot:
     description: remote processor reset hold boot
@@ -37,6 +44,7 @@ properties:
           - description: The field mask of the hold boot
 
   st,syscfg-tz:
+    deprecated: true
     description:
       Reference to the system configuration which holds the RCC trust zone mode
     $ref: /schemas/types.yaml#/definitions/phandle-array
@@ -135,22 +143,48 @@ required:
   - compatible
   - reg
   - resets
-  - st,syscfg-holdboot
-  - st,syscfg-tz
+
+allOf:
+  - if:
+      properties:
+        reset-names:
+          not:
+            contains:
+              const: hold_boot
+    then:
+      required:
+        - st,syscfg-holdboot
+    else:
+      properties:
+        st,syscfg-holdboot: false
 
 additionalProperties: false
 
 examples:
   - |
     #include <dt-bindings/reset/stm32mp1-resets.h>
-    m4_rproc: m4@10000000 {
+    m4@10000000 {
       compatible = "st,stm32mp1-m4";
       reg = <0x10000000 0x40000>,
             <0x30000000 0x40000>,
             <0x38000000 0x10000>;
       resets = <&rcc MCU_R>;
+      reset-names = "mcu_rst";
+      /* Hold boot managed using system config*/
       st,syscfg-holdboot = <&rcc 0x10C 0x1>;
-      st,syscfg-tz = <&rcc 0x000 0x1>;
+      st,syscfg-rsc-tbl = <&tamp 0x144 0xFFFFFFFF>;
+      st,syscfg-m4-state = <&tamp 0x148 0xFFFFFFFF>;
+    };
+  - |
+    #include <dt-bindings/reset/stm32mp1-resets.h>
+    m4@10000000 {
+      compatible = "st,stm32mp1-m4";
+      reg = <0x10000000 0x40000>,
+            <0x30000000 0x40000>,
+            <0x38000000 0x10000>;
+      /* Hold boot managed using SCMI reset controller */
+      resets = <&scmi MCU_R>, <&scmi MCU_HOLD_BOOT_R>;
+      reset-names = "mcu_rst", "hold_boot";
       st,syscfg-rsc-tbl = <&tamp 0x144 0xFFFFFFFF>;
       st,syscfg-m4-state = <&tamp 0x148 0xFFFFFFFF>;
     };
-- 
2.25.1


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

* [PATCH v3 2/4] remoteproc: stm32: Allow hold boot management by the SCMI reset controller
  2023-05-12  9:39 [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Arnaud Pouliquen
  2023-05-12  9:39 ` [PATCH v3 1/4] dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations Arnaud Pouliquen
@ 2023-05-12  9:39 ` Arnaud Pouliquen
  2023-05-12  9:39 ` [PATCH v3 3/4] ARM: dts: stm32: Update reset declarations Arnaud Pouliquen
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Arnaud Pouliquen @ 2023-05-12  9:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Bjorn Andersson,
	Mathieu Poirier, Alexandre Torgue
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel, Arnaud Pouliquen

The hold boot can be managed by the SCMI controller as a reset.
If the "hold_boot" reset is defined in the device tree, use it.
Else use the syscon controller directly to access to the register.
The support of the SMC call is deprecated but kept for legacy support.

Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
---
Updates vs previous version
- Fix error management of the devm_reset_control_get_optional(dev, "hold_boot");

 drivers/remoteproc/stm32_rproc.c | 76 +++++++++++++++++++++++---------
 1 file changed, 55 insertions(+), 21 deletions(-)

diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c
index 8746cbb1f168..d85c2f8a2d6b 100644
--- a/drivers/remoteproc/stm32_rproc.c
+++ b/drivers/remoteproc/stm32_rproc.c
@@ -79,6 +79,7 @@ struct stm32_mbox {
 
 struct stm32_rproc {
 	struct reset_control *rst;
+	struct reset_control *hold_boot_rst;
 	struct stm32_syscon hold_boot;
 	struct stm32_syscon pdds;
 	struct stm32_syscon m4_state;
@@ -88,7 +89,7 @@ struct stm32_rproc {
 	struct stm32_rproc_mem *rmems;
 	struct stm32_mbox mb[MBOX_NB_MBX];
 	struct workqueue_struct *workqueue;
-	bool secured_soc;
+	bool hold_boot_smc;
 	void __iomem *rsc_va;
 };
 
@@ -413,13 +414,28 @@ static int stm32_rproc_set_hold_boot(struct rproc *rproc, bool hold)
 	struct arm_smccc_res smc_res;
 	int val, err;
 
+	/*
+	 * Three ways to manage the hold boot
+	 * - using SCMI: the hold boot is managed as a reset,
+	 * - using Linux(no SCMI): the hold boot is managed as a syscon register
+	 * - using SMC call (deprecated): use SMC reset interface
+	 */
+
 	val = hold ? HOLD_BOOT : RELEASE_BOOT;
 
-	if (IS_ENABLED(CONFIG_HAVE_ARM_SMCCC) && ddata->secured_soc) {
+	if (ddata->hold_boot_rst) {
+		/* Use the SCMI reset controller */
+		if (!hold)
+			err = reset_control_deassert(ddata->hold_boot_rst);
+		else
+			err =  reset_control_assert(ddata->hold_boot_rst);
+	} else if (IS_ENABLED(CONFIG_HAVE_ARM_SMCCC) && ddata->hold_boot_smc) {
+		/* Use the SMC call */
 		arm_smccc_smc(STM32_SMC_RCC, STM32_SMC_REG_WRITE,
 			      hold_boot.reg, val, 0, 0, 0, 0, &smc_res);
 		err = smc_res.a0;
 	} else {
+		/* Use syscon */
 		err = regmap_update_bits(hold_boot.map, hold_boot.reg,
 					 hold_boot.mask, val);
 	}
@@ -717,34 +733,52 @@ static int stm32_rproc_parse_dt(struct platform_device *pdev,
 		dev_info(dev, "wdg irq registered\n");
 	}
 
-	ddata->rst = devm_reset_control_get_by_index(dev, 0);
+	ddata->rst = devm_reset_control_get_optional(dev, "mcu_rst");
+	if (!ddata->rst) {
+		/* Try legacy fallback method: get it by index */
+		ddata->rst = devm_reset_control_get_by_index(dev, 0);
+	}
 	if (IS_ERR(ddata->rst))
 		return dev_err_probe(dev, PTR_ERR(ddata->rst),
 				     "failed to get mcu_reset\n");
 
 	/*
-	 * if platform is secured the hold boot bit must be written by
-	 * smc call and read normally.
-	 * if not secure the hold boot bit could be read/write normally
+	 * Three ways to manage the hold boot
+	 * - using SCMI: the hold boot is managed as a reset
+	 *    The DT "reset-mames" property should be defined with 2 items:
+	 *        reset-names = "mcu_rst", "hold_boot";
+	 * - using SMC call (deprecated): use SMC reset interface
+	 *    The DT "reset-mames" property is optional, "st,syscfg-tz" is required
+	 * - default(no SCMI, no SMC): the hold boot is managed as a syscon register
+	 *    The DT "reset-mames" property is optional, "st,syscfg-holdboot" is required
 	 */
-	err = stm32_rproc_get_syscon(np, "st,syscfg-tz", &tz);
-	if (err) {
-		dev_err(dev, "failed to get tz syscfg\n");
-		return err;
-	}
 
-	err = regmap_read(tz.map, tz.reg, &tzen);
-	if (err) {
-		dev_err(dev, "failed to read tzen\n");
-		return err;
+	ddata->hold_boot_rst = devm_reset_control_get_optional(dev, "hold_boot");
+	if (IS_ERR(ddata->hold_boot_rst))
+		return dev_err_probe(dev, PTR_ERR(ddata->rst),
+				     "failed to get hold_boot reset\n");
+
+	if (!ddata->hold_boot_rst && IS_ENABLED(CONFIG_HAVE_ARM_SMCCC)) {
+		/* Manage the MCU_BOOT using SMC call */
+		err = stm32_rproc_get_syscon(np, "st,syscfg-tz", &tz);
+		if (!err) {
+			err = regmap_read(tz.map, tz.reg, &tzen);
+			if (err) {
+				dev_err(dev, "failed to read tzen\n");
+				return err;
+			}
+			ddata->hold_boot_smc = tzen & tz.mask;
+		}
 	}
-	ddata->secured_soc = tzen & tz.mask;
 
-	err = stm32_rproc_get_syscon(np, "st,syscfg-holdboot",
-				     &ddata->hold_boot);
-	if (err) {
-		dev_err(dev, "failed to get hold boot\n");
-		return err;
+	if (!ddata->hold_boot_rst && !ddata->hold_boot_smc) {
+		/* Default: hold boot manage it through the syscon controller */
+		err = stm32_rproc_get_syscon(np, "st,syscfg-holdboot",
+					     &ddata->hold_boot);
+		if (err) {
+			dev_err(dev, "failed to get hold boot\n");
+			return err;
+		}
 	}
 
 	err = stm32_rproc_get_syscon(np, "st,syscfg-pdds", &ddata->pdds);
-- 
2.25.1


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

* [PATCH v3 3/4] ARM: dts: stm32: Update reset declarations
  2023-05-12  9:39 [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Arnaud Pouliquen
  2023-05-12  9:39 ` [PATCH v3 1/4] dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations Arnaud Pouliquen
  2023-05-12  9:39 ` [PATCH v3 2/4] remoteproc: stm32: Allow hold boot management by the SCMI reset controller Arnaud Pouliquen
@ 2023-05-12  9:39 ` Arnaud Pouliquen
  2023-05-12  9:39 ` [PATCH v3 4/4] ARM: dts: stm32: fix m4_rproc references to use SCMI Arnaud Pouliquen
  2023-05-15 17:27 ` [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Mathieu Poirier
  4 siblings, 0 replies; 10+ messages in thread
From: Arnaud Pouliquen @ 2023-05-12  9:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Bjorn Andersson,
	Mathieu Poirier, Alexandre Torgue
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel, Arnaud Pouliquen

Since the introduction of the SCMI for the management
of the MCU hold boot in OP-TEE, management of the hold boot by SMC call
is deprecated.
- Clean the st,syscfg-tz  which allows to determine if the trust
zone is enable.
- Add reset-names properties to be able to differentiate the MCU reset and
  the MCU HOLD BOOT.

Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
---
 arch/arm/boot/dts/stm32mp151.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/stm32mp151.dtsi b/arch/arm/boot/dts/stm32mp151.dtsi
index 63f4c78fcc1d..56d73d8d5cfe 100644
--- a/arch/arm/boot/dts/stm32mp151.dtsi
+++ b/arch/arm/boot/dts/stm32mp151.dtsi
@@ -1820,8 +1820,8 @@ m4_rproc: m4@10000000 {
 			      <0x30000000 0x40000>,
 			      <0x38000000 0x10000>;
 			resets = <&rcc MCU_R>;
+			reset-names = "mcu_rst";
 			st,syscfg-holdboot = <&rcc 0x10C 0x1>;
-			st,syscfg-tz = <&rcc 0x000 0x1>;
 			st,syscfg-pdds = <&pwr_mcu 0x0 0x1>;
 			st,syscfg-rsc-tbl = <&tamp 0x144 0xFFFFFFFF>;
 			st,syscfg-m4-state = <&tamp 0x148 0xFFFFFFFF>;
-- 
2.25.1


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

* [PATCH v3 4/4] ARM: dts: stm32: fix m4_rproc references to use SCMI
  2023-05-12  9:39 [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Arnaud Pouliquen
                   ` (2 preceding siblings ...)
  2023-05-12  9:39 ` [PATCH v3 3/4] ARM: dts: stm32: Update reset declarations Arnaud Pouliquen
@ 2023-05-12  9:39 ` Arnaud Pouliquen
  2023-05-16 15:35   ` Alexandre TORGUE
  2023-05-15 17:27 ` [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Mathieu Poirier
  4 siblings, 1 reply; 10+ messages in thread
From: Arnaud Pouliquen @ 2023-05-12  9:39 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Bjorn Andersson,
	Mathieu Poirier, Alexandre Torgue
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel, Arnaud Pouliquen

Fixes stm32mp15*-scmi DTS files introduced in [1]:
This patch fixes the node which uses the MCU reset and adds the
missing HOLD_BOOT which is also handled by the SCMI reset service.

This change cannot be applied as a fix on commit [1], the management
of the hold boot impacts also the stm32_rproc driver.

[1] 'commit 5b7e58313a77 ("ARM: dts: stm32: Add SCMI version of STM32 boards (DK1/DK2/ED1/EV1)")'

Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
---
 arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts | 6 ++++--
 arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts | 6 ++++--
 arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts | 6 ++++--
 arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts | 6 ++++--
 4 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts b/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
index e539cc80bef8..134788e64265 100644
--- a/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
+++ b/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
@@ -55,8 +55,10 @@ &mdma1 {
 	resets = <&scmi_reset RST_SCMI_MDMA>;
 };
 
-&mlahb {
-	resets = <&scmi_reset RST_SCMI_MCU>;
+&m4_rproc {
+	resets = <&scmi_reset RST_SCMI_MCU>,
+		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
+	reset-names =  "mcu_rst", "hold_boot";
 };
 
 &rcc {
diff --git a/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts b/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
index 97e4f94b0a24..c42e658debfb 100644
--- a/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
+++ b/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
@@ -61,8 +61,10 @@ &mdma1 {
 	resets = <&scmi_reset RST_SCMI_MDMA>;
 };
 
-&mlahb {
-	resets = <&scmi_reset RST_SCMI_MCU>;
+&m4_rproc {
+	resets = <&scmi_reset RST_SCMI_MCU>,
+		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
+	reset-names =  "mcu_rst", "hold_boot";
 };
 
 &rcc {
diff --git a/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts b/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
index 9cf0a44d2f47..7a56ff2d4185 100644
--- a/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
+++ b/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
@@ -60,8 +60,10 @@ &mdma1 {
 	resets = <&scmi_reset RST_SCMI_MDMA>;
 };
 
-&mlahb {
-	resets = <&scmi_reset RST_SCMI_MCU>;
+&m4_rproc {
+	resets = <&scmi_reset RST_SCMI_MCU>,
+		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
+	reset-names =  "mcu_rst", "hold_boot";
 };
 
 &rcc {
diff --git a/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts b/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
index 3b9dd6f4ccc9..119874dd91e4 100644
--- a/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
+++ b/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
@@ -66,8 +66,10 @@ &mdma1 {
 	resets = <&scmi_reset RST_SCMI_MDMA>;
 };
 
-&mlahb {
-	resets = <&scmi_reset RST_SCMI_MCU>;
+&m4_rproc {
+	resets = <&scmi_reset RST_SCMI_MCU>,
+		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
+	reset-names =  "mcu_rst", "hold_boot";
 };
 
 &rcc {
-- 
2.25.1


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

* Re: [PATCH v3 1/4] dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations
  2023-05-12  9:39 ` [PATCH v3 1/4] dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations Arnaud Pouliquen
@ 2023-05-14  9:40   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 10+ messages in thread
From: Krzysztof Kozlowski @ 2023-05-14  9:40 UTC (permalink / raw)
  To: Arnaud Pouliquen, Rob Herring, Krzysztof Kozlowski,
	Bjorn Andersson, Mathieu Poirier, Alexandre Torgue
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel

On 12/05/2023 11:39, Arnaud Pouliquen wrote:
> With the introduction of the SCMI (System Control and Management
> Interface), it is now possible to use the SCMI to handle the
> hold boot instead of a dedicated SMC call.
> 
> As consequence two configurations are possible:
> - without SCMI server on OP-TEE:
>   use the Linux rcc reset service and use syscon for the MCU hold boot
> - With SCMI server on OP-TEE:
>   use the SCMI reset service for both the MCU reset and the MCU hold boot.
> 

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof


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

* Re: [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree
  2023-05-12  9:39 [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Arnaud Pouliquen
                   ` (3 preceding siblings ...)
  2023-05-12  9:39 ` [PATCH v3 4/4] ARM: dts: stm32: fix m4_rproc references to use SCMI Arnaud Pouliquen
@ 2023-05-15 17:27 ` Mathieu Poirier
  2023-05-16 14:33   ` Alexandre TORGUE
  4 siblings, 1 reply; 10+ messages in thread
From: Mathieu Poirier @ 2023-05-15 17:27 UTC (permalink / raw)
  To: Arnaud Pouliquen
  Cc: Rob Herring, Krzysztof Kozlowski, Bjorn Andersson,
	Alexandre Torgue, devicetree, linux-stm32, linux-arm-kernel,
	linux-remoteproc, linux-kernel

On Fri, May 12, 2023 at 11:39:22AM +0200, Arnaud Pouliquen wrote:
> Update vs V2[1]:
> ---------------
> - update yaml to remove label in examples
> - fix error management for  devm_reset_control_get_optional(dev, "hold_boot")
> - rebased on commit ac9a78681b92 ("Linux 6.4-rc1")
> 
> [1]https://lore.kernel.org/lkml/20230504094641.870378-1-arnaud.pouliquen@foss.st.com/T/
> 
> 
> Description:
> -----------
> This series updates the stm32_rproc driver and associated DT node to
> support device tree configuration with and without SCMI server. 
> The impact is mainly on the MCU hold boot management.
> 
> Three configurations have to be supported:
> 
> 1) Configuration without OP-TEE SCMI (legacy): Trusted context not activated
> - The MCU reset is controlled through the Linux RCC reset driver.
> - The MCU HOLD BOOT is controlled through The RCC sysconf.
> 
> 2) Configuration with SCMI server: Trusted context activated
> - The MCU reset is controlled through the SCMI reset service.
> - The MCU HOLD BOOT is no more controlled through a SMC call service but
>   through the SCMI reset service.
> 
> 3) Configuration with OP-TEE SMC call (deprecated): Trusted context activated
> - The MCU reset is controlled through the Linux RCC reset driver.
> - The MCU HOLD BOOT is controlled through The SMC call.
> 
> In consequence this series:
> - adds the use of the SCMI reset service to manage the MCU hold boot,
> - determines the configuration to use depending on the presence of the
>   "reset-names" property
>   if ( "reset-names" property contains "hold_boot")
>   then use reset_control services
>   else use regmap access based on "st,syscfg-holdboot" property.
> - set the DT st,syscfg-tz property as deprecated
> 
> Arnaud Pouliquen (4):
>   dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations
>   remoteproc: stm32: Allow hold boot management by the SCMI reset
>     controller
>   ARM: dts: stm32: Update reset declarations
>   ARM: dts: stm32: fix m4_rproc references to use SCMI
> 
>  .../bindings/remoteproc/st,stm32-rproc.yaml   | 44 +++++++++--
>  arch/arm/boot/dts/stm32mp151.dtsi             |  2 +-
>  arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts    |  6 +-
>  arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts    |  6 +-
>  arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts    |  6 +-
>  arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts    |  6 +-
>  drivers/remoteproc/stm32_rproc.c              | 76 ++++++++++++++-----
>  7 files changed, 111 insertions(+), 35 deletions(-)
> 

I have applied patch 1 and 2.  Unless Alexandre wants to proceed differently,
patches 3 and 4 should go through his tree.

Thanks,
Mathieu

> -- 
> 2.25.1
> 

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

* Re: [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree
  2023-05-15 17:27 ` [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Mathieu Poirier
@ 2023-05-16 14:33   ` Alexandre TORGUE
  0 siblings, 0 replies; 10+ messages in thread
From: Alexandre TORGUE @ 2023-05-16 14:33 UTC (permalink / raw)
  To: Mathieu Poirier, Arnaud Pouliquen
  Cc: Rob Herring, Krzysztof Kozlowski, Bjorn Andersson, devicetree,
	linux-stm32, linux-arm-kernel, linux-remoteproc, linux-kernel

Hi Mathieu

On 5/15/23 19:27, Mathieu Poirier wrote:
> On Fri, May 12, 2023 at 11:39:22AM +0200, Arnaud Pouliquen wrote:
>> Update vs V2[1]:
>> ---------------
>> - update yaml to remove label in examples
>> - fix error management for  devm_reset_control_get_optional(dev, "hold_boot")
>> - rebased on commit ac9a78681b92 ("Linux 6.4-rc1")
>>
>> [1]https://lore.kernel.org/lkml/20230504094641.870378-1-arnaud.pouliquen@foss.st.com/T/
>>
>>
>> Description:
>> -----------
>> This series updates the stm32_rproc driver and associated DT node to
>> support device tree configuration with and without SCMI server.
>> The impact is mainly on the MCU hold boot management.
>>
>> Three configurations have to be supported:
>>
>> 1) Configuration without OP-TEE SCMI (legacy): Trusted context not activated
>> - The MCU reset is controlled through the Linux RCC reset driver.
>> - The MCU HOLD BOOT is controlled through The RCC sysconf.
>>
>> 2) Configuration with SCMI server: Trusted context activated
>> - The MCU reset is controlled through the SCMI reset service.
>> - The MCU HOLD BOOT is no more controlled through a SMC call service but
>>    through the SCMI reset service.
>>
>> 3) Configuration with OP-TEE SMC call (deprecated): Trusted context activated
>> - The MCU reset is controlled through the Linux RCC reset driver.
>> - The MCU HOLD BOOT is controlled through The SMC call.
>>
>> In consequence this series:
>> - adds the use of the SCMI reset service to manage the MCU hold boot,
>> - determines the configuration to use depending on the presence of the
>>    "reset-names" property
>>    if ( "reset-names" property contains "hold_boot")
>>    then use reset_control services
>>    else use regmap access based on "st,syscfg-holdboot" property.
>> - set the DT st,syscfg-tz property as deprecated
>>
>> Arnaud Pouliquen (4):
>>    dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations
>>    remoteproc: stm32: Allow hold boot management by the SCMI reset
>>      controller
>>    ARM: dts: stm32: Update reset declarations
>>    ARM: dts: stm32: fix m4_rproc references to use SCMI
>>
>>   .../bindings/remoteproc/st,stm32-rproc.yaml   | 44 +++++++++--
>>   arch/arm/boot/dts/stm32mp151.dtsi             |  2 +-
>>   arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts    |  6 +-
>>   arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts    |  6 +-
>>   arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts    |  6 +-
>>   arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts    |  6 +-
>>   drivers/remoteproc/stm32_rproc.c              | 76 ++++++++++++++-----
>>   7 files changed, 111 insertions(+), 35 deletions(-)
>>
> 
> I have applied patch 1 and 2.  Unless Alexandre wants to proceed differently,
> patches 3 and 4 should go through his tree.

I will merge DT patches in STM32 tree.

cheers
Alex

> 
> Thanks,
> Mathieu
> 
>> -- 
>> 2.25.1
>>


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

* Re: [PATCH v3 4/4] ARM: dts: stm32: fix m4_rproc references to use SCMI
  2023-05-12  9:39 ` [PATCH v3 4/4] ARM: dts: stm32: fix m4_rproc references to use SCMI Arnaud Pouliquen
@ 2023-05-16 15:35   ` Alexandre TORGUE
  2023-05-16 17:01     ` Arnaud POULIQUEN
  0 siblings, 1 reply; 10+ messages in thread
From: Alexandre TORGUE @ 2023-05-16 15:35 UTC (permalink / raw)
  To: Arnaud Pouliquen, Rob Herring, Krzysztof Kozlowski,
	Bjorn Andersson, Mathieu Poirier
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel

Hi Arnaud

On 5/12/23 11:39, Arnaud Pouliquen wrote:
> Fixes stm32mp15*-scmi DTS files introduced in [1]:
> This patch fixes the node which uses the MCU reset and adds the
> missing HOLD_BOOT which is also handled by the SCMI reset service.
> 
> This change cannot be applied as a fix on commit [1], the management
> of the hold boot impacts also the stm32_rproc driver.
> 
> [1] 'commit 5b7e58313a77 ("ARM: dts: stm32: Add SCMI version of STM32 boards (DK1/DK2/ED1/EV1)")'
> 
> Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
> ---

I just ran YAML validation on your DT patches and it fails. I added your 
DT patches + dt-binding one (just for the test). I got the following issue:

/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dtb: m4@10000000: 
st,syscfg-holdboot: False schema does not allow [[7, 268, 1]]
	From schema: 
/local/home/frq08678/STLINUX/kernel/my-kernel/stm32/Documentation/devicetree/bindings/remoteproc/st,stm32-rproc.yaml

Do I miss another dt-binding update not present in this series ?

alex

>   arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts | 6 ++++--
>   arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts | 6 ++++--
>   arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts | 6 ++++--
>   arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts | 6 ++++--
>   4 files changed, 16 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts b/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
> index e539cc80bef8..134788e64265 100644
> --- a/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
> +++ b/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
> @@ -55,8 +55,10 @@ &mdma1 {
>   	resets = <&scmi_reset RST_SCMI_MDMA>;
>   };
>   
> -&mlahb {
> -	resets = <&scmi_reset RST_SCMI_MCU>;
> +&m4_rproc {
> +	resets = <&scmi_reset RST_SCMI_MCU>,
> +		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
> +	reset-names =  "mcu_rst", "hold_boot";
>   };
>   
>   &rcc {
> diff --git a/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts b/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
> index 97e4f94b0a24..c42e658debfb 100644
> --- a/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
> +++ b/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
> @@ -61,8 +61,10 @@ &mdma1 {
>   	resets = <&scmi_reset RST_SCMI_MDMA>;
>   };
>   
> -&mlahb {
> -	resets = <&scmi_reset RST_SCMI_MCU>;
> +&m4_rproc {
> +	resets = <&scmi_reset RST_SCMI_MCU>,
> +		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
> +	reset-names =  "mcu_rst", "hold_boot";
>   };
>   
>   &rcc {
> diff --git a/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts b/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
> index 9cf0a44d2f47..7a56ff2d4185 100644
> --- a/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
> +++ b/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
> @@ -60,8 +60,10 @@ &mdma1 {
>   	resets = <&scmi_reset RST_SCMI_MDMA>;
>   };
>   
> -&mlahb {
> -	resets = <&scmi_reset RST_SCMI_MCU>;
> +&m4_rproc {
> +	resets = <&scmi_reset RST_SCMI_MCU>,
> +		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
> +	reset-names =  "mcu_rst", "hold_boot";
>   };
>   
>   &rcc {
> diff --git a/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts b/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
> index 3b9dd6f4ccc9..119874dd91e4 100644
> --- a/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
> +++ b/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
> @@ -66,8 +66,10 @@ &mdma1 {
>   	resets = <&scmi_reset RST_SCMI_MDMA>;
>   };
>   
> -&mlahb {
> -	resets = <&scmi_reset RST_SCMI_MCU>;
> +&m4_rproc {
> +	resets = <&scmi_reset RST_SCMI_MCU>,
> +		 <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
> +	reset-names =  "mcu_rst", "hold_boot";
>   };
>   
>   &rcc {


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

* Re: [PATCH v3 4/4] ARM: dts: stm32: fix m4_rproc references to use SCMI
  2023-05-16 15:35   ` Alexandre TORGUE
@ 2023-05-16 17:01     ` Arnaud POULIQUEN
  0 siblings, 0 replies; 10+ messages in thread
From: Arnaud POULIQUEN @ 2023-05-16 17:01 UTC (permalink / raw)
  To: Alexandre TORGUE, Rob Herring, Krzysztof Kozlowski,
	Bjorn Andersson, Mathieu Poirier
  Cc: devicetree, linux-stm32, linux-arm-kernel, linux-remoteproc,
	linux-kernel

Hi Alex,

On 5/16/23 17:35, Alexandre TORGUE wrote:
> Hi Arnaud
> 
> On 5/12/23 11:39, Arnaud Pouliquen wrote:
>> Fixes stm32mp15*-scmi DTS files introduced in [1]:
>> This patch fixes the node which uses the MCU reset and adds the
>> missing HOLD_BOOT which is also handled by the SCMI reset service.
>>
>> This change cannot be applied as a fix on commit [1], the management
>> of the hold boot impacts also the stm32_rproc driver.
>>
>> [1] 'commit 5b7e58313a77 ("ARM: dts: stm32: Add SCMI version of STM32 boards
>> (DK1/DK2/ED1/EV1)")'
>>
>> Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
>> ---
> 
> I just ran YAML validation on your DT patches and it fails. I added your DT
> patches + dt-binding one (just for the test). I got the following issue:
> 
> /arch/arm/boot/dts/stm32mp157c-ed1-scmi.dtb: m4@10000000: st,syscfg-holdboot:
> False schema does not allow [[7, 268, 1]]
>     From schema:
> /local/home/frq08678/STLINUX/kernel/my-kernel/stm32/Documentation/devicetree/bindings/remoteproc/st,stm32-rproc.yaml
> 
> Do I miss another dt-binding update not present in this series ?

I reproduced the issue.

I need to add "/delete-property/ st,syscfg-holdboot;" in stm32mp157*-scmi.dts
files.

As Mathieu already integrates the patch 1/4 and 2/4, I will send a V4 containing
only the patches 3 and 4.

Thanks,
Arnaud

> 
> alex
> 
>>   arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts | 6 ++++--
>>   arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts | 6 ++++--
>>   arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts | 6 ++++--
>>   arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts | 6 ++++--
>>   4 files changed, 16 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
>> b/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
>> index e539cc80bef8..134788e64265 100644
>> --- a/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
>> +++ b/arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
>> @@ -55,8 +55,10 @@ &mdma1 {
>>       resets = <&scmi_reset RST_SCMI_MDMA>;
>>   };
>>   -&mlahb {
>> -    resets = <&scmi_reset RST_SCMI_MCU>;
>> +&m4_rproc {
>> +    resets = <&scmi_reset RST_SCMI_MCU>,
>> +         <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
>> +    reset-names =  "mcu_rst", "hold_boot";
>>   };
>>     &rcc {
>> diff --git a/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
>> b/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
>> index 97e4f94b0a24..c42e658debfb 100644
>> --- a/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
>> +++ b/arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
>> @@ -61,8 +61,10 @@ &mdma1 {
>>       resets = <&scmi_reset RST_SCMI_MDMA>;
>>   };
>>   -&mlahb {
>> -    resets = <&scmi_reset RST_SCMI_MCU>;
>> +&m4_rproc {
>> +    resets = <&scmi_reset RST_SCMI_MCU>,
>> +         <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
>> +    reset-names =  "mcu_rst", "hold_boot";
>>   };
>>     &rcc {
>> diff --git a/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
>> b/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
>> index 9cf0a44d2f47..7a56ff2d4185 100644
>> --- a/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
>> +++ b/arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
>> @@ -60,8 +60,10 @@ &mdma1 {
>>       resets = <&scmi_reset RST_SCMI_MDMA>;
>>   };
>>   -&mlahb {
>> -    resets = <&scmi_reset RST_SCMI_MCU>;
>> +&m4_rproc {
>> +    resets = <&scmi_reset RST_SCMI_MCU>,
>> +         <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
>> +    reset-names =  "mcu_rst", "hold_boot";
>>   };
>>     &rcc {
>> diff --git a/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
>> b/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
>> index 3b9dd6f4ccc9..119874dd91e4 100644
>> --- a/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
>> +++ b/arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
>> @@ -66,8 +66,10 @@ &mdma1 {
>>       resets = <&scmi_reset RST_SCMI_MDMA>;
>>   };
>>   -&mlahb {
>> -    resets = <&scmi_reset RST_SCMI_MCU>;
>> +&m4_rproc {
>> +    resets = <&scmi_reset RST_SCMI_MCU>,
>> +         <&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
>> +    reset-names =  "mcu_rst", "hold_boot";
>>   };
>>     &rcc {
> 

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

end of thread, other threads:[~2023-05-16 17:02 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-12  9:39 [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Arnaud Pouliquen
2023-05-12  9:39 ` [PATCH v3 1/4] dt-bindings: remoteproc: st,stm32-rproc: Rework reset declarations Arnaud Pouliquen
2023-05-14  9:40   ` Krzysztof Kozlowski
2023-05-12  9:39 ` [PATCH v3 2/4] remoteproc: stm32: Allow hold boot management by the SCMI reset controller Arnaud Pouliquen
2023-05-12  9:39 ` [PATCH v3 3/4] ARM: dts: stm32: Update reset declarations Arnaud Pouliquen
2023-05-12  9:39 ` [PATCH v3 4/4] ARM: dts: stm32: fix m4_rproc references to use SCMI Arnaud Pouliquen
2023-05-16 15:35   ` Alexandre TORGUE
2023-05-16 17:01     ` Arnaud POULIQUEN
2023-05-15 17:27 ` [PATCH v3 0/4] stm32mp15: update remoteproc to support SCMI Device tree Mathieu Poirier
2023-05-16 14:33   ` Alexandre TORGUE

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).