Commit fca97b33 authored by Sekhar Nori's avatar Sekhar Nori Committed by Kevin Hilman

davinci: cpufreq: bailout on regulator errors

Current cpufreq code does not consider errors that can occur while
changing voltage. Code to increase CPU  frequency goes ahead even in
the case the regulator has failed to increase the voltage. This leads
to hard error since lower voltages cannot support increased frequency.

Prevent this by not increasing frequency in case increasing voltage
is not successful.

Also, do not lower the voltage if changing the cpu frequency has failed
for some reason.

Note that we do not return error on failure to decrease voltage as
that is not a hard error.

Build fix for non-cpufreq kernels by Caglar Akyuz.
Signed-off-by: default avatarSekhar Nori <nsekhar@ti.com>
Cc: Caglar Akyuz <caglar@bilkon-kontrol.com.tr>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent c89f1681
...@@ -104,15 +104,21 @@ static int davinci_target(struct cpufreq_policy *policy, ...@@ -104,15 +104,21 @@ static int davinci_target(struct cpufreq_policy *policy,
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
/* if moving to higher frequency, up the voltage beforehand */ /* if moving to higher frequency, up the voltage beforehand */
if (pdata->set_voltage && freqs.new > freqs.old) if (pdata->set_voltage && freqs.new > freqs.old) {
pdata->set_voltage(idx); ret = pdata->set_voltage(idx);
if (ret)
goto out;
}
ret = clk_set_rate(armclk, idx); ret = clk_set_rate(armclk, idx);
if (ret)
goto out;
/* if moving to lower freq, lower the voltage after lowering freq */ /* if moving to lower freq, lower the voltage after lowering freq */
if (pdata->set_voltage && freqs.new < freqs.old) if (pdata->set_voltage && freqs.new < freqs.old)
pdata->set_voltage(idx); pdata->set_voltage(idx);
out:
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
return ret; return ret;
......
...@@ -983,7 +983,7 @@ static int da850_set_pll0rate(struct clk *clk, unsigned long index) ...@@ -983,7 +983,7 @@ static int da850_set_pll0rate(struct clk *clk, unsigned long index)
return 0; return 0;
} }
#else #else
int __init da850_register_cpufreq(void) int __init da850_register_cpufreq(char *async_clk)
{ {
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment