On Thu, Oct 10, 2019 at 01:39:35PM +0200, Ulf Hansson wrote: > In order to enable a CPU to be power managed through its PM domain, let's > try to attach it by calling psci_dt_attach_cpu() during the cpuidle > initialization. > > psci_dt_attach_cpu() returns a pointer to the attached struct device, which > later should be used for runtime PM, hence we need to store it somewhere. > Rather than adding yet another per CPU variable, let's create a per CPU > struct to collect the relevant per CPU variables. > > Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx> > --- > drivers/cpuidle/cpuidle-psci.c | 23 +++++++++++++++++++---- > 1 file changed, 19 insertions(+), 4 deletions(-) > > diff --git a/drivers/cpuidle/cpuidle-psci.c b/drivers/cpuidle/cpuidle-psci.c > index a16467daf99d..1510422c7a53 100644 > --- a/drivers/cpuidle/cpuidle-psci.c > +++ b/drivers/cpuidle/cpuidle-psci.c > @@ -23,7 +23,12 @@ > #include "cpuidle-psci.h" > #include "dt_idle_states.h" > > -static DEFINE_PER_CPU_READ_MOSTLY(u32 *, psci_power_state); > +struct psci_cpuidle_data { > + u32 *psci_states; > + struct device *dev; > +}; > + > +static DEFINE_PER_CPU_READ_MOSTLY(struct psci_cpuidle_data, psci_cpuidle_data); > static DEFINE_PER_CPU(u32, domain_state); > /me just thinking still: If it make sense to keep psci_states separate and domain_state and only other things needed for RPM/OSI in the structure. I do understand that we modify domain_state and hence we can't use READ_MOSTLY then. Let's see, for now keep it as is, thought I will think out aloud. -- Regards, Sudeep