diff --git a/arch/sw_64/include/asm/clock.h b/arch/sw_64/include/asm/clock.h index 06ad4bcd6ad3f2599a15a8acfc18dd08eb3685e8..30983e8e7cc7197c8e8a482658a84ee4891ebd2e 100644 --- a/arch/sw_64/include/asm/clock.h +++ b/arch/sw_64/include/asm/clock.h @@ -48,9 +48,9 @@ int sw64_set_rate(int index, unsigned long rate); struct clk *sw64_clk_get(struct device *dev, const char *id); -unsigned long sw64_clk_get_rate(struct clk *clk); - void sw64_update_clockevents(unsigned long cpu, u32 freq); void sw64_store_policy(struct cpufreq_policy *policy); + +unsigned int __sw64_cpufreq_get(struct cpufreq_policy *policy); #endif /* _ASM_SW64_CLOCK_H */ diff --git a/arch/sw_64/kernel/clock.c b/arch/sw_64/kernel/clock.c index f31f596a00521e4b8ea193eb8adc69896f272c92..aa22e9550e296b7878ffbd1ad2ba0a9fc20840be 100644 --- a/arch/sw_64/kernel/clock.c +++ b/arch/sw_64/kernel/clock.c @@ -109,14 +109,21 @@ struct clk *sw64_clk_get(struct device *dev, const char *id) } EXPORT_SYMBOL(sw64_clk_get); -unsigned long sw64_clk_get_rate(struct clk *clk) +unsigned int __sw64_cpufreq_get(struct cpufreq_policy *policy) { - if (!clk) - return 0; + int i; + u64 val; - return (unsigned long)clk->rate; + val = sw64_io_read(0, CLK_CTL); + val = val >> CORE_PLL2_CFG_SHIFT; + + for (i = 0; i < sizeof(cpu_freq)/sizeof(int); i++) { + if (cpu_freq[val] == cpu_freq[i]) + return cpu_freq[i]; + } + return 0; } -EXPORT_SYMBOL(sw64_clk_get_rate); +EXPORT_SYMBOL(__sw64_cpufreq_get); void sw64_store_policy(struct cpufreq_policy *policy) { diff --git a/drivers/cpufreq/sw64_cpufreq.c b/drivers/cpufreq/sw64_cpufreq.c index 5f49b5175d34f634d13e71c18c87a6e142186359..b8cd37dac0d9a09557c3d87c218c6127fd841102 100644 --- a/drivers/cpufreq/sw64_cpufreq.c +++ b/drivers/cpufreq/sw64_cpufreq.c @@ -59,7 +59,7 @@ static unsigned int sw64_cpufreq_get(unsigned int cpu) return 0; } - return sw64_clk_get_rate(policy->clk); + return __sw64_cpufreq_get(policy) * 1000; } /*