mbox series

[v3,0/4] stm32mp15: update remoteproc to support SCMI Device tree

Message ID 20230512093926.661509-1-arnaud.pouliquen@foss.st.com
Headers show
Series stm32mp15: update remoteproc to support SCMI Device tree | expand

Message

Arnaud POULIQUEN May 12, 2023, 9:39 a.m. UTC
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(-)

Comments

Mathieu Poirier May 15, 2023, 5:27 p.m. UTC | #1
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
>
Alexandre TORGUE May 16, 2023, 2:33 p.m. UTC | #2
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
>>
Alexandre TORGUE May 16, 2023, 3:35 p.m. UTC | #3
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 {
Arnaud POULIQUEN May 16, 2023, 5:01 p.m. UTC | #4
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 {
>