Hi Dmitry, On 6/9/20 10:13 PM, Dmitry Osipenko wrote: > The clk_round_rate() won't be usable for building OPP table once > interconnect support will be added to the EMC driver because that CLK API > function limits the rounded rate based on the clk rate that is imposed by > active clk-users, and thus, the rounding won't work as expected if > interconnect will set the minimum EMC clock rate before devfreq driver is > loaded. The struct tegra_mc contains memory timings which could be used by > the devfreq driver for building up OPP table instead of rounding clock > rate, this patch implements this idea. > > Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx> > --- > drivers/devfreq/tegra20-devfreq.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/drivers/devfreq/tegra20-devfreq.c b/drivers/devfreq/tegra20-devfreq.c > index 6469dc69c5e0..bf504ca4dea2 100644 > --- a/drivers/devfreq/tegra20-devfreq.c > +++ b/drivers/devfreq/tegra20-devfreq.c > @@ -123,8 +123,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) > { > struct tegra_devfreq *tegra; > struct tegra_mc *mc; > - unsigned long max_rate; > - unsigned long rate; > + unsigned int i; > int err; > > mc = tegra_get_memory_controller(); > @@ -151,12 +150,17 @@ static int tegra_devfreq_probe(struct platform_device *pdev) > > tegra->regs = mc->regs; > > - max_rate = clk_round_rate(tegra->emc_clock, ULONG_MAX); > - > - for (rate = 0; rate <= max_rate; rate++) { > - rate = clk_round_rate(tegra->emc_clock, rate); > + if (!mc->num_timings) { Could you explain what is meaning of 'num_timing? Also, why add the opp entry in case of mc->num_timings is zero? > + err = dev_pm_opp_add(&pdev->dev, > + clk_get_rate(tegra->emc_clock), 0); > + if (err) { > + dev_err(&pdev->dev, "failed to add OPP: %d\n", err); > + return err; > + } > + } > > - err = dev_pm_opp_add(&pdev->dev, rate, 0); > + for (i = 0; i < mc->num_timings; i++) { > + err = dev_pm_opp_add(&pdev->dev, mc->timings[i].rate, 0); > if (err) { > dev_err(&pdev->dev, "failed to add opp: %d\n", err); > goto remove_opps; > -- Best Regards, Chanwoo Choi Samsung Electronics