Merge branch 'cpufreq-fix-notification-arm' of git://git.linaro.org/people/vireshk/linux into pm-cpufreq-arm
Pull ARM cpufreq updates from Viresh Kumar. * 'cpufreq-fix-notification-arm' of git://git.linaro.org/people/vireshk/linux: cpufreq: tegra: call CPUFREQ_POSTCHANGE notfier in error cases cpufreq: s3c64xx: call CPUFREQ_POSTCHANGE notfier in error cases cpufreq: omap: call CPUFREQ_POSTCHANGE notfier in error cases cpufreq: imx6q: call CPUFREQ_POSTCHANGE notfier in error cases cpufreq: exynos: call CPUFREQ_POSTCHANGE notfier in error cases cpufreq: dbx500: call CPUFREQ_POSTCHANGE notfier in error cases cpufreq: davinci: call CPUFREQ_POSTCHANGE notfier in error cases cpufreq: arm-big-little: call CPUFREQ_POSTCHANGE notfier in error cases
This commit is contained in:
commit
027f6d582c
|
@ -84,11 +84,9 @@ static int bL_cpufreq_set_target(struct cpufreq_policy *policy,
|
|||
ret = clk_set_rate(clk[cur_cluster], freqs.new * 1000);
|
||||
if (ret) {
|
||||
pr_err("clk_set_rate failed: %d\n", ret);
|
||||
return ret;
|
||||
freqs.new = freqs.old;
|
||||
}
|
||||
|
||||
policy->cur = freqs.new;
|
||||
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -114,6 +114,9 @@ static int davinci_target(struct cpufreq_policy *policy,
|
|||
pdata->set_voltage(idx);
|
||||
|
||||
out:
|
||||
if (ret)
|
||||
freqs.new = freqs.old;
|
||||
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -57,13 +57,13 @@ static int dbx500_cpufreq_target(struct cpufreq_policy *policy,
|
|||
if (ret) {
|
||||
pr_err("dbx500-cpufreq: Failed to set armss_clk to %d Hz: error %d\n",
|
||||
freqs.new * 1000, ret);
|
||||
return ret;
|
||||
freqs.new = freqs.old;
|
||||
}
|
||||
|
||||
/* post change notification */
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static unsigned int dbx500_cpufreq_getspeed(unsigned int cpu)
|
||||
|
|
|
@ -113,7 +113,8 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
|
|||
if (ret) {
|
||||
pr_err("%s: failed to set cpu voltage to %d\n",
|
||||
__func__, arm_volt);
|
||||
goto out;
|
||||
freqs.new = freqs.old;
|
||||
goto post_notify;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,14 +124,19 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
|
|||
if (ret) {
|
||||
pr_err("%s: failed to set cpu voltage to %d\n",
|
||||
__func__, safe_arm_volt);
|
||||
goto out;
|
||||
freqs.new = freqs.old;
|
||||
goto post_notify;
|
||||
}
|
||||
}
|
||||
|
||||
exynos_info->set_freq(old_index, index);
|
||||
|
||||
post_notify:
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* When the new frequency is lower than current frequency */
|
||||
if ((freqs.new < freqs.old) ||
|
||||
((freqs.new > freqs.old) && safe_arm_volt)) {
|
||||
|
|
|
@ -68,8 +68,6 @@ static int imx6q_set_target(struct cpufreq_policy *policy,
|
|||
if (freqs.old == freqs.new)
|
||||
return 0;
|
||||
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
|
||||
|
||||
rcu_read_lock();
|
||||
opp = opp_find_freq_ceil(cpu_dev, &freq_hz);
|
||||
if (IS_ERR(opp)) {
|
||||
|
@ -86,13 +84,16 @@ static int imx6q_set_target(struct cpufreq_policy *policy,
|
|||
freqs.old / 1000, volt_old / 1000,
|
||||
freqs.new / 1000, volt / 1000);
|
||||
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
|
||||
|
||||
/* scaling up? scale voltage before frequency */
|
||||
if (freqs.new > freqs.old) {
|
||||
ret = regulator_set_voltage_tol(arm_reg, volt, 0);
|
||||
if (ret) {
|
||||
dev_err(cpu_dev,
|
||||
"failed to scale vddarm up: %d\n", ret);
|
||||
return ret;
|
||||
freqs.new = freqs.old;
|
||||
goto post_notify;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -145,15 +146,18 @@ static int imx6q_set_target(struct cpufreq_policy *policy,
|
|||
if (ret) {
|
||||
dev_err(cpu_dev, "failed to set clock rate: %d\n", ret);
|
||||
regulator_set_voltage_tol(arm_reg, volt_old, 0);
|
||||
return ret;
|
||||
freqs.new = freqs.old;
|
||||
goto post_notify;
|
||||
}
|
||||
|
||||
/* scaling down? scale voltage after frequency */
|
||||
if (freqs.new < freqs.old) {
|
||||
ret = regulator_set_voltage_tol(arm_reg, volt, 0);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_warn(cpu_dev,
|
||||
"failed to scale vddarm down: %d\n", ret);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (freqs.old == FREQ_1P2_GHZ / 1000) {
|
||||
regulator_set_voltage_tol(pu_reg,
|
||||
|
@ -163,9 +167,10 @@ static int imx6q_set_target(struct cpufreq_policy *policy,
|
|||
}
|
||||
}
|
||||
|
||||
post_notify:
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int imx6q_cpufreq_init(struct cpufreq_policy *policy)
|
||||
|
|
|
@ -93,9 +93,6 @@ static int omap_target(struct cpufreq_policy *policy,
|
|||
if (freqs.old == freqs.new && policy->cur == freqs.new)
|
||||
return ret;
|
||||
|
||||
/* notifiers */
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
|
||||
|
||||
freq = freqs.new * 1000;
|
||||
ret = clk_round_rate(mpu_clk, freq);
|
||||
if (IS_ERR_VALUE(ret)) {
|
||||
|
@ -125,6 +122,9 @@ static int omap_target(struct cpufreq_policy *policy,
|
|||
freqs.old / 1000, volt_old ? volt_old / 1000 : -1,
|
||||
freqs.new / 1000, volt ? volt / 1000 : -1);
|
||||
|
||||
/* notifiers */
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
|
||||
|
||||
/* scaling up? scale voltage before frequency */
|
||||
if (mpu_reg && (freqs.new > freqs.old)) {
|
||||
r = regulator_set_voltage(mpu_reg, volt - tol, volt + tol);
|
||||
|
|
|
@ -104,7 +104,8 @@ static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy,
|
|||
if (ret != 0) {
|
||||
pr_err("Failed to set VDDARM for %dkHz: %d\n",
|
||||
freqs.new, ret);
|
||||
goto err;
|
||||
freqs.new = freqs.old;
|
||||
goto post_notify;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -113,10 +114,13 @@ static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy,
|
|||
if (ret < 0) {
|
||||
pr_err("Failed to set rate %dkHz: %d\n",
|
||||
freqs.new, ret);
|
||||
goto err;
|
||||
freqs.new = freqs.old;
|
||||
}
|
||||
|
||||
post_notify:
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
if (vddarm && freqs.new < freqs.old) {
|
||||
|
|
|
@ -138,12 +138,12 @@ static int tegra_update_cpu_speed(struct cpufreq_policy *policy,
|
|||
if (ret) {
|
||||
pr_err("cpu-tegra: Failed to set cpu frequency to %d kHz\n",
|
||||
freqs.new);
|
||||
return ret;
|
||||
freqs.new = freqs.old;
|
||||
}
|
||||
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static unsigned long tegra_cpu_highest_speed(void)
|
||||
|
|
Loading…
Reference in New Issue