diff options
author | Paul Walmsley <paul@pwsan.com> | 2011-02-25 17:49:53 -0500 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2011-02-25 18:10:42 -0500 |
commit | c6461f5c5970833cf28c5096cdfc7a095eb3bbb5 (patch) | |
tree | c4cc4f827c7282eae12669ca30230834bc84d34a | |
parent | 70db8a6273692fdf5226c007c9882a10b3203963 (diff) |
OMAP2+: clock: disable autoidle on all clocks during clock init
Disable autoidle on all clocks during clock framework initialization.
(If CONFIG_PM is set, autoidle is re-enabled for all clocks later in
the boot process.)
The principle behind this patch, and some similar patches, is that the
kernel should start with all power management features disabled.
Later in the boot process, the PM code, if compiled in with CONFIG_PM,
enables or re-enables power management features.
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Tested-by: Rajendra Nayak <rnayak@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
-rw-r--r-- | arch/arm/mach-omap2/clock2420_data.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock2430_data.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock3xxx.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock3xxx_data.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock44xx_data.c | 3 |
5 files changed, 14 insertions, 4 deletions
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c index 0a992bc8d0d8..ee73e14ac3c8 100644 --- a/arch/arm/mach-omap2/clock2420_data.c +++ b/arch/arm/mach-omap2/clock2420_data.c | |||
@@ -1913,6 +1913,9 @@ int __init omap2420_clk_init(void) | |||
1913 | omap2_init_clk_clkdm(c->lk.clk); | 1913 | omap2_init_clk_clkdm(c->lk.clk); |
1914 | } | 1914 | } |
1915 | 1915 | ||
1916 | /* Disable autoidle on all clocks; let the PM code enable it later */ | ||
1917 | omap_clk_disable_autoidle_all(); | ||
1918 | |||
1916 | /* Check the MPU rate set by bootloader */ | 1919 | /* Check the MPU rate set by bootloader */ |
1917 | clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); | 1920 | clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); |
1918 | for (prcm = rate_table; prcm->mpu_speed; prcm++) { | 1921 | for (prcm = rate_table; prcm->mpu_speed; prcm++) { |
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c index c047dcd007e5..a1298e55d915 100644 --- a/arch/arm/mach-omap2/clock2430_data.c +++ b/arch/arm/mach-omap2/clock2430_data.c | |||
@@ -2028,6 +2028,9 @@ int __init omap2430_clk_init(void) | |||
2028 | omap2_init_clk_clkdm(c->lk.clk); | 2028 | omap2_init_clk_clkdm(c->lk.clk); |
2029 | } | 2029 | } |
2030 | 2030 | ||
2031 | /* Disable autoidle on all clocks; let the PM code enable it later */ | ||
2032 | omap_clk_disable_autoidle_all(); | ||
2033 | |||
2031 | /* Check the MPU rate set by bootloader */ | 2034 | /* Check the MPU rate set by bootloader */ |
2032 | clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); | 2035 | clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); |
2033 | for (prcm = rate_table; prcm->mpu_speed; prcm++) { | 2036 | for (prcm = rate_table; prcm->mpu_speed; prcm++) { |
diff --git a/arch/arm/mach-omap2/clock3xxx.c b/arch/arm/mach-omap2/clock3xxx.c index e9f66b6dec18..952c3e01c9eb 100644 --- a/arch/arm/mach-omap2/clock3xxx.c +++ b/arch/arm/mach-omap2/clock3xxx.c | |||
@@ -65,9 +65,6 @@ void __init omap3_clk_lock_dpll5(void) | |||
65 | clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST); | 65 | clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST); |
66 | clk_enable(dpll5_clk); | 66 | clk_enable(dpll5_clk); |
67 | 67 | ||
68 | /* Enable autoidle to allow it to enter low power bypass */ | ||
69 | omap3_dpll_allow_idle(dpll5_clk); | ||
70 | |||
71 | /* Program dpll5_m2_clk divider for no division */ | 68 | /* Program dpll5_m2_clk divider for no division */ |
72 | dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck"); | 69 | dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck"); |
73 | clk_enable(dpll5_m2_clk); | 70 | clk_enable(dpll5_m2_clk); |
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c index 78ea7997686b..65b79e6afb53 100644 --- a/arch/arm/mach-omap2/clock3xxx_data.c +++ b/arch/arm/mach-omap2/clock3xxx_data.c | |||
@@ -3538,6 +3538,9 @@ int __init omap3xxx_clk_init(void) | |||
3538 | omap2_init_clk_clkdm(c->lk.clk); | 3538 | omap2_init_clk_clkdm(c->lk.clk); |
3539 | } | 3539 | } |
3540 | 3540 | ||
3541 | /* Disable autoidle on all clocks; let the PM code enable it later */ | ||
3542 | omap_clk_disable_autoidle_all(); | ||
3543 | |||
3541 | recalculate_root_clocks(); | 3544 | recalculate_root_clocks(); |
3542 | 3545 | ||
3543 | pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n", | 3546 | pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n", |
@@ -3551,7 +3554,8 @@ int __init omap3xxx_clk_init(void) | |||
3551 | clk_enable_init_clocks(); | 3554 | clk_enable_init_clocks(); |
3552 | 3555 | ||
3553 | /* | 3556 | /* |
3554 | * Lock DPLL5 and put it in autoidle. | 3557 | * Lock DPLL5 -- here only until other device init code can |
3558 | * handle this | ||
3555 | */ | 3559 | */ |
3556 | if (!cpu_is_ti816x() && (omap_rev() >= OMAP3430_REV_ES2_0)) | 3560 | if (!cpu_is_ti816x() && (omap_rev() >= OMAP3430_REV_ES2_0)) |
3557 | omap3_clk_lock_dpll5(); | 3561 | omap3_clk_lock_dpll5(); |
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c index dcbe10571a0f..279534240fc3 100644 --- a/arch/arm/mach-omap2/clock44xx_data.c +++ b/arch/arm/mach-omap2/clock44xx_data.c | |||
@@ -3309,6 +3309,9 @@ int __init omap4xxx_clk_init(void) | |||
3309 | omap2_init_clk_clkdm(c->lk.clk); | 3309 | omap2_init_clk_clkdm(c->lk.clk); |
3310 | } | 3310 | } |
3311 | 3311 | ||
3312 | /* Disable autoidle on all clocks; let the PM code enable it later */ | ||
3313 | omap_clk_disable_autoidle_all(); | ||
3314 | |||
3312 | recalculate_root_clocks(); | 3315 | recalculate_root_clocks(); |
3313 | 3316 | ||
3314 | /* | 3317 | /* |