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;