summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNancy Chen <Nancy.Chen@freescale.com>2009-08-07 14:58:38 -0500
committerNancy Chen <Nancy.Chen@freescale.com>2009-08-12 11:54:56 -0500
commit09361580b21ae1db741a7f2d49c6b539f734f9a7 (patch)
tree76e5e0b4f3f61f5d4cd9850924bb043a55da3ba6
parentefcfe7aa7908cef9e9dd81b81ac24d27ecb023d3 (diff)
ENGR00115013 MX51: System doesn't enter APM mode if DVFS CORE enabled
MX51: System doesn't enter APM mode if DVFS CORE enabled. Signed-off-by: Nancy Chen <Nancy.Chen@freescale.com>
-rw-r--r--arch/arm/mach-mx51/bus_freq.c2
-rw-r--r--arch/arm/plat-mxc/cpufreq.c2
-rw-r--r--arch/arm/plat-mxc/dvfs_core.c32
3 files changed, 14 insertions, 22 deletions
diff --git a/arch/arm/mach-mx51/bus_freq.c b/arch/arm/mach-mx51/bus_freq.c
index bcdbbc6dfdde..bb46dd7af7c1 100644
--- a/arch/arm/mach-mx51/bus_freq.c
+++ b/arch/arm/mach-mx51/bus_freq.c
@@ -74,7 +74,7 @@ extern int lp_med_freq;
extern int dvfs_core_is_active;
struct dvfs_wp dvfs_core_setpoint[] = {{33, 7, 33, 20, 20, 0x10},
- {22, 0, 33, 20, 20, 0x10},};
+ {27, 0, 33, 20, 20, 0x10},};
int set_low_bus_freq(void)
{
diff --git a/arch/arm/plat-mxc/cpufreq.c b/arch/arm/plat-mxc/cpufreq.c
index bc489dff686a..bc3d1c97526c 100644
--- a/arch/arm/plat-mxc/cpufreq.c
+++ b/arch/arm/plat-mxc/cpufreq.c
@@ -290,7 +290,7 @@ static int mxc_cpufreq_suspend(struct cpufreq_policy *policy,
freqs.flags = 0;
if (clk_get_rate(cpu_clk) != arm_normal_clk) {
- set_high_bus_freq(0);
+ set_high_bus_freq(1);
ret = set_cpu_freq(arm_normal_clk);
}
return ret;
diff --git a/arch/arm/plat-mxc/dvfs_core.c b/arch/arm/plat-mxc/dvfs_core.c
index 019b50f9243c..e915f263e920 100644
--- a/arch/arm/plat-mxc/dvfs_core.c
+++ b/arch/arm/plat-mxc/dvfs_core.c
@@ -111,6 +111,7 @@ static struct clk *cpu_clk;
static struct clk *dvfs_clk;
static struct regulator *core_regulator;
+extern int cpu_wp_nr;
#ifdef CONFIG_ARCH_MX51
extern struct cpu_wp *(*get_cpu_wp)(int *wp);
#endif
@@ -150,7 +151,7 @@ void dvfs_core_set_bus_freq(void)
low_freq_bus_ready = low_freq_bus_used();
- if ((curr_wp == dvfs_data->num_wp - 1) && (!low_bus_freq_mode)
+ if ((curr_wp == cpu_wp_nr - 1) && (!low_bus_freq_mode)
&& (low_freq_bus_ready))
set_low_bus_freq();
else if (!low_freq_bus_ready)
@@ -226,7 +227,7 @@ static int set_cpu_freq(int wp)
/* set VINC */
reg = __raw_readl(dvfs_data->gpc_vcr_reg_addr);
reg &= ~(MXC_GPCVCR_VINC_MASK | MXC_GPCVCR_VCNTU_MASK |
- MXC_GPCVCR_VCNT_MASK);
+ MXC_GPCVCR_VCNT_MASK);
if (rate > org_cpu_rate)
reg |= 1 << MXC_GPCVCR_VINC_OFFSET;
@@ -277,7 +278,7 @@ static int set_cpu_freq(int wp)
return 0;
}
- /* Check if FSVAI indicate freq up*/
+ /* Check if FSVAI indicate freq up */
if (podf < arm_podf) {
ret = regulator_set_voltage(core_regulator,
gp_volt, gp_volt);
@@ -301,8 +302,7 @@ static int set_cpu_freq(int wp)
reg1 = __raw_readl(dvfs_data->ccm_cdhipr_reg_addr);
if ((reg1 & 0x00010000) == 0)
- __raw_writel(reg,
- dvfs_data->ccm_cacrr_reg_addr);
+ __raw_writel(reg, dvfs_data->ccm_cacrr_reg_addr);
else {
printk(KERN_DEBUG "ARM_PODF still in busy!!!!\n");
return 0;
@@ -320,7 +320,7 @@ static int set_cpu_freq(int wp)
~(MXC_GPCVCR_VINC_MASK | MXC_GPCVCR_VCNTU_MASK |
MXC_GPCVCR_VCNT_MASK);
reg |= (1 << MXC_GPCVCR_VCNTU_OFFSET) |
- (1000 << MXC_GPCVCR_VCNT_OFFSET) |
+ (100 << MXC_GPCVCR_VCNT_OFFSET) |
(vinc << MXC_GPCVCR_VINC_OFFSET);
__raw_writel(reg, dvfs_data->gpc_vcr_reg_addr);
@@ -486,18 +486,18 @@ static void dvfs_core_workqueue_handler(struct work_struct *work)
/* If FSVAI indicate freq down,
check arm-clk is not in lowest frequency 200 MHz */
if (fsvai == FSVAI_FREQ_DECREASE) {
- if (curr_cpu == cpu_wp_tbl[dvfs_data->num_wp - 1].cpu_rate) {
+ if (curr_cpu == cpu_wp_tbl[cpu_wp_nr - 1].cpu_rate) {
minf = 1;
goto END;
} else {
/* freq down */
curr_wp++;
- if (curr_wp >= dvfs_data->num_wp) {
- curr_wp = dvfs_data->num_wp - 1;
+ if (curr_wp >= cpu_wp_nr) {
+ curr_wp = cpu_wp_nr - 1;
goto END;
}
- if (curr_wp == dvfs_data->num_wp - 1)
+ if (curr_wp == cpu_wp_nr - 1)
minf = 1;
}
} else {
@@ -512,20 +512,13 @@ static void dvfs_core_workqueue_handler(struct work_struct *work)
}
low_freq_bus_ready = low_freq_bus_used();
- if ((curr_wp == dvfs_data->num_wp - 1) && (!low_bus_freq_mode)
+ if ((curr_wp == cpu_wp_nr - 1) && (!low_bus_freq_mode)
&& (low_freq_bus_ready)) {
ret = set_cpu_freq(curr_wp);
set_low_bus_freq();
} else {
- if (!high_bus_freq_mode)
- set_high_bus_freq(0);
-
+ set_high_bus_freq(0);
ret = set_cpu_freq(curr_wp);
-
- if (low_bus_freq_mode) {
- if (ret == 0)
- set_high_bus_freq(0);
- }
}
#if defined(CONFIG_CPU_FREQ)
@@ -636,7 +629,6 @@ static int __devinit mxc_dvfs_core_probe(struct platform_device *pdev)
{
int err = 0;
struct resource *res;
- int cpu_wp_nr;
int irq;
printk(KERN_INFO "mxc_dvfs_core_probe\n");