[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220408045908.21671-13-rex-bc.chen@mediatek.com>
Date: Fri, 8 Apr 2022 12:59:05 +0800
From: Rex-BC Chen <rex-bc.chen@...iatek.com>
To: <rafael@...nel.org>, <viresh.kumar@...aro.org>,
<robh+dt@...nel.org>, <krzk+dt@...nel.org>
CC: <matthias.bgg@...il.com>, <jia-wei.chang@...iatek.com>,
<roger.lu@...iatek.com>, <hsinyi@...gle.com>,
<linux-pm@...r.kernel.org>, <devicetree@...r.kernel.org>,
<linux-kernel@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>,
<linux-mediatek@...ts.infradead.org>,
<Project_Global_Chrome_Upstream_Group@...iatek.com>
Subject: [PATCH V2 12/15] cpufreq: mediatek: Use maximum voltage in init stage
From: Jia-Wei Chang <jia-wei.chang@...iatek.com>
Two or more clients may use the same regulator, and it could cause the
issue of high-freqeuncy-low-voltage.
To prevent this, we use maximum voltage in mtk_cpu_dvfs_info_init().
Signed-off-by: Jia-Wei Chang <jia-wei.chang@...iatek.com>
---
drivers/cpufreq/mediatek-cpufreq.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
index e69b16a6541e..b08ab7c14818 100644
--- a/drivers/cpufreq/mediatek-cpufreq.c
+++ b/drivers/cpufreq/mediatek-cpufreq.c
@@ -333,7 +333,7 @@ static int mtk_cpu_dvfs_info_init(struct mtk_cpu_dvfs_info *info, int cpu)
{
struct device *cpu_dev;
struct dev_pm_opp *opp;
- unsigned long rate;
+ unsigned long rate, opp_volt;
int ret;
cpu_dev = get_cpu_device(cpu);
@@ -417,6 +417,24 @@ static int mtk_cpu_dvfs_info_init(struct mtk_cpu_dvfs_info *info, int cpu)
info->intermediate_voltage = dev_pm_opp_get_voltage(opp);
dev_pm_opp_put(opp);
+ /* Use highest opp voltage in the init stage */
+ rate = U32_MAX;
+ opp = dev_pm_opp_find_freq_floor(info->cpu_dev, &rate);
+ if (IS_ERR(opp)) {
+ ret = PTR_ERR(opp);
+ dev_err(cpu_dev, "cpu%d: failed to get opp\n", info->opp_cpu);
+ goto out_disable_inter_clock;
+ }
+
+ opp_volt = dev_pm_opp_get_voltage(opp);
+ dev_pm_opp_put(opp);
+ ret = mtk_cpufreq_set_voltage(info, opp_volt);
+ if (ret) {
+ dev_err(cpu_dev, "cpu%d: failed to scale to highest voltage %lu in proc_reg\n",
+ info->opp_cpu, opp_volt);
+ goto out_disable_inter_clock;
+ }
+
info->opp_cpu = cpu;
info->opp_nb.notifier_call = mtk_cpufreq_opp_notifier;
ret = dev_pm_opp_register_notifier(cpu_dev, &info->opp_nb);
--
2.18.0
Powered by blists - more mailing lists