Message ID | 1306366733-8439-5-git-send-email-nm@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, May 25, 2011 at 04:38:49PM -0700, Nishanth Menon wrote: > OMAP2+ all have frequency tables, hence the hacks we had for older > silicon do not need to be carried forward. As part of this change, > use cpufreq_frequency_table_target to find the best match for > frequency requested. > > Signed-off-by: Nishanth Menon <nm@ti.com> ... > @@ -79,22 +66,35 @@ static int omap_target(struct cpufreq_policy *policy, > unsigned int target_freq, > unsigned int relation) > { > - int i, ret = 0; > + unsigned int i; > + int ret = 0; > struct cpufreq_freqs freqs; > > /* Changes not allowed until all CPUs are online */ > if (is_smp() && (num_online_cpus() < NR_CPUS)) > return ret; > > - /* Ensure desired rate is within allowed range. Some govenors > - * (ondemand) will just pass target_freq=0 to get the minimum. */ > - if (target_freq < policy->min) > - target_freq = policy->min; > - if (target_freq > policy->max) > - target_freq = policy->max; > + if (!freq_table) { > + dev_err(mpu_dev, "%s: cpu%d: no freq table!\n", __func__, > + policy->cpu); Just a minor comment: suggest dev_dbg() or WARN_ONCE() for some of these conditions that may be frequently evaluated and probably won't be cleared up after being hit once. ... Todd -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, May 25, 2011 at 17:51, Todd Poynor <toddpoynor@google.com> wrote: > >> + if (!freq_table) { >> + dev_err(mpu_dev, "%s: cpu%d: no freq table!\n", __func__, >> + policy->cpu); > > Just a minor comment: suggest dev_dbg() or WARN_ONCE() for some of > these conditions that may be frequently evaluated and probably won't > be cleared up after being hit once. This is an error because we dont expect it as far as the device is concerned. I'd use a debug/warn if I can recover out of it and continue functionality. Regards, Nishanth Menon -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, May 25, 2011 at 17:53, ym cheng <yongmingcheng@hotmail.com> wrote:
> OK,I wil test on s3c2440 board,and share test data.
The series was meant for OMAP, if you meant:
http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=836&partnum=S3C2440
as far as I see, this platform is supported on arch/arm/mach-s3c24*
Regards,
Nishanth Menon
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c index dbbf8b2..7c0eb77 100644 --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c @@ -38,8 +38,6 @@ #include <mach/hardware.h> -#define VERY_HI_RATE 900000000 - static struct cpufreq_frequency_table *freq_table; static struct clk *mpu_clk; static char *mpu_clk_name; @@ -48,20 +46,9 @@ static bool use_opp; static int omap_verify_speed(struct cpufreq_policy *policy) { - if (freq_table) - return cpufreq_frequency_table_verify(policy, freq_table); - - if (policy->cpu) + if (!freq_table) return -EINVAL; - - cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, - policy->cpuinfo.max_freq); - - policy->min = clk_round_rate(mpu_clk, policy->min * 1000) / 1000; - policy->max = clk_round_rate(mpu_clk, policy->max * 1000) / 1000; - cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, - policy->cpuinfo.max_freq); - return 0; + return cpufreq_frequency_table_verify(policy, freq_table); } static unsigned int omap_getspeed(unsigned int cpu) @@ -79,22 +66,35 @@ static int omap_target(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation) { - int i, ret = 0; + unsigned int i; + int ret = 0; struct cpufreq_freqs freqs; /* Changes not allowed until all CPUs are online */ if (is_smp() && (num_online_cpus() < NR_CPUS)) return ret; - /* Ensure desired rate is within allowed range. Some govenors - * (ondemand) will just pass target_freq=0 to get the minimum. */ - if (target_freq < policy->min) - target_freq = policy->min; - if (target_freq > policy->max) - target_freq = policy->max; + if (!freq_table) { + dev_err(mpu_dev, "%s: cpu%d: no freq table!\n", __func__, + policy->cpu); + return -EINVAL; + } + + ret = cpufreq_frequency_table_target(policy, freq_table, target_freq, + relation, &i); + if (ret) { + dev_dbg(mpu_dev, "%s: cpu%d: no freq match for %d(ret=%d)\n", + __func__, policy->cpu, target_freq, ret); + return ret; + } + freqs.new = freq_table[i].frequency; + if (!freqs.new) { + dev_err(mpu_dev, "%s: cpu%d: no match for freq %d\n", __func__, + policy->cpu, target_freq); + return -EINVAL; + } freqs.old = omap_getspeed(policy->cpu); - freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; freqs.cpu = policy->cpu; if (freqs.old == freqs.new) @@ -172,17 +172,17 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) else clk_init_cpufreq_table(&freq_table); - if (freq_table) { - result = cpufreq_frequency_table_cpuinfo(policy, freq_table); - if (!result) - cpufreq_frequency_table_get_attr(freq_table, - policy->cpu); - } else { - policy->cpuinfo.min_freq = clk_round_rate(mpu_clk, 0) / 1000; - policy->cpuinfo.max_freq = clk_round_rate(mpu_clk, - VERY_HI_RATE) / 1000; + if (!freq_table) { + dev_err(mpu_dev, "%s: cpu%d: unable to allocate freq table\n", + __func__, policy->cpu); + return -ENOMEM; } + result = cpufreq_frequency_table_cpuinfo(policy, freq_table); + if (!result) + cpufreq_frequency_table_get_attr(freq_table, + policy->cpu); + policy->min = policy->cpuinfo.min_freq; policy->max = policy->cpuinfo.max_freq; policy->cur = omap_getspeed(policy->cpu);
OMAP2+ all have frequency tables, hence the hacks we had for older silicon do not need to be carried forward. As part of this change, use cpufreq_frequency_table_target to find the best match for frequency requested. Signed-off-by: Nishanth Menon <nm@ti.com> --- arch/arm/mach-omap2/omap2plus-cpufreq.c | 64 +++++++++++++++--------------- 1 files changed, 32 insertions(+), 32 deletions(-)