Messages in this thread | | | From | Ulf Hansson <> | Date | Wed, 25 Oct 2023 12:40:26 +0200 | Subject | Re: [PATCH 1/2] OPP: Use _set_opp_level() for single genpd case |
| |
On Wed, 25 Oct 2023 at 08:55, Viresh Kumar <viresh.kumar@linaro.org> wrote: > > On 19-10-23, 13:16, Ulf Hansson wrote: > > On Thu, 19 Oct 2023 at 12:22, Viresh Kumar <viresh.kumar@linaro.org> wrote: > > > +static int _link_required_opps(struct dev_pm_opp *opp, struct opp_table *opp_table, > > > struct opp_table *required_table, int index) > > > { > > > struct device_node *np; > > > @@ -314,6 +314,25 @@ static int _link_required_opps(struct dev_pm_opp *opp, > > > return -ENODEV; > > > } > > > > > > + /* > > > + * There are two genpd (as required-opp) cases that we need to handle, > > > + * devices with a single genpd and ones with multiple genpds. > > > + * > > > + * The single genpd case requires special handling as we need to use the > > > + * same `dev` structure (instead of a virtual one provided by genpd > > > + * core) for setting the performance state. Lets treat this as a case > > > + * where the OPP's level is directly available without required genpd > > > + * link in the DT. > > > + * > > > + * Just update the `level` with the right value, which > > > + * dev_pm_opp_set_opp() will take care of in the normal path itself. > > > + */ > > > + if (required_table->is_genpd && opp_table->required_opp_count == 1 && > > > + !opp_table->genpd_virt_devs) { > > > + if (!WARN_ON(opp->level)) > > > > Hmm. Doesn't this introduce an unnecessary limitation? > > > > An opp node that has a required-opps phande, may have "opp-hz", > > "opp-microvolt", etc. Why would we not allow the "opp-level" to be > > used too? > > Coming back to this, why would we ever want a device to have "opp-level" and > "required-opp" (set to genpd's table) ? That would mean we will call: > > dev_pm_domain_set_performance_state() twice to set different level values.
Yes - and that would be weird, especially since the PM domain (genpd) is already managing the aggregation and propagation to parent domains.
I guess I got a bit confused by the commit message for patch2/2, where it sounded like you were striving towards introducing recursive calls to set OPPs. Having a closer look, I realize that isn't the case, which I think makes sense.
> > And so it should be safe to force that if required-opp table is set to a genpd, > then opp-level shouldn't be set. Maybe we should fail in that case, which isn't > happening currently.
Yes, it seems better to fail earlier during the OF parsing of the required-opps or when adding an OPP dynamically. In that way, the WARN_ON above could be removed.
That said, sorry for the noise and either way, feel free to add (for $subject patch):
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Kind regards Uffe
| |