On Fri, 2022-04-15 at 14:14 +0800, Hsin-Yi Wang wrote: > On Fri, Apr 15, 2022 at 1:59 PM Rex-BC Chen <rex-bc.chen@xxxxxxxxxxxx > > wrote: > > > > To prevent infinite loop when tracking voltage, we calculate the > > maximum > > value for each platform data. > > We assume min voltage is 0 and tracking target voltage using > > min_volt_shift for each iteration. > > The retry_max is 3 times of expeted iteration count. > > > > Signed-off-by: Rex-BC Chen <rex-bc.chen@xxxxxxxxxxxx> > > --- > > drivers/cpufreq/mediatek-cpufreq.c | 16 ++++++++++++++++ > > 1 file changed, 16 insertions(+) > > > > diff --git a/drivers/cpufreq/mediatek-cpufreq.c > > b/drivers/cpufreq/mediatek-cpufreq.c > > index cc44a7a9427a..d4c00237e862 100644 > > --- a/drivers/cpufreq/mediatek-cpufreq.c > > +++ b/drivers/cpufreq/mediatek-cpufreq.c > > @@ -86,6 +86,16 @@ static int mtk_cpufreq_voltage_tracking(struct > > mtk_cpu_dvfs_info *info, > > struct regulator *proc_reg = info->proc_reg; > > struct regulator *sram_reg = info->sram_reg; > > int pre_vproc, pre_vsram, new_vsram, vsram, vproc, ret; > > + int retry_max; > > + > > + /* > > + * We assume min voltage is 0 and tracking target voltage > > using > > + * min_volt_shift for each iteration. > > + * The retry_max is 3 times of expeted iteration count. > > + */ > > + retry_max = 3 * DIV_ROUND_UP(max(info->soc_data- > > >sram_max_volt, > > + info->soc_data- > > >proc_max_volt), > > + info->soc_data- > > >min_volt_shift); > > mtk_cpufreq_voltage_tracking() will be called very frequently. > retry_max is the same every time mtk_cpufreq_voltage_tracking() is > called. Is it better to calculate before and store in > mtk_cpu_dvfs_info? > Hello Hsin-Yi, Thanks for your reviwew. I will do this in next version. BRs, Rex > > > > pre_vproc = regulator_get_voltage(proc_reg); > > if (pre_vproc < 0) { > > @@ -151,6 +161,12 @@ static int mtk_cpufreq_voltage_tracking(struct > > mtk_cpu_dvfs_info *info, > > > > pre_vproc = vproc; > > pre_vsram = vsram; > > + > > + if (--retry_max < 0) { > > + dev_err(info->cpu_dev, > > + "over loop count, failed to set > > voltage\n"); > > + return -EINVAL; > > + } > > } while (vproc != new_vproc || vsram != new_vsram); > > > > return 0; > > -- > > 2.18.0 > >