On Tuesday, October 14, 2014 01:23:00 PM Preeti U Murthy wrote:
> We hard code the metrics relevant for cpuidle states in the kernel today.
> Instead pick them up from the device tree so that they remain relevant
> and updated for the system that the kernel is running on.
> 
> Cc: linux...@vger.kernel.org
> Cc: Rafael J. Wysocki <r...@rjwysocki.net>
> Cc: devicet...@vger.kernel.org
> Cc: linuxppc-dev@lists.ozlabs.org
> Cc: Michael Ellerman <m...@ellerman.id.au>
> Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org>
> Signed-off-by: Preeti U. Murthy <pre...@linux.vnet.ibm.com>
> Signed-off-by: Shreyas B. Prabhu <shre...@linux.vnet.ibm.com>

Applied, thanks!

> ---
> 
>  drivers/cpuidle/cpuidle-powernv.c |   27 ++++++++++++++++++++++-----
>  1 file changed, 22 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/cpuidle/cpuidle-powernv.c 
> b/drivers/cpuidle/cpuidle-powernv.c
> index fa79392..b57681d 100644
> --- a/drivers/cpuidle/cpuidle-powernv.c
> +++ b/drivers/cpuidle/cpuidle-powernv.c
> @@ -165,7 +165,8 @@ static int powernv_add_idle_states(void)
>       int nr_idle_states = 1; /* Snooze */
>       int dt_idle_states;
>       const __be32 *idle_state_flags;
> -     u32 len_flags, flags;
> +     const __be32 *idle_state_latency;
> +     u32 len_flags, flags, latency_ns;
>       int i;
>  
>       /* Currently we have snooze statically defined */
> @@ -182,18 +183,32 @@ static int powernv_add_idle_states(void)
>               return nr_idle_states;
>       }
>  
> +     idle_state_latency = of_get_property(power_mgt,
> +                     "ibm,cpu-idle-state-latencies-ns", NULL);
> +     if (!idle_state_latency) {
> +             pr_warn("DT-PowerMgmt: missing 
> ibm,cpu-idle-state-latencies-ns\n");
> +             return nr_idle_states;
> +     }
> +
>       dt_idle_states = len_flags / sizeof(u32);
>  
>       for (i = 0; i < dt_idle_states; i++) {
>  
>               flags = be32_to_cpu(idle_state_flags[i]);
> +
> +             /* Cpuidle accepts exit_latency in us and we estimate
> +              * target residency to be 10x exit_latency
> +              */
> +             latency_ns = be32_to_cpu(idle_state_latency[i]);
>               if (flags & IDLE_USE_INST_NAP) {
>                       /* Add NAP state */
>                       strcpy(powernv_states[nr_idle_states].name, "Nap");
>                       strcpy(powernv_states[nr_idle_states].desc, "Nap");
>                       powernv_states[nr_idle_states].flags = 
> CPUIDLE_FLAG_TIME_VALID;
> -                     powernv_states[nr_idle_states].exit_latency = 10;
> -                     powernv_states[nr_idle_states].target_residency = 100;
> +                     powernv_states[nr_idle_states].exit_latency =
> +                                     ((unsigned int)latency_ns) / 1000;
> +                     powernv_states[nr_idle_states].target_residency =
> +                                     ((unsigned int)latency_ns / 100);
>                       powernv_states[nr_idle_states].enter = &nap_loop;
>                       nr_idle_states++;
>               }
> @@ -204,8 +219,10 @@ static int powernv_add_idle_states(void)
>                       strcpy(powernv_states[nr_idle_states].desc, 
> "FastSleep");
>                       powernv_states[nr_idle_states].flags =
>                               CPUIDLE_FLAG_TIME_VALID | 
> CPUIDLE_FLAG_TIMER_STOP;
> -                     powernv_states[nr_idle_states].exit_latency = 300;
> -                     powernv_states[nr_idle_states].target_residency = 
> 1000000;
> +                     powernv_states[nr_idle_states].exit_latency =
> +                                     ((unsigned int)latency_ns) / 1000;
> +                     powernv_states[nr_idle_states].target_residency =
> +                                     ((unsigned int)latency_ns / 100);
>                       powernv_states[nr_idle_states].enter = &fastsleep_loop;
>                       nr_idle_states++;
>               }
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to