Re: [PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-05-22 Thread Tony Lindgren
* Keerthy  [180522 07:59]:
> On Thursday 12 April 2018 07:57 PM, Tony Lindgren wrote:
> > * Keerthy  [180412 03:56]:
> >> Add the save and restore for clksrc as part of suspend and resume
> >> so that it saves the counter value and restores. This is needed in
> >> modes like rtc+ddr in self-refresh not doing this stalls the time.
> > 
> > I suspect this too should really happen with cpu_pm.
> 
> I believe going by the previous set of patches this fits better with
> suspend/resume?

Yes if you don't need it for cpuidle and other SoC variants
don't need it for cpuidle.

> > Probably no need to look up the hwmod every time? Especially if am437x
> > will start supporting deeper idle modes during runtime.
> 
> Like clockevent i will store the hwmod pointer for clocksource as well.

OK

Regards,

Tony


Re: [PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-05-22 Thread Tony Lindgren
* Keerthy  [180522 07:59]:
> On Thursday 12 April 2018 07:57 PM, Tony Lindgren wrote:
> > * Keerthy  [180412 03:56]:
> >> Add the save and restore for clksrc as part of suspend and resume
> >> so that it saves the counter value and restores. This is needed in
> >> modes like rtc+ddr in self-refresh not doing this stalls the time.
> > 
> > I suspect this too should really happen with cpu_pm.
> 
> I believe going by the previous set of patches this fits better with
> suspend/resume?

Yes if you don't need it for cpuidle and other SoC variants
don't need it for cpuidle.

> > Probably no need to look up the hwmod every time? Especially if am437x
> > will start supporting deeper idle modes during runtime.
> 
> Like clockevent i will store the hwmod pointer for clocksource as well.

OK

Regards,

Tony


Re: [PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-05-22 Thread Keerthy


On Thursday 12 April 2018 07:57 PM, Tony Lindgren wrote:
> * Keerthy  [180412 03:56]:
>> Add the save and restore for clksrc as part of suspend and resume
>> so that it saves the counter value and restores. This is needed in
>> modes like rtc+ddr in self-refresh not doing this stalls the time.
> 
> I suspect this too should really happen with cpu_pm.

I believe going by the previous set of patches this fits better with
suspend/resume?

> 
>> --- a/arch/arm/mach-omap2/timer.c
>> +++ b/arch/arm/mach-omap2/timer.c
>> @@ -442,6 +442,38 @@ static int __init __maybe_unused 
>> omap2_sync32k_clocksource_init(void)
>>  return ret;
>>  }
>>  
>> +static unsigned int omap2_gptimer_clksrc_load;
>> +
>> +static void omap2_gptimer_clksrc_suspend(struct clocksource *unused)
>> +{
>> +struct omap_hwmod *oh;
>> +
>> +omap2_gptimer_clksrc_load =
>> +__omap_dm_timer_read_counter(, OMAP_TIMER_NONPOSTED);
>> +
>> +oh = omap_hwmod_lookup(clocksource_gpt.name);
>> +if (!oh)
>> +return;
>> +
>> +omap_hwmod_idle(oh);
>> +}
> 
> Probably no need to look up the hwmod every time? Especially if am437x
> will start supporting deeper idle modes during runtime.

Like clockevent i will store the hwmod pointer for clocksource as well.

> 
> And probably the cpu_pm notifies should be directly in the hwmod
> code so we don't need to add more any more dependencies to hwmod
> functions to timer code. We should have this code move to drivers
> anyways at some point.
> 
> Regards,
> 
> Tony
> 


Re: [PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-05-22 Thread Keerthy


On Thursday 12 April 2018 07:57 PM, Tony Lindgren wrote:
> * Keerthy  [180412 03:56]:
>> Add the save and restore for clksrc as part of suspend and resume
>> so that it saves the counter value and restores. This is needed in
>> modes like rtc+ddr in self-refresh not doing this stalls the time.
> 
> I suspect this too should really happen with cpu_pm.

I believe going by the previous set of patches this fits better with
suspend/resume?

> 
>> --- a/arch/arm/mach-omap2/timer.c
>> +++ b/arch/arm/mach-omap2/timer.c
>> @@ -442,6 +442,38 @@ static int __init __maybe_unused 
>> omap2_sync32k_clocksource_init(void)
>>  return ret;
>>  }
>>  
>> +static unsigned int omap2_gptimer_clksrc_load;
>> +
>> +static void omap2_gptimer_clksrc_suspend(struct clocksource *unused)
>> +{
>> +struct omap_hwmod *oh;
>> +
>> +omap2_gptimer_clksrc_load =
>> +__omap_dm_timer_read_counter(, OMAP_TIMER_NONPOSTED);
>> +
>> +oh = omap_hwmod_lookup(clocksource_gpt.name);
>> +if (!oh)
>> +return;
>> +
>> +omap_hwmod_idle(oh);
>> +}
> 
> Probably no need to look up the hwmod every time? Especially if am437x
> will start supporting deeper idle modes during runtime.

Like clockevent i will store the hwmod pointer for clocksource as well.

> 
> And probably the cpu_pm notifies should be directly in the hwmod
> code so we don't need to add more any more dependencies to hwmod
> functions to timer code. We should have this code move to drivers
> anyways at some point.
> 
> Regards,
> 
> Tony
> 


Re: [PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-04-12 Thread Tony Lindgren
* Keerthy  [180412 03:56]:
> Add the save and restore for clksrc as part of suspend and resume
> so that it saves the counter value and restores. This is needed in
> modes like rtc+ddr in self-refresh not doing this stalls the time.

I suspect this too should really happen with cpu_pm.

> --- a/arch/arm/mach-omap2/timer.c
> +++ b/arch/arm/mach-omap2/timer.c
> @@ -442,6 +442,38 @@ static int __init __maybe_unused 
> omap2_sync32k_clocksource_init(void)
>   return ret;
>  }
>  
> +static unsigned int omap2_gptimer_clksrc_load;
> +
> +static void omap2_gptimer_clksrc_suspend(struct clocksource *unused)
> +{
> + struct omap_hwmod *oh;
> +
> + omap2_gptimer_clksrc_load =
> + __omap_dm_timer_read_counter(, OMAP_TIMER_NONPOSTED);
> +
> + oh = omap_hwmod_lookup(clocksource_gpt.name);
> + if (!oh)
> + return;
> +
> + omap_hwmod_idle(oh);
> +}

Probably no need to look up the hwmod every time? Especially if am437x
will start supporting deeper idle modes during runtime.

And probably the cpu_pm notifies should be directly in the hwmod
code so we don't need to add more any more dependencies to hwmod
functions to timer code. We should have this code move to drivers
anyways at some point.

Regards,

Tony


Re: [PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-04-12 Thread Tony Lindgren
* Keerthy  [180412 03:56]:
> Add the save and restore for clksrc as part of suspend and resume
> so that it saves the counter value and restores. This is needed in
> modes like rtc+ddr in self-refresh not doing this stalls the time.

I suspect this too should really happen with cpu_pm.

> --- a/arch/arm/mach-omap2/timer.c
> +++ b/arch/arm/mach-omap2/timer.c
> @@ -442,6 +442,38 @@ static int __init __maybe_unused 
> omap2_sync32k_clocksource_init(void)
>   return ret;
>  }
>  
> +static unsigned int omap2_gptimer_clksrc_load;
> +
> +static void omap2_gptimer_clksrc_suspend(struct clocksource *unused)
> +{
> + struct omap_hwmod *oh;
> +
> + omap2_gptimer_clksrc_load =
> + __omap_dm_timer_read_counter(, OMAP_TIMER_NONPOSTED);
> +
> + oh = omap_hwmod_lookup(clocksource_gpt.name);
> + if (!oh)
> + return;
> +
> + omap_hwmod_idle(oh);
> +}

Probably no need to look up the hwmod every time? Especially if am437x
will start supporting deeper idle modes during runtime.

And probably the cpu_pm notifies should be directly in the hwmod
code so we don't need to add more any more dependencies to hwmod
functions to timer code. We should have this code move to drivers
anyways at some point.

Regards,

Tony


[PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-04-11 Thread Keerthy
Add the save and restore for clksrc as part of suspend and resume
so that it saves the counter value and restores. This is needed in
modes like rtc+ddr in self-refresh not doing this stalls the time.

Signed-off-by: Keerthy 
---
 arch/arm/mach-omap2/timer.c | 37 +
 1 file changed, 37 insertions(+)

diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 4fb4dc2..35fef97 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -442,6 +442,38 @@ static int __init __maybe_unused 
omap2_sync32k_clocksource_init(void)
return ret;
 }
 
+static unsigned int omap2_gptimer_clksrc_load;
+
+static void omap2_gptimer_clksrc_suspend(struct clocksource *unused)
+{
+   struct omap_hwmod *oh;
+
+   omap2_gptimer_clksrc_load =
+   __omap_dm_timer_read_counter(, OMAP_TIMER_NONPOSTED);
+
+   oh = omap_hwmod_lookup(clocksource_gpt.name);
+   if (!oh)
+   return;
+
+   omap_hwmod_idle(oh);
+}
+
+static void omap2_gptimer_clksrc_resume(struct clocksource *unused)
+{
+   struct omap_hwmod *oh;
+
+   oh = omap_hwmod_lookup(clocksource_gpt.name);
+   if (!oh)
+   return;
+
+   omap_hwmod_enable(oh);
+
+   __omap_dm_timer_load_start(,
+  OMAP_TIMER_CTRL_ST | OMAP_TIMER_CTRL_AR,
+  omap2_gptimer_clksrc_load,
+  OMAP_TIMER_NONPOSTED);
+}
+
 static void __init omap2_gptimer_clocksource_init(int gptimer_id,
  const char *fck_source,
  const char *property)
@@ -451,6 +483,11 @@ static void __init omap2_gptimer_clocksource_init(int 
gptimer_id,
clksrc.id = gptimer_id;
clksrc.errata = omap_dm_timer_get_errata();
 
+   if (soc_is_am43xx()) {
+   clocksource_gpt.suspend = omap2_gptimer_clksrc_suspend;
+   clocksource_gpt.resume = omap2_gptimer_clksrc_resume;
+   }
+
res = omap_dm_timer_init_one(, fck_source, property,
 _gpt.name,
 OMAP_TIMER_NONPOSTED);
-- 
1.9.1



[PATCH 12/14] OMAP: CLK: CLKSRC: Add suspend resume hooks

2018-04-11 Thread Keerthy
Add the save and restore for clksrc as part of suspend and resume
so that it saves the counter value and restores. This is needed in
modes like rtc+ddr in self-refresh not doing this stalls the time.

Signed-off-by: Keerthy 
---
 arch/arm/mach-omap2/timer.c | 37 +
 1 file changed, 37 insertions(+)

diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 4fb4dc2..35fef97 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -442,6 +442,38 @@ static int __init __maybe_unused 
omap2_sync32k_clocksource_init(void)
return ret;
 }
 
+static unsigned int omap2_gptimer_clksrc_load;
+
+static void omap2_gptimer_clksrc_suspend(struct clocksource *unused)
+{
+   struct omap_hwmod *oh;
+
+   omap2_gptimer_clksrc_load =
+   __omap_dm_timer_read_counter(, OMAP_TIMER_NONPOSTED);
+
+   oh = omap_hwmod_lookup(clocksource_gpt.name);
+   if (!oh)
+   return;
+
+   omap_hwmod_idle(oh);
+}
+
+static void omap2_gptimer_clksrc_resume(struct clocksource *unused)
+{
+   struct omap_hwmod *oh;
+
+   oh = omap_hwmod_lookup(clocksource_gpt.name);
+   if (!oh)
+   return;
+
+   omap_hwmod_enable(oh);
+
+   __omap_dm_timer_load_start(,
+  OMAP_TIMER_CTRL_ST | OMAP_TIMER_CTRL_AR,
+  omap2_gptimer_clksrc_load,
+  OMAP_TIMER_NONPOSTED);
+}
+
 static void __init omap2_gptimer_clocksource_init(int gptimer_id,
  const char *fck_source,
  const char *property)
@@ -451,6 +483,11 @@ static void __init omap2_gptimer_clocksource_init(int 
gptimer_id,
clksrc.id = gptimer_id;
clksrc.errata = omap_dm_timer_get_errata();
 
+   if (soc_is_am43xx()) {
+   clocksource_gpt.suspend = omap2_gptimer_clksrc_suspend;
+   clocksource_gpt.resume = omap2_gptimer_clksrc_resume;
+   }
+
res = omap_dm_timer_init_one(, fck_source, property,
 _gpt.name,
 OMAP_TIMER_NONPOSTED);
-- 
1.9.1