Re: [PATCH V3 0/7] PM / Domains: Implement domain performance states

From: Viresh Kumar
Date: Mon Mar 13 2017 - 06:39:58 EST

On 10-03-17, 12:38, Kevin Hilman wrote:
> Why limit it to just voltage levels.
> As I suggested earlier, I think this should use OPPs. Remember that a
> PM domain is not limited to a hardware power domain, but is just a
> grouping mechanism for devices that share some PM properties. As
> mentioned by Geert, this can also be a clock domain, where frequencies
> would make sense as well. One can imagine using this type of PM domain
> to manage an interconnect/bus which has scalable voltage/frequencies as
> well.

Okay, I tried to do that change today and am blocked a bit right now.

The OPP core and all of its APIs/interfaces have dependency on the
"struct device" for their working. It gets the of_node from it, stores
the device pointer to manage cases where multiple devices share OPP
table, uses it to get clk and regulators.

But the "genpd" structure doesn't have a 'struct device' associated
with it. How should I make both of them work together?

I tried to create separate helpers that don't accept 'dev', but that
is also not good. Just too much redundant code everywhere.

Would creating a 'dev' structure within 'generic_pm_domain' be
acceptable? Or should we ask the domain-drivers to call something like
of_genpd_parse_idle_states(), with a fake 'dev' structure which has
its of_node initialized? Or maybe move that hack within the OPP-core
API, which can create a dev structure at runtime for the genpd passed
to it and get the OPP table out?