[PM-WIP_CPUFREQ][PATCH V3 4/8] OMAP2+: cpufreq: dont support !freq_table

2011-05-25 Thread Nishanth Menon
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 n...@ti.com
---
 arch/arm/mach-omap2/omap2plus-cpufreq.c |   64 +++---
 1 files changed, 32 insertions(+), 32 deletions(-)

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   9
-
 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);
-- 
1.7.1

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PM-WIP_CPUFREQ][PATCH V3 4/8] OMAP2+: cpufreq: dont support !freq_table

2011-05-25 Thread Todd Poynor
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 n...@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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PM-WIP_CPUFREQ][PATCH V3 4/8] OMAP2+: cpufreq: dont support !freq_table

2011-05-25 Thread Menon, Nishanth
On Wed, May 25, 2011 at 17:51, Todd Poynor toddpoy...@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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PM-WIP_CPUFREQ][PATCH V3 4/8] OMAP2+: cpufreq: dont support !freq_table

2011-05-25 Thread Menon, Nishanth
On Wed, May 25, 2011 at 17:53, ym cheng yongmingch...@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=836partnum=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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html