On 13-11-24, 16:48, Neil Armstrong wrote: > Add and implement the dev_pm_opp_get_bandwidth() to retrieve > the OPP's bandwidth in the same was as the dev_pm_opp_get_voltage() way > helper. > > Retrieving bandwidth is required in the case of the Adreno GPU > where the GPU Management Unit can handle the Bandwidth scaling. > > The helper can get the peak or everage bandwidth for any of average > the interconnect path. > > Signed-off-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx> > --- > drivers/opp/core.c | 25 +++++++++++++++++++++++++ > include/linux/pm_opp.h | 7 +++++++ > 2 files changed, 32 insertions(+) > > diff --git a/drivers/opp/core.c b/drivers/opp/core.c > index 494f8860220d97fc690ebab5ed3b7f5f04f22d73..19fb82033de26b74e9604c33b9781689df2fe80a 100644 > --- a/drivers/opp/core.c > +++ b/drivers/opp/core.c > @@ -106,6 +106,31 @@ static bool assert_single_clk(struct opp_table *opp_table) > return !WARN_ON(opp_table->clk_count > 1); > } > > +/** > + * dev_pm_opp_get_bandwidth() - Gets the peak bandwidth corresponding to an opp s/peak bandwidth/bandwidth/ > + * @opp: opp for which voltage has to be returned for > + * @peak: select peak or average bandwidth > + * @index: bandwidth index > + * > + * Return: peak bandwidth in kBps, else return 0 s/peak bandwidth/bandwidth/ > + */ > +unsigned long dev_pm_opp_get_bandwidth(struct dev_pm_opp *opp, bool peak, int index) > +{ > + if (IS_ERR_OR_NULL(opp)) { > + pr_err("%s: Invalid parameters\n", __func__); > + return 0; > + } > + > + if (index > opp->opp_table->path_count) > + return 0; > + > + if (!opp->bandwidth) > + return 0; > + > + return peak ? opp->bandwidth[index].peak : opp->bandwidth[index].avg; > +} > +EXPORT_SYMBOL_GPL(dev_pm_opp_get_bandwidth); All other bandwidth APIs are named as _bw, maybe do same here too ? -- viresh