On 01-07-24, 17:17, Viresh Kumar wrote: > What about this patch instead ? > > diff --git a/drivers/opp/core.c b/drivers/opp/core.c > index 5f4598246a87..2086292f8355 100644 > --- a/drivers/opp/core.c > +++ b/drivers/opp/core.c > @@ -1091,7 +1091,8 @@ static int _set_required_opps(struct device *dev, struct opp_table *opp_table, > if (devs[index]) { > required_opp = opp ? opp->required_opps[index] : NULL; > > - ret = dev_pm_opp_set_opp(devs[index], required_opp); > + /* Set required OPPs forcefully */ > + ret = dev_pm_opp_set_opp_forced(devs[index], required_opp, true); Maybe better to do just this instead: diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 5f4598246a87..9484acbeaa66 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1386,7 +1386,12 @@ int dev_pm_opp_set_opp(struct device *dev, struct dev_pm_opp *opp) return PTR_ERR(opp_table); } - ret = _set_opp(dev, opp_table, opp, NULL, false); + /* + * For a genpd's OPP table, we always want to set the OPP (and + * performance level) and let the genpd core take care of aggregating + * the votes. Set `forced` to true for a genpd here. + */ + ret = _set_opp(dev, opp_table, opp, NULL, opp_table->is_genpd); dev_pm_opp_put_opp_table(opp_table); return ret; -- viresh