[PATCH] ARM: dts: microchip: at91-sam9x75_curiosity: Add PMIC suspend voltage configuration

Andrei Simion posted 1 patch 11 months, 2 weeks ago
.../dts/microchip/at91-sam9x75_curiosity.dts   | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
[PATCH] ARM: dts: microchip: at91-sam9x75_curiosity: Add PMIC suspend voltage configuration
Posted by Andrei Simion 11 months, 2 weeks ago
Add missing essential configuration for the PMIC rails, which is necessary
for proper low-power mode operation. This patch adds the required settings
to ensure that the regulators behave correctly during Suspend-to-RAM and
Standby states. Otherwise, after resuming, it receives: "No configuration"
message.

Our driver implements the set_suspend_voltage and set_suspend_mode
callbacks, which require the `regulator-suspend-microvolt` property to be
specified in the device tree for each regulator node. This property defines
the voltage level that the regulator should maintain during suspend mode.

Additionally, according to the datasheet, some regulators need to be turned
on or off during suspend mode. This patch addresses these requirements by
adding the `regulator-on-in-suspend` and `regulator-off-in-suspend`
properties where appropriate.

Fixes: 371a47c9a58a ("ARM: dts: microchip: sam9x75_curiosity: add sam9x75 curiosity board")
Signed-off-by: Andrei Simion <andrei.simion@microchip.com>
---
 .../dts/microchip/at91-sam9x75_curiosity.dts   | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts b/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts
index 1a6a909a5043..5514ad10cda5 100644
--- a/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts
+++ b/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts
@@ -110,10 +110,12 @@ vdd_3v3: VDD_IO {
 
 				regulator-state-standby {
 					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <3300000>;
 					regulator-mode = <4>;
 				};
 
 				regulator-state-mem {
+					regulator-off-in-suspend;
 					regulator-mode = <4>;
 				};
 			};
@@ -128,11 +130,13 @@ vddioddr: VDD_DDR {
 
 				regulator-state-standby {
 					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <1350000>;
 					regulator-mode = <4>;
 				};
 
 				regulator-state-mem {
 					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <1350000>;
 					regulator-mode = <4>;
 				};
 			};
@@ -147,10 +151,12 @@ vddcore: VDD_CORE {
 
 				regulator-state-standby {
 					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <1150000>;
 					regulator-mode = <4>;
 				};
 
 				regulator-state-mem {
+					regulator-off-in-suspend;
 					regulator-mode = <4>;
 				};
 			};
@@ -166,10 +172,12 @@ dcdc4: VDD_OTHER {
 
 				regulator-state-standby {
 					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <1150000>;
 					regulator-mode = <4>;
 				};
 
 				regulator-state-mem {
+					regulator-off-in-suspend;
 					regulator-mode = <4>;
 				};
 			};
@@ -182,6 +190,11 @@ vldo1: LDO1 {
 
 				regulator-state-standby {
 					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <3300000>;
+				};
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
 				};
 			};
 
@@ -192,6 +205,11 @@ vldo2: LDO2 {
 
 				regulator-state-standby {
 					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <1800000>;
+				};
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
 				};
 			};
 		};

base-commit: 37136bf5c3a6f6b686d74f41837a6406bec6b7bc
-- 
2.34.1
Re: [PATCH] ARM: dts: microchip: at91-sam9x75_curiosity: Add PMIC suspend voltage configuration
Posted by Claudiu Beznea 11 months, 1 week ago
Hi, Andrei,

On 13.01.2025 09:17, Andrei Simion wrote:
> Add missing essential configuration for the PMIC rails, which is necessary
> for proper low-power mode operation. This patch adds the required settings
> to ensure that the regulators behave correctly during Suspend-to-RAM and
> Standby states. Otherwise, after resuming, it receives: "No configuration"
> message.
> 
> Our driver implements the set_suspend_voltage and set_suspend_mode
> callbacks, which require the `regulator-suspend-microvolt` property to be
> specified in the device tree for each regulator node. This property defines
> the voltage level that the regulator should maintain during suspend mode.
> 
> Additionally, according to the datasheet, some regulators need to be turned
> on or off during suspend mode. This patch addresses these requirements by
> adding the `regulator-on-in-suspend` and `regulator-off-in-suspend`
> properties where appropriate.
> 
> Fixes: 371a47c9a58a ("ARM: dts: microchip: sam9x75_curiosity: add sam9x75 curiosity board")
> Signed-off-by: Andrei Simion <andrei.simion@microchip.com>
> ---
>  .../dts/microchip/at91-sam9x75_curiosity.dts   | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts b/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts
> index 1a6a909a5043..5514ad10cda5 100644
> --- a/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts
> +++ b/arch/arm/boot/dts/microchip/at91-sam9x75_curiosity.dts
> @@ -110,10 +110,12 @@ vdd_3v3: VDD_IO {
>  
>  				regulator-state-standby {
>  					regulator-on-in-suspend;
> +					regulator-suspend-microvolt = <3300000>;
>  					regulator-mode = <4>;
>  				};
>  
>  				regulator-state-mem {
> +					regulator-off-in-suspend;
>  					regulator-mode = <4>;
>  				};
>  			};
> @@ -128,11 +130,13 @@ vddioddr: VDD_DDR {
>  
>  				regulator-state-standby {
>  					regulator-on-in-suspend;
> +					regulator-suspend-microvolt = <1350000>;
>  					regulator-mode = <4>;
>  				};
>  
>  				regulator-state-mem {
>  					regulator-on-in-suspend;
> +					regulator-suspend-microvolt = <1350000>;
>  					regulator-mode = <4>;
>  				};
>  			};
> @@ -147,10 +151,12 @@ vddcore: VDD_CORE {
>  
>  				regulator-state-standby {
>  					regulator-on-in-suspend;
> +					regulator-suspend-microvolt = <1150000>;
>  					regulator-mode = <4>;
>  				};
>  
>  				regulator-state-mem {
> +					regulator-off-in-suspend;

Is this correct? In the upstream kernel the SAM9X7 supports only standby
and ULP0 (see sam9x7_pm_init()). I don't think it is correct to turn off
the CPU while in ULP0.

Moreover, AFAICT, the MCP16502 will not transition out of active state
according to the FIGURE 4-2: Finite State Machine (FSM) States Diagram for
MCP16502AC from [1] and the schematics from Figure 3-6. Power Management
Integrated Circuit described in [2]. The LPM, HPM are tied to the ground
and SHDN is currently controlled (in the upstream kernel) only for backup
and self-refresh mode (see at91_backup_mode). Am I wrong?

Thank you,
Claudiu

[1]
https://ww1.microchip.com/downloads/aemDocuments/documents/APID/ProductDocuments/DataSheets/MCP16502-Data-Sheet-DS20006275.pdf
[2]
https://ww1.microchip.com/downloads/aemDocuments/documents/MPU32/ProductDocuments/UserGuides/SAM9X75-Curiosity-User-Guide-DS60001859.pdf

>  					regulator-mode = <4>;
>  				};
>  			};
> @@ -166,10 +172,12 @@ dcdc4: VDD_OTHER {
>  
>  				regulator-state-standby {
>  					regulator-on-in-suspend;
> +					regulator-suspend-microvolt = <1150000>;
>  					regulator-mode = <4>;
>  				};
>  
>  				regulator-state-mem {
> +					regulator-off-in-suspend;
>  					regulator-mode = <4>;
>  				};
>  			};
> @@ -182,6 +190,11 @@ vldo1: LDO1 {
>  
>  				regulator-state-standby {
>  					regulator-on-in-suspend;
> +					regulator-suspend-microvolt = <3300000>;
> +				};
> +
> +				regulator-state-mem {
> +					regulator-off-in-suspend;
>  				};
>  			};
>  
> @@ -192,6 +205,11 @@ vldo2: LDO2 {
>  
>  				regulator-state-standby {
>  					regulator-on-in-suspend;
> +					regulator-suspend-microvolt = <1800000>;
> +				};
> +
> +				regulator-state-mem {
> +					regulator-off-in-suspend;
>  				};
>  			};
>  		};
> 
> base-commit: 37136bf5c3a6f6b686d74f41837a6406bec6b7bc