Hi Sebastian, On Mon, May 13, 2013 at 07:53:42PM +0100, Sebastian Capella wrote: > Pass residency information to the mcpm_cpu_suspend. The information > is taken from the target_residency of the intended C-state. > > When a platform uses multiple powerdown cstates, the residency information > indicates which powerdown state is targeted. Multiple powerdown cstate > information can be maintained in the device tree and the vendor specific > handling will then have enough information to determine what power state to > enter without needing additional changes to the big_little framework. > > Signed-off-by: Sebastian Capella <sebastian.cape...@linaro.org> > --- > drivers/cpuidle/arm_big_little.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/cpuidle/arm_big_little.c > b/drivers/cpuidle/arm_big_little.c > index a430800..8332b05 100644 > --- a/drivers/cpuidle/arm_big_little.c > +++ b/drivers/cpuidle/arm_big_little.c
I could not find a branch that contains this file. Which git tree and branch are you using? > @@ -89,7 +89,7 @@ static int notrace bl_powerdown_finisher(unsigned long arg) > unsigned int cpu = mpidr & 0xf; > > mcpm_set_entry_vector(cpu, cluster, cpu_resume); > - mcpm_cpu_suspend(0); /* 0 should be replaced with better value here */ > + mcpm_cpu_suspend(arg); > return 1; > } > > @@ -107,6 +107,7 @@ static int bl_enter_powerdown(struct cpuidle_device *dev, > { > struct timespec ts_preidle, ts_postidle, ts_idle; > int ret; > + struct cpuidle_state *state = &drv->states[idx]; > > /* Used to keep track of the total time in idle */ > getnstimeofday(&ts_preidle); > @@ -117,7 +118,8 @@ static int bl_enter_powerdown(struct cpuidle_device *dev, > > clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &dev->cpu); > > - ret = cpu_suspend((unsigned long) dev, bl_powerdown_finisher); > + ret = cpu_suspend((unsigned long) state->target_residency, > + bl_powerdown_finisher); I don't think you should pass the target residency here but the intended C-state. Think about what will happen when you run this in a guest kernel: is the target_residency the same if the guest has been migrated from a big core that might have a faster execution of the down/up path to a little core that is slower? The intended C-state should stay the same, regardless of the actual time it takes to get there and out, which affects the actual time spent inside the state. Best regards, Liviu -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯ _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev