[PATCH] rtc: ti-k3: Add support to resume from IO DDR low power mode

Akashdeep Kaur posted 1 patch 3 weeks, 6 days ago
There is a newer version of this series
drivers/rtc/rtc-ti-k3.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
[PATCH] rtc: ti-k3: Add support to resume from IO DDR low power mode
Posted by Akashdeep Kaur 3 weeks, 6 days ago
During IO DDR low power mode, the RTC IP is reset and loses its
register configuration. The DDR memory still preserves all driver states
(reference counts, software context). System clocks are saved and restored
by Device Manager (DM) firmware during the resume sequence.
Add support to reconfigure the RTC IP registers in resume handler only if
resume hook is called during IO DDR low power mode resume.

Signed-off-by: Akashdeep Kaur <a-kaur@ti.com>
---

Tested deep sleep with rtcwake after IO DDR resume on AM62P-SK.

---
 drivers/rtc/rtc-ti-k3.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/rtc/rtc-ti-k3.c b/drivers/rtc/rtc-ti-k3.c
index ec759d8f7023..e801f5b9d757 100644
--- a/drivers/rtc/rtc-ti-k3.c
+++ b/drivers/rtc/rtc-ti-k3.c
@@ -640,10 +640,18 @@ static int __maybe_unused ti_k3_rtc_suspend(struct device *dev)
 static int __maybe_unused ti_k3_rtc_resume(struct device *dev)
 {
 	struct ti_k3_rtc *priv = dev_get_drvdata(dev);
+	int ret = 0;
+
+	if (k3rtc_check_unlocked(priv)) {
+		/* RTC locked implies low power mode exit where RTC loses context */
+		ret = k3rtc_configure(dev);
+		if (ret)
+			return ret;
+	}
 
 	if (device_may_wakeup(dev))
 		disable_irq_wake(priv->irq);
-	return 0;
+	return ret;
 }
 
 static SIMPLE_DEV_PM_OPS(ti_k3_rtc_pm_ops, ti_k3_rtc_suspend, ti_k3_rtc_resume);
-- 
2.34.1
Re: [PATCH] rtc: ti-k3: Add support to resume from IO DDR low power mode
Posted by Vignesh Raghavendra 3 weeks, 4 days ago

On 11/03/26 12:32, Akashdeep Kaur wrote:
> During IO DDR low power mode, the RTC IP is reset and loses its
> register configuration. 

> The DDR memory still preserves all driver states
> (reference counts, software context). 

That's the definition of Suspend to RAM

> System clocks are saved and restored
> by Device Manager (DM) firmware during the resume sequence.

Not relevant for this patch in particular.

> Add support to reconfigure the RTC IP registers in resume handler only if
> resume hook is called during IO DDR low power mode resume.
> 

Above all is probably bit too verbose. Below text is all thats needed:

Restore the RTC HW context which may be lost when system enters certain
low power mode (IO+DDR mode). Check if the RTC registers are locked
which would indicate loss of context (reset) and restore the context as
needed.

> Signed-off-by: Akashdeep Kaur <a-kaur@ti.com>
> ---
> 
> Tested deep sleep with rtcwake after IO DDR resume on AM62P-SK.
> 
> ---
>  drivers/rtc/rtc-ti-k3.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/rtc/rtc-ti-k3.c b/drivers/rtc/rtc-ti-k3.c
> index ec759d8f7023..e801f5b9d757 100644
> --- a/drivers/rtc/rtc-ti-k3.c
> +++ b/drivers/rtc/rtc-ti-k3.c
> @@ -640,10 +640,18 @@ static int __maybe_unused ti_k3_rtc_suspend(struct device *dev)
>  static int __maybe_unused ti_k3_rtc_resume(struct device *dev)
>  {
>  	struct ti_k3_rtc *priv = dev_get_drvdata(dev);
> +	int ret = 0;
> +
> +	if (k3rtc_check_unlocked(priv)) {
> +		/* RTC locked implies low power mode exit where RTC loses context */
> +		ret = k3rtc_configure(dev);
> +		if (ret)
> +			return ret;
> +	}
>  
>  	if (device_may_wakeup(dev))
>  		disable_irq_wake(priv->irq);
> -	return 0;
> +	return ret;
>  }
>  
>  static SIMPLE_DEV_PM_OPS(ti_k3_rtc_pm_ops, ti_k3_rtc_suspend, ti_k3_rtc_resume);

-- 
Regards
Vignesh
https://ti.com/opensource
Re: [PATCH] rtc: ti-k3: Add support to resume from IO DDR low power mode
Posted by Akashdeep Kaur 3 weeks, 4 days ago
Hi Vignesh,

On 13/03/26 13:53, Vignesh Raghavendra wrote:
> 
> 
> On 11/03/26 12:32, Akashdeep Kaur wrote:
>> During IO DDR low power mode, the RTC IP is reset and loses its
>> register configuration.
> 
>> The DDR memory still preserves all driver states
>> (reference counts, software context).
> 
> That's the definition of Suspend to RAM
> 
>> System clocks are saved and restored
>> by Device Manager (DM) firmware during the resume sequence.
> 
> Not relevant for this patch in particular.
> 
>> Add support to reconfigure the RTC IP registers in resume handler only if
>> resume hook is called during IO DDR low power mode resume.
>>
> 
> Above all is probably bit too verbose. Below text is all thats needed:
> 
> Restore the RTC HW context which may be lost when system enters certain
> low power mode (IO+DDR mode). Check if the RTC registers are locked
> which would indicate loss of context (reset) and restore the context as
> needed.

Updated the commit message as suggested.

Regards,
Akashdeep Kaur
> 
>> Signed-off-by: Akashdeep Kaur <a-kaur@ti.com>
>> ---
>>
>> Tested deep sleep with rtcwake after IO DDR resume on AM62P-SK.
>>
>> ---
>>   drivers/rtc/rtc-ti-k3.c | 10 +++++++++-
>>   1 file changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/rtc/rtc-ti-k3.c b/drivers/rtc/rtc-ti-k3.c
>> index ec759d8f7023..e801f5b9d757 100644
>> --- a/drivers/rtc/rtc-ti-k3.c
>> +++ b/drivers/rtc/rtc-ti-k3.c
>> @@ -640,10 +640,18 @@ static int __maybe_unused ti_k3_rtc_suspend(struct device *dev)
>>   static int __maybe_unused ti_k3_rtc_resume(struct device *dev)
>>   {
>>   	struct ti_k3_rtc *priv = dev_get_drvdata(dev);
>> +	int ret = 0;
>> +
>> +	if (k3rtc_check_unlocked(priv)) {
>> +		/* RTC locked implies low power mode exit where RTC loses context */
>> +		ret = k3rtc_configure(dev);
>> +		if (ret)
>> +			return ret;
>> +	}
>>   
>>   	if (device_may_wakeup(dev))
>>   		disable_irq_wake(priv->irq);
>> -	return 0;
>> +	return ret;
>>   }
>>   
>>   static SIMPLE_DEV_PM_OPS(ti_k3_rtc_pm_ops, ti_k3_rtc_suspend, ti_k3_rtc_resume);
>