Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-10-06 Thread Paul Walmsley
On Thu, 9 Jun 2011, Tomi Valkeinen wrote:

 get_context_loss_count functions return context loss count as u32, and
 zero means an error. However, zero is also returned when context has
 never been lost and could also be returned when the context loss count
 has wrapped and goes to zero.
 
 Change the functions to return an int, with negative value meaning an
 error.
 
 OMAP HSMMC code uses omap_pm_get_dev_context_loss_count(), but as the
 hsmmc code handles the returned value as an int, with negative value
 meaning an error, this patch actually fixes hsmmc code also.
 
 Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
 Acked-by: Kevin Hilman khil...@ti.com

Acked-by: Paul Walmsley p...@pwsan.com 


- Paul
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-10-06 Thread Tony Lindgren
* Paul Walmsley p...@pwsan.com [111006 15:37]:
 On Thu, 9 Jun 2011, Tomi Valkeinen wrote:
 
  get_context_loss_count functions return context loss count as u32, and
  zero means an error. However, zero is also returned when context has
  never been lost and could also be returned when the context loss count
  has wrapped and goes to zero.
  
  Change the functions to return an int, with negative value meaning an
  error.
  
  OMAP HSMMC code uses omap_pm_get_dev_context_loss_count(), but as the
  hsmmc code handles the returned value as an int, with negative value
  meaning an error, this patch actually fixes hsmmc code also.
  
  Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
  Acked-by: Kevin Hilman khil...@ti.com
 
 Acked-by: Paul Walmsley p...@pwsan.com 

Thanks, picking this into fixes-part2 branch as requested by Paul.

Tony
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-08-21 Thread Paul Walmsley
On Thu, 9 Jun 2011, Tomi Valkeinen wrote:

 get_context_loss_count functions return context loss count as u32, and
 zero means an error. However, zero is also returned when context has
 never been lost and could also be returned when the context loss count
 has wrapped and goes to zero.
 
 Change the functions to return an int, with negative value meaning an
 error.
 
 OMAP HSMMC code uses omap_pm_get_dev_context_loss_count(), but as the
 hsmmc code handles the returned value as an int, with negative value
 meaning an error, this patch actually fixes hsmmc code also.
 
 Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
 Acked-by: Kevin Hilman khil...@ti.com

Thanks, queued for 3.2 fixes.

- Paul

 ---
  arch/arm/mach-omap2/omap_hwmod.c  |2 +-
  arch/arm/mach-omap2/powerdomain.c |   14 ++
  arch/arm/mach-omap2/powerdomain.h |2 +-
  arch/arm/plat-omap/include/plat/omap-pm.h |4 ++--
  arch/arm/plat-omap/include/plat/omap_device.h |2 +-
  arch/arm/plat-omap/include/plat/omap_hwmod.h  |2 +-
  arch/arm/plat-omap/omap-pm-noop.c |   24 +---
  arch/arm/plat-omap/omap_device.c  |2 +-
  8 files changed, 34 insertions(+), 18 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/omap_hwmod.c 
 b/arch/arm/mach-omap2/omap_hwmod.c
 index e034294..4f0d554 100644
 --- a/arch/arm/mach-omap2/omap_hwmod.c
 +++ b/arch/arm/mach-omap2/omap_hwmod.c
 @@ -2332,7 +2332,7 @@ ohsps_unlock:
   * Returns the context loss count of the powerdomain assocated with @oh
   * upon success, or zero if no powerdomain exists for @oh.
   */
 -u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
 +int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
  {
   struct powerdomain *pwrdm;
   int ret = 0;
 diff --git a/arch/arm/mach-omap2/powerdomain.c 
 b/arch/arm/mach-omap2/powerdomain.c
 index 9af0847..9d53a34 100644
 --- a/arch/arm/mach-omap2/powerdomain.c
 +++ b/arch/arm/mach-omap2/powerdomain.c
 @@ -935,16 +935,16 @@ int pwrdm_post_transition(void)
   * @pwrdm: struct powerdomain * to wait for
   *
   * Context loss count is the sum of powerdomain off-mode counter, the
 - * logic off counter and the per-bank memory off counter.  Returns 0
 + * logic off counter and the per-bank memory off counter.  Returns negative
   * (and WARNs) upon error, otherwise, returns the context loss count.
   */
 -u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
 +int pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
  {
   int i, count;
  
   if (!pwrdm) {
   WARN(1, powerdomain: %s: pwrdm is null\n, __func__);
 - return 0;
 + return -ENODEV;
   }
  
   count = pwrdm-state_counter[PWRDM_POWER_OFF];
 @@ -953,7 +953,13 @@ u32 pwrdm_get_context_loss_count(struct powerdomain 
 *pwrdm)
   for (i = 0; i  pwrdm-banks; i++)
   count += pwrdm-ret_mem_off_counter[i];
  
 - pr_debug(powerdomain: %s: context loss count = %u\n,
 + /*
 +  * Context loss count has to be a non-negative value. Clear the sign
 +  * bit to get a value range from 0 to INT_MAX.
 +  */
 + count = INT_MAX;
 +
 + pr_debug(powerdomain: %s: context loss count = %d\n,
pwrdm-name, count);
  
   return count;
 diff --git a/arch/arm/mach-omap2/powerdomain.h 
 b/arch/arm/mach-omap2/powerdomain.h
 index d23d979..012827f 100644
 --- a/arch/arm/mach-omap2/powerdomain.h
 +++ b/arch/arm/mach-omap2/powerdomain.h
 @@ -207,7 +207,7 @@ int pwrdm_clkdm_state_switch(struct clockdomain *clkdm);
  int pwrdm_pre_transition(void);
  int pwrdm_post_transition(void);
  int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm);
 -u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
 +int pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
  bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm);
  
  extern void omap2xxx_powerdomains_init(void);
 diff --git a/arch/arm/plat-omap/include/plat/omap-pm.h 
 b/arch/arm/plat-omap/include/plat/omap-pm.h
 index c0a7520..68df031 100644
 --- a/arch/arm/plat-omap/include/plat/omap-pm.h
 +++ b/arch/arm/plat-omap/include/plat/omap-pm.h
 @@ -350,9 +350,9 @@ unsigned long omap_pm_cpu_get_freq(void);
   * driver must restore device context.   If the number of context losses
   * exceeds the maximum positive integer, the function will wrap to 0 and
   * continue counting.  Returns the number of context losses for this device,
 - * or zero upon error.
 + * or negative value upon error.
   */
 -u32 omap_pm_get_dev_context_loss_count(struct device *dev);
 +int omap_pm_get_dev_context_loss_count(struct device *dev);
  
  void omap_pm_enable_off_mode(void);
  void omap_pm_disable_off_mode(void);
 diff --git a/arch/arm/plat-omap/include/plat/omap_device.h 
 b/arch/arm/plat-omap/include/plat/omap_device.h
 index e4c349f..70d31d0 100644
 --- a/arch/arm/plat-omap/include/plat/omap_device.h
 +++ 

Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-15 Thread Rajendra Nayak

On 6/14/2011 7:24 PM, Rajendra Nayak wrote:

On 6/14/2011 12:54 PM, Tomi Valkeinen wrote:

On Tue, 2011-06-14 at 01:13 -0600, Paul Walmsley wrote:

Hi Tomi

On Mon, 13 Jun 2011, Tomi Valkeinen wrote:


Paul, can you take this patch and queue it for an rc?


Generally I only queue regressions or fixes for major problems (crashes,
corruption, etc.) for -rc series. So probably this one should go in via
the normal merge window, unless it's been causing major disruptions?


No, only disruptions for me as the DSS pm_runtime patches depend on this
one to function correctly. So merge window is ok, I'll handle the DSS
side somehow.


Hi Paul/Kevin,

I had a query, not directly related to this patch, but to the way
the omap_pm_get_dev_context_loss_count() api is implemented, which
this patch is trying to fix in some ways.
I see that the api relies on the pwrdm level state counters, which
in-turn seem to be getting updated only in the cpuidle/suspend path.
How are domains like DSS which can independently transition outside
of the cpuidle path handled?


Thinking some more on this, maybe I now understand how this worked
on OMAP3. We always had the 'autodeps' on OMAP3 which made sure no
clkdm idle's while MPU is not in standby, and hence all transitions
would always happen between the pwrdm_pre_transition() and
pwrdm_post_transition() (where the pwrdm level state counters get
cleared/updated) callbacks. So there were really no domain
transitions outside of this on OMAP3.

My questions were popping out from the work I was trying to do to
support this on OMAP4, and with no 'autodeps' on OMAP4 there will
be transitions outside of cpuidle/suspend where counters need
to be updated/cleared which at this point I have no clue how to
handle :(
I will start a separate discussion/thread on this since
this is probably not the right place to discuss on how to do
this on OMAP4.

Thanks,
Rajendra



What I mean is, if DSS on disabling its clocks transitions to OFF
state (it being an independent powerdomain) and tries to use this api
to know if it lost context the next time it is re-enabling clocks and
all this happens while there was no cpuidle being scheduled, where do
the pwrdm level state counters get updated, which tell DSS it did lose
context?

On another note, i was wondering if it even made any sense to drivers
like DSS, which have an independent power domain of its own on OMAP to
try and do a restore-only-if-needed kind of an implementation.
Would'nt it always lose context the moment it run-time idle's?

regards,
Rajendra



Tomi


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html




--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-14 Thread Paul Walmsley
Hi Tomi

On Mon, 13 Jun 2011, Tomi Valkeinen wrote:

 Paul, can you take this patch and queue it for an rc?

Generally I only queue regressions or fixes for major problems (crashes, 
corruption, etc.) for -rc series.  So probably this one should go in via 
the normal merge window, unless it's been causing major disruptions?


- Paul
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-14 Thread Tomi Valkeinen
On Tue, 2011-06-14 at 01:13 -0600, Paul Walmsley wrote:
 Hi Tomi
 
 On Mon, 13 Jun 2011, Tomi Valkeinen wrote:
 
  Paul, can you take this patch and queue it for an rc?
 
 Generally I only queue regressions or fixes for major problems (crashes, 
 corruption, etc.) for -rc series.  So probably this one should go in via 
 the normal merge window, unless it's been causing major disruptions?

No, only disruptions for me as the DSS pm_runtime patches depend on this
one to function correctly. So merge window is ok, I'll handle the DSS
side somehow.

 Tomi


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-14 Thread Rajendra Nayak

On 6/14/2011 12:54 PM, Tomi Valkeinen wrote:

On Tue, 2011-06-14 at 01:13 -0600, Paul Walmsley wrote:

Hi Tomi

On Mon, 13 Jun 2011, Tomi Valkeinen wrote:


Paul, can you take this patch and queue it for an rc?


Generally I only queue regressions or fixes for major problems (crashes,
corruption, etc.) for -rc series.  So probably this one should go in via
the normal merge window, unless it's been causing major disruptions?


No, only disruptions for me as the DSS pm_runtime patches depend on this
one to function correctly. So merge window is ok, I'll handle the DSS
side somehow.


Hi Paul/Kevin,

I had a query, not directly related to this patch, but to the way
the omap_pm_get_dev_context_loss_count() api is implemented, which
this patch is trying to fix in some ways.
I see that the api relies on the pwrdm level state counters, which
in-turn seem to be getting updated only in the cpuidle/suspend path.
How are domains like DSS which can independently transition outside
of the cpuidle path handled?
What I mean is, if DSS on disabling its clocks transitions to OFF
state (it being an independent powerdomain) and tries to use this api
to know if it lost context the next time it is re-enabling clocks and
all this happens while there was no cpuidle being scheduled, where do
the pwrdm level state counters get updated, which tell DSS it did lose
context?

On another note, i was wondering if it even made any sense to drivers
like DSS, which have an independent power domain of its own on OMAP to 
try and do a restore-only-if-needed kind of an implementation.

Would'nt it always lose context the moment it run-time idle's?

regards,
Rajendra



  Tomi


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-13 Thread Tomi Valkeinen
Paul, can you take this patch and queue it for an rc?

 Tomi

On Thu, 2011-06-09 at 16:56 +0300, Tomi Valkeinen wrote:
 get_context_loss_count functions return context loss count as u32, and
 zero means an error. However, zero is also returned when context has
 never been lost and could also be returned when the context loss count
 has wrapped and goes to zero.
 
 Change the functions to return an int, with negative value meaning an
 error.
 
 OMAP HSMMC code uses omap_pm_get_dev_context_loss_count(), but as the
 hsmmc code handles the returned value as an int, with negative value
 meaning an error, this patch actually fixes hsmmc code also.
 
 Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
 Acked-by: Kevin Hilman khil...@ti.com
 ---
  arch/arm/mach-omap2/omap_hwmod.c  |2 +-
  arch/arm/mach-omap2/powerdomain.c |   14 ++
  arch/arm/mach-omap2/powerdomain.h |2 +-
  arch/arm/plat-omap/include/plat/omap-pm.h |4 ++--
  arch/arm/plat-omap/include/plat/omap_device.h |2 +-
  arch/arm/plat-omap/include/plat/omap_hwmod.h  |2 +-
  arch/arm/plat-omap/omap-pm-noop.c |   24 +---
  arch/arm/plat-omap/omap_device.c  |2 +-
  8 files changed, 34 insertions(+), 18 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/omap_hwmod.c 
 b/arch/arm/mach-omap2/omap_hwmod.c
 index e034294..4f0d554 100644
 --- a/arch/arm/mach-omap2/omap_hwmod.c
 +++ b/arch/arm/mach-omap2/omap_hwmod.c
 @@ -2332,7 +2332,7 @@ ohsps_unlock:
   * Returns the context loss count of the powerdomain assocated with @oh
   * upon success, or zero if no powerdomain exists for @oh.
   */
 -u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
 +int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
  {
   struct powerdomain *pwrdm;
   int ret = 0;
 diff --git a/arch/arm/mach-omap2/powerdomain.c 
 b/arch/arm/mach-omap2/powerdomain.c
 index 9af0847..9d53a34 100644
 --- a/arch/arm/mach-omap2/powerdomain.c
 +++ b/arch/arm/mach-omap2/powerdomain.c
 @@ -935,16 +935,16 @@ int pwrdm_post_transition(void)
   * @pwrdm: struct powerdomain * to wait for
   *
   * Context loss count is the sum of powerdomain off-mode counter, the
 - * logic off counter and the per-bank memory off counter.  Returns 0
 + * logic off counter and the per-bank memory off counter.  Returns negative
   * (and WARNs) upon error, otherwise, returns the context loss count.
   */
 -u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
 +int pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
  {
   int i, count;
  
   if (!pwrdm) {
   WARN(1, powerdomain: %s: pwrdm is null\n, __func__);
 - return 0;
 + return -ENODEV;
   }
  
   count = pwrdm-state_counter[PWRDM_POWER_OFF];
 @@ -953,7 +953,13 @@ u32 pwrdm_get_context_loss_count(struct powerdomain 
 *pwrdm)
   for (i = 0; i  pwrdm-banks; i++)
   count += pwrdm-ret_mem_off_counter[i];
  
 - pr_debug(powerdomain: %s: context loss count = %u\n,
 + /*
 +  * Context loss count has to be a non-negative value. Clear the sign
 +  * bit to get a value range from 0 to INT_MAX.
 +  */
 + count = INT_MAX;
 +
 + pr_debug(powerdomain: %s: context loss count = %d\n,
pwrdm-name, count);
  
   return count;
 diff --git a/arch/arm/mach-omap2/powerdomain.h 
 b/arch/arm/mach-omap2/powerdomain.h
 index d23d979..012827f 100644
 --- a/arch/arm/mach-omap2/powerdomain.h
 +++ b/arch/arm/mach-omap2/powerdomain.h
 @@ -207,7 +207,7 @@ int pwrdm_clkdm_state_switch(struct clockdomain *clkdm);
  int pwrdm_pre_transition(void);
  int pwrdm_post_transition(void);
  int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm);
 -u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
 +int pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
  bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm);
  
  extern void omap2xxx_powerdomains_init(void);
 diff --git a/arch/arm/plat-omap/include/plat/omap-pm.h 
 b/arch/arm/plat-omap/include/plat/omap-pm.h
 index c0a7520..68df031 100644
 --- a/arch/arm/plat-omap/include/plat/omap-pm.h
 +++ b/arch/arm/plat-omap/include/plat/omap-pm.h
 @@ -350,9 +350,9 @@ unsigned long omap_pm_cpu_get_freq(void);
   * driver must restore device context.   If the number of context losses
   * exceeds the maximum positive integer, the function will wrap to 0 and
   * continue counting.  Returns the number of context losses for this device,
 - * or zero upon error.
 + * or negative value upon error.
   */
 -u32 omap_pm_get_dev_context_loss_count(struct device *dev);
 +int omap_pm_get_dev_context_loss_count(struct device *dev);
  
  void omap_pm_enable_off_mode(void);
  void omap_pm_disable_off_mode(void);
 diff --git a/arch/arm/plat-omap/include/plat/omap_device.h 
 b/arch/arm/plat-omap/include/plat/omap_device.h
 index e4c349f..70d31d0 100644
 --- a/arch/arm/plat-omap/include/plat/omap_device.h
 

Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-13 Thread Ghongdemath, Girish
Tomi,
Couple of queries,

On Mon, Jun 13, 2011 at 4:51 AM, Tomi Valkeinen tomi.valkei...@ti.com wrote:
 Paul, can you take this patch and queue it for an rc?

  Tomi

 On Thu, 2011-06-09 at 16:56 +0300, Tomi Valkeinen wrote:
 get_context_loss_count functions return context loss count as u32, and
 zero means an error. However, zero is also returned when context has
 never been lost and could also be returned when the context loss count
 has wrapped and goes to zero.

 Change the functions to return an int, with negative value meaning an
 error.


 +             if (off_mode_enabled) {

- why have a check for off_mode_enabled? As this only detects valid
next state for MPU/CORE. Other pwrdm can still
hit OFF.


 +                     count++;
 +                     /*
 +                      * Context loss count has to be a non-negative value.
 +                      * Clear the sign bit to get a value range from 0 to
 +                      * INT_MAX.
 +                      */
 +                     count = INT_MAX;
 +                     dummy_context_loss_counter = count;
 +             }
       }

- Why not use u32 instead?


Regards,
Girish


       pr_debug(OMAP PM: context loss count for dev %s = %d\n,
 @@ -337,7 +347,7 @@ u32 omap_pm_get_dev_context_loss_count(struct device 
 *dev)

  #else

 -u32 omap_pm_get_dev_context_loss_count(struct device *dev)
 +int omap_pm_get_dev_context_loss_count(struct device *dev)
  {
       return dummy_context_loss_counter;
  }
 diff --git a/arch/arm/plat-omap/omap_device.c 
 b/arch/arm/plat-omap/omap_device.c
 index 9bbda9a..9753f71 100644
 --- a/arch/arm/plat-omap/omap_device.c
 +++ b/arch/arm/plat-omap/omap_device.c
 @@ -310,7 +310,7 @@ static void _add_optional_clock_clkdev(struct 
 omap_device *od,
   * return the context loss counter for that hwmod, otherwise return
   * zero.
   */
 -u32 omap_device_get_context_loss_count(struct platform_device *pdev)
 +int omap_device_get_context_loss_count(struct platform_device *pdev)
  {
       struct omap_device *od;
       u32 ret = 0;


 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-13 Thread Tomi Valkeinen
On Mon, 2011-06-13 at 11:37 -0500, Ghongdemath, Girish wrote:
 Tomi,
 Couple of queries,
 
 On Mon, Jun 13, 2011 at 4:51 AM, Tomi Valkeinen tomi.valkei...@ti.com wrote:
  Paul, can you take this patch and queue it for an rc?
 
   Tomi
 
  On Thu, 2011-06-09 at 16:56 +0300, Tomi Valkeinen wrote:
  get_context_loss_count functions return context loss count as u32, and
  zero means an error. However, zero is also returned when context has
  never been lost and could also be returned when the context loss count
  has wrapped and goes to zero.
 
  Change the functions to return an int, with negative value meaning an
  error.
 
 
  + if (off_mode_enabled) {
 
 - why have a check for off_mode_enabled? As this only detects valid
 next state for MPU/CORE. Other pwrdm can still
 hit OFF.

It does what the code did previously, without changing the logic. And
this doesn't detect anything, it's just an dummy emulation for context
loss to test the drivers.

  + count++;
  + /*
  +  * Context loss count has to be a non-negative value.
  +  * Clear the sign bit to get a value range from 0 to
  +  * INT_MAX.
  +  */
  + count = INT_MAX;
  + dummy_context_loss_counter = count;
  + }
}
 
 - Why not use u32 instead?

So that we can return error values. That was the whole point of this
patch.

 Tomi


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int

2011-06-09 Thread Tomi Valkeinen
get_context_loss_count functions return context loss count as u32, and
zero means an error. However, zero is also returned when context has
never been lost and could also be returned when the context loss count
has wrapped and goes to zero.

Change the functions to return an int, with negative value meaning an
error.

OMAP HSMMC code uses omap_pm_get_dev_context_loss_count(), but as the
hsmmc code handles the returned value as an int, with negative value
meaning an error, this patch actually fixes hsmmc code also.

Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
Acked-by: Kevin Hilman khil...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod.c  |2 +-
 arch/arm/mach-omap2/powerdomain.c |   14 ++
 arch/arm/mach-omap2/powerdomain.h |2 +-
 arch/arm/plat-omap/include/plat/omap-pm.h |4 ++--
 arch/arm/plat-omap/include/plat/omap_device.h |2 +-
 arch/arm/plat-omap/include/plat/omap_hwmod.h  |2 +-
 arch/arm/plat-omap/omap-pm-noop.c |   24 +---
 arch/arm/plat-omap/omap_device.c  |2 +-
 8 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index e034294..4f0d554 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -2332,7 +2332,7 @@ ohsps_unlock:
  * Returns the context loss count of the powerdomain assocated with @oh
  * upon success, or zero if no powerdomain exists for @oh.
  */
-u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
+int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
 {
struct powerdomain *pwrdm;
int ret = 0;
diff --git a/arch/arm/mach-omap2/powerdomain.c 
b/arch/arm/mach-omap2/powerdomain.c
index 9af0847..9d53a34 100644
--- a/arch/arm/mach-omap2/powerdomain.c
+++ b/arch/arm/mach-omap2/powerdomain.c
@@ -935,16 +935,16 @@ int pwrdm_post_transition(void)
  * @pwrdm: struct powerdomain * to wait for
  *
  * Context loss count is the sum of powerdomain off-mode counter, the
- * logic off counter and the per-bank memory off counter.  Returns 0
+ * logic off counter and the per-bank memory off counter.  Returns negative
  * (and WARNs) upon error, otherwise, returns the context loss count.
  */
-u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
+int pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
 {
int i, count;
 
if (!pwrdm) {
WARN(1, powerdomain: %s: pwrdm is null\n, __func__);
-   return 0;
+   return -ENODEV;
}
 
count = pwrdm-state_counter[PWRDM_POWER_OFF];
@@ -953,7 +953,13 @@ u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
for (i = 0; i  pwrdm-banks; i++)
count += pwrdm-ret_mem_off_counter[i];
 
-   pr_debug(powerdomain: %s: context loss count = %u\n,
+   /*
+* Context loss count has to be a non-negative value. Clear the sign
+* bit to get a value range from 0 to INT_MAX.
+*/
+   count = INT_MAX;
+
+   pr_debug(powerdomain: %s: context loss count = %d\n,
 pwrdm-name, count);
 
return count;
diff --git a/arch/arm/mach-omap2/powerdomain.h 
b/arch/arm/mach-omap2/powerdomain.h
index d23d979..012827f 100644
--- a/arch/arm/mach-omap2/powerdomain.h
+++ b/arch/arm/mach-omap2/powerdomain.h
@@ -207,7 +207,7 @@ int pwrdm_clkdm_state_switch(struct clockdomain *clkdm);
 int pwrdm_pre_transition(void);
 int pwrdm_post_transition(void);
 int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm);
-u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
+int pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
 bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm);
 
 extern void omap2xxx_powerdomains_init(void);
diff --git a/arch/arm/plat-omap/include/plat/omap-pm.h 
b/arch/arm/plat-omap/include/plat/omap-pm.h
index c0a7520..68df031 100644
--- a/arch/arm/plat-omap/include/plat/omap-pm.h
+++ b/arch/arm/plat-omap/include/plat/omap-pm.h
@@ -350,9 +350,9 @@ unsigned long omap_pm_cpu_get_freq(void);
  * driver must restore device context.   If the number of context losses
  * exceeds the maximum positive integer, the function will wrap to 0 and
  * continue counting.  Returns the number of context losses for this device,
- * or zero upon error.
+ * or negative value upon error.
  */
-u32 omap_pm_get_dev_context_loss_count(struct device *dev);
+int omap_pm_get_dev_context_loss_count(struct device *dev);
 
 void omap_pm_enable_off_mode(void);
 void omap_pm_disable_off_mode(void);
diff --git a/arch/arm/plat-omap/include/plat/omap_device.h 
b/arch/arm/plat-omap/include/plat/omap_device.h
index e4c349f..70d31d0 100644
--- a/arch/arm/plat-omap/include/plat/omap_device.h
+++ b/arch/arm/plat-omap/include/plat/omap_device.h
@@ -107,7 +107,7 @@ void __iomem *omap_device_get_rt_va(struct omap_device *od);
 int omap_device_align_pm_lat(struct platform_device *pdev,