OMAP2+: clock: disable autoidle on all clocks during clock init
authorPaul Walmsley <paul@pwsan.com>
Fri, 25 Feb 2011 22:49:53 +0000 (15:49 -0700)
committerPaul Walmsley <paul@pwsan.com>
Fri, 25 Feb 2011 23:10:42 +0000 (16:10 -0700)
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>
arch/arm/mach-omap2/clock2420_data.c
arch/arm/mach-omap2/clock2430_data.c
arch/arm/mach-omap2/clock3xxx.c
arch/arm/mach-omap2/clock3xxx_data.c
arch/arm/mach-omap2/clock44xx_data.c

index 0a992bc8d0d89a7d792610f03af68e9dbc256a41..ee73e14ac3c8fa52836c3c363ee115a0a271e6e1 100644 (file)
@@ -1913,6 +1913,9 @@ int __init omap2420_clk_init(void)
                omap2_init_clk_clkdm(c->lk.clk);
        }
 
+       /* Disable autoidle on all clocks; let the PM code enable it later */
+       omap_clk_disable_autoidle_all();
+
        /* Check the MPU rate set by bootloader */
        clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);
        for (prcm = rate_table; prcm->mpu_speed; prcm++) {
index c047dcd007e55a787fb61f53a18d09edaa148e94..a1298e55d91577001e6fc6aeab3ea356be917da4 100644 (file)
@@ -2028,6 +2028,9 @@ int __init omap2430_clk_init(void)
                omap2_init_clk_clkdm(c->lk.clk);
        }
 
+       /* Disable autoidle on all clocks; let the PM code enable it later */
+       omap_clk_disable_autoidle_all();
+
        /* Check the MPU rate set by bootloader */
        clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);
        for (prcm = rate_table; prcm->mpu_speed; prcm++) {
index e9f66b6dec18e1657e77c6c4fbbb6bf46913c00b..952c3e01c9eb93239725173def94f8fbbf31853e 100644 (file)
@@ -65,9 +65,6 @@ void __init omap3_clk_lock_dpll5(void)
        clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST);
        clk_enable(dpll5_clk);
 
-       /* Enable autoidle to allow it to enter low power bypass */
-       omap3_dpll_allow_idle(dpll5_clk);
-
        /* Program dpll5_m2_clk divider for no division */
        dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck");
        clk_enable(dpll5_m2_clk);
index 78ea7997686b7d382aa01bd6e3d3ee038c555400..65b79e6afb53da876088fbd602f0689a3903ad11 100644 (file)
@@ -3538,6 +3538,9 @@ int __init omap3xxx_clk_init(void)
                        omap2_init_clk_clkdm(c->lk.clk);
                }
 
+       /* Disable autoidle on all clocks; let the PM code enable it later */
+       omap_clk_disable_autoidle_all();
+
        recalculate_root_clocks();
 
        pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n",
@@ -3551,7 +3554,8 @@ int __init omap3xxx_clk_init(void)
        clk_enable_init_clocks();
 
        /*
-        * Lock DPLL5 and put it in autoidle.
+        * Lock DPLL5 -- here only until other device init code can
+        * handle this
         */
        if (!cpu_is_ti816x() && (omap_rev() >= OMAP3430_REV_ES2_0))
                omap3_clk_lock_dpll5();
index dcbe10571a0f174f68fb02c5ae5724bda9f31e96..279534240fc370fe1e7dcf3bd8f081849dc10aae 100644 (file)
@@ -3309,6 +3309,9 @@ int __init omap4xxx_clk_init(void)
                        omap2_init_clk_clkdm(c->lk.clk);
                }
 
+       /* Disable autoidle on all clocks; let the PM code enable it later */
+       omap_clk_disable_autoidle_all();
+
        recalculate_root_clocks();
 
        /*