[PATCH v6 2/7] drivers: cpuidle: implement DT based idle states infrastructure

Ashwin Chaugule ashwin.chaugule at linaro.org
Wed Jul 23 12:08:49 PDT 2014


Hi Lorenzo,

On 23 July 2014 13:32, Lorenzo Pieralisi <lorenzo.pieralisi at arm.com> wrote:
>> > +/**
>> > + * dt_init_idle_driver() - Parse the DT idle states and initialize the
>> > + *                        idle driver states array
>> > + *
>> > + * @drv:         Pointer to CPU idle driver to be initialized
>> > + * @start_idx:    First idle state index to be initialized
>> > + *
>> > + * On success the states array in the cpuidle driver contains
>> > + * initialized entries in the states array, starting from index start_idx.
>> > + *
>> > + * Return:
>> > + *     0 on success
>> > + *     <0 on failure
>> > + */
>> > +int dt_init_idle_driver(struct cpuidle_driver *drv, unsigned int start_idx)
>> > +{
>> > +       unsigned int i, state_idx = start_idx;
>> > +       struct cpuidle_state *idle_state;
>> > +       struct device_node *state_node, *cpu_node;
>> > +
>> > +
>> > +       if (state_idx >= CPUIDLE_STATE_MAX)
>> > +               return -EINVAL;
>> > +       /*
>> > +        * We get the idle states for the first logical cpu in the
>> > +        * driver mask. The kernel does not check idle states on all
>> > +        * cpus in the driver mask, they are assumed to be the same
>> > +        * by default.
>> > +        */
>> > +       cpu_node = of_cpu_device_node_get(cpumask_first(drv->cpumask));
>>
>> Is this an assumption for the short term? My understanding from the
>> corresponding ACPI discussions is that the order of idle states may
>> not necessarily be same for all CPUs, even for big.Little?
>
> Well, it is more of a problem of the CPUidle infrastructure than related
> to this specific patchset. The idle states for a specific cpumask (ie CPUidle
> driver) are expected to be all the same, same order same data.
>
> Current driver can be used on homegeneous ARM64 SMP systems, but I am fairly
> confident we can extend it for big.LITTLE and also other funky SMP
> configurations, the parsing code only expects all cpus in the mask
> to have the same set of idle states (and so does the CPUidle core), if that's
> not the case, the cpus belong in different CPUidle drivers (ie a CPUidle
> driver is a set of states valid on a cpumask).
>
> So my answer is yes, it is a proper assumption and not only for the
> short term, but in general.
>
> HTH,
> Lorenzo

Ok. Thanks for the explanation. I just had a look at
drivers/cpuidle/cpuidle-big_little.c. So, you'll need another call to
cpuidle_register() should there be another cpumask with a different
set of idle states.

Cheers,
Ashwin



More information about the linux-arm-kernel mailing list