Hi Jouni,

On Fri, 7 Nov 2008, Högander Jouni wrote:

> What do you Paul think about patch below:

I'm okay with it, but one potential problem: won't this prevent the chip 
from entering retention, since SGX will be set to ON?

Anyway, if you agree this is a problem, what do you think about adding a 
powerdomain flag that indicates that the powerdomain next power state 
should be set to OFF on initialization, and then testing that in 
set_pwrdm_state() ?

- Paul


> From: Jouni Hogander <[EMAIL PROTECTED]>
> Date: Fri, 7 Nov 2008 16:50:51 +0200
> Subject: [PATCH] OMAP3: PM: Check that wanted state is supported by pwrdm in 
> pwrdms_setup
> 
> Check that wanted sleep state is supported by powerdomain. If it is
> not supported, then use next highest supported state.
> 
> Signed-off-by: Jouni Hogander <[EMAIL PROTECTED]>
> ---
>  arch/arm/mach-omap2/pm34xx.c |   11 ++++++++++-
>  1 files changed, 10 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index da098d2..d9959a8 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -515,6 +515,7 @@ static void __init prcm_setup_regs(void)
>  static int __init pwrdms_setup(struct powerdomain *pwrdm)
>  {
>       struct power_state *pwrst;
> +     u32 next_state = PWRDM_POWER_RET;
>  
>       if (!pwrdm->pwrsts)
>               return 0;
> @@ -523,12 +524,20 @@ static int __init pwrdms_setup(struct powerdomain 
> *pwrdm)
>       if (!pwrst)
>               return -ENOMEM;
>       pwrst->pwrdm = pwrdm;
> -     pwrst->next_state = PWRDM_POWER_RET;
>       list_add(&pwrst->node, &pwrst_list);
>  
>       if (pwrdm_has_hdwr_sar(pwrdm))
>               pwrdm_enable_hdwr_sar(pwrdm);
>  
> +     while (!(pwrdm->pwrsts & (1 << next_state))) {
> +             if (next_state > PWRDM_POWER_ON) {
> +                     next_state = pwrdm_read_next_pwrst(pwrst->pwrdm);
> +                     break;
> +             }
> +             next_state++;
> +     }
> +     pwrst->next_state = next_state;
> +
>       return set_pwrdm_state(pwrst->pwrdm, pwrst->next_state);
>  }
>  
> -- 
> 1.6.0.1
> 
> 


- Paul

Reply via email to