Re: [PATCH v2 09/15] PM / devfreq: Switch to dev_pm_opp_find_freq_{ceil/floor}_indexed() APIs

From: Manivannan Sadhasivam
Date: Mon Jul 24 2023 - 01:46:44 EST


On Mon, Jul 24, 2023 at 05:06:04AM +0900, Chanwoo Choi wrote:
> Hi,
>
> On 23. 7. 20. 14:40, Manivannan Sadhasivam wrote:
> > Some devfreq consumers like UFS driver need to work with multiple clocks
> > through the OPP framework. For this reason, OPP framework exposes the
> > _indexed() APIs for finding the floor/ceil of the supplied frequency of
> > the indexed clock. So let's use them in the devfreq driver.
> >
> > Currently, the clock index of 0 is used which works fine for multiple as
> > well as single clock.
> >
> > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>
> > ---
> > drivers/devfreq/devfreq.c | 14 +++++++-------
> > 1 file changed, 7 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
> > index e36cbb920ec8..7686993d639f 100644
> > --- a/drivers/devfreq/devfreq.c
> > +++ b/drivers/devfreq/devfreq.c
> > @@ -88,7 +88,7 @@ static unsigned long find_available_min_freq(struct devfreq *devfreq)
> > struct dev_pm_opp *opp;
> > unsigned long min_freq = 0;
> >
> > - opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &min_freq);
> > + opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &min_freq, 0);
>
> This patch changed the used function from dev_pm_opp_find_freq_ceil
> to dev_pm_opp_find_freq_ceil_indexed even if there are no supporting of the multiple clocks
> and then dev_pm_opp_find_freq_ceil is not removed from OPP.
>
> I think that it is better to use dev_pm_opp_find_freq_ceil_indexed
> when need to support multiple clocks with real case.
>

There is the user for dev_pm_opp_find_freq_ceil_indexed() which is the UFS
driver and since UFS is using devfreq, we need this change. I've added this info
in the commit message as well. What am I missing?

- Mani

> > if (IS_ERR(opp))
> > min_freq = 0;
> > else
> > @@ -102,7 +102,7 @@ static unsigned long find_available_max_freq(struct devfreq *devfreq)
> > struct dev_pm_opp *opp;
> > unsigned long max_freq = ULONG_MAX;
> >
> > - opp = dev_pm_opp_find_freq_floor(devfreq->dev.parent, &max_freq);
> > + opp = dev_pm_opp_find_freq_floor_indexed(devfreq->dev.parent, &max_freq, 0);
> > if (IS_ERR(opp))
> > max_freq = 0;
> > else
> > @@ -196,7 +196,7 @@ static int set_freq_table(struct devfreq *devfreq)
> > return -ENOMEM;
> >
> > for (i = 0, freq = 0; i < devfreq->max_state; i++, freq++) {
> > - opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &freq);
> > + opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &freq, 0);
> > if (IS_ERR(opp)) {
> > devm_kfree(devfreq->dev.parent, devfreq->freq_table);
> > return PTR_ERR(opp);
> > @@ -2034,18 +2034,18 @@ struct dev_pm_opp *devfreq_recommended_opp(struct device *dev,
> >
> > if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) {
> > /* The freq is an upper bound. opp should be lower */
> > - opp = dev_pm_opp_find_freq_floor(dev, freq);
> > + opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0);
> >
> > /* If not available, use the closest opp */
> > if (opp == ERR_PTR(-ERANGE))
> > - opp = dev_pm_opp_find_freq_ceil(dev, freq);
> > + opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0);
> > } else {
> > /* The freq is an lower bound. opp should be higher */
> > - opp = dev_pm_opp_find_freq_ceil(dev, freq);
> > + opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0);
> >
> > /* If not available, use the closest opp */
> > if (opp == ERR_PTR(-ERANGE))
> > - opp = dev_pm_opp_find_freq_floor(dev, freq);
> > + opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0);
> > }
> >
> > return opp;
>
> --
> Best Regards,
> Samsung Electronics
> Chanwoo Choi
>

--
மணிவண்ணன் சதாசிவம்