|
@@ -3431,3 +3431,167 @@ static struct omap_clk omap3xxx_clks[] = {
|
|
|
CLK(NULL, "gpt6_fck", &gpt6_fck, CK_3XXX),
|
|
|
CLK(NULL, "gpt7_fck", &gpt7_fck, CK_3XXX),
|
|
|
CLK(NULL, "gpt8_fck", &gpt8_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt9_fck", &gpt9_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "per_32k_alwon_fck", &per_32k_alwon_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio6_dbck", &gpio6_dbck, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio5_dbck", &gpio5_dbck, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio4_dbck", &gpio4_dbck, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio3_dbck", &gpio3_dbck, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio2_dbck", &gpio2_dbck, CK_3XXX),
|
|
|
+ CLK(NULL, "wdt3_fck", &wdt3_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "per_l4_ick", &per_l4_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio6_ick", &gpio6_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio5_ick", &gpio5_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio4_ick", &gpio4_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio3_ick", &gpio3_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpio2_ick", &gpio2_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "wdt3_ick", &wdt3_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "uart3_ick", &uart3_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "uart4_ick", &uart4_ick, CK_36XX),
|
|
|
+ CLK(NULL, "gpt9_ick", &gpt9_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt8_ick", &gpt8_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt7_ick", &gpt7_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt6_ick", &gpt6_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt5_ick", &gpt5_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt4_ick", &gpt4_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt3_ick", &gpt3_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt2_ick", &gpt2_ick, CK_3XXX),
|
|
|
+ CLK("omap-mcbsp.2", "ick", &mcbsp2_ick, CK_3XXX),
|
|
|
+ CLK("omap-mcbsp.3", "ick", &mcbsp3_ick, CK_3XXX),
|
|
|
+ CLK("omap-mcbsp.4", "ick", &mcbsp4_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "mcbsp4_ick", &mcbsp2_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "mcbsp3_ick", &mcbsp3_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "mcbsp2_ick", &mcbsp4_ick, CK_3XXX),
|
|
|
+ CLK(NULL, "mcbsp2_fck", &mcbsp2_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "mcbsp3_fck", &mcbsp3_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "mcbsp4_fck", &mcbsp4_fck, CK_3XXX),
|
|
|
+ CLK("etb", "emu_src_ck", &emu_src_ck, CK_3XXX),
|
|
|
+ CLK(NULL, "emu_src_ck", &emu_src_ck, CK_3XXX),
|
|
|
+ CLK(NULL, "pclk_fck", &pclk_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "pclkx2_fck", &pclkx2_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "atclk_fck", &atclk_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "traceclk_src_fck", &traceclk_src_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "traceclk_fck", &traceclk_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "sr1_fck", &sr1_fck, CK_34XX | CK_36XX),
|
|
|
+ CLK(NULL, "sr2_fck", &sr2_fck, CK_34XX | CK_36XX),
|
|
|
+ CLK(NULL, "sr_l4_ick", &sr_l4_ick, CK_34XX | CK_36XX),
|
|
|
+ CLK(NULL, "secure_32k_fck", &secure_32k_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "gpt12_fck", &gpt12_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "wdt1_fck", &wdt1_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX),
|
|
|
+ CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX),
|
|
|
+ CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX),
|
|
|
+ CLK(NULL, "emac_ick", &emac_ick, CK_AM35XX),
|
|
|
+ CLK(NULL, "emac_fck", &emac_fck, CK_AM35XX),
|
|
|
+ CLK("davinci_emac.0", NULL, &emac_ick, CK_AM35XX),
|
|
|
+ CLK("davinci_mdio.0", NULL, &emac_fck, CK_AM35XX),
|
|
|
+ CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX),
|
|
|
+ CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX),
|
|
|
+ CLK(NULL, "hsotgusb_ick", &hsotgusb_ick_am35xx, CK_AM35XX),
|
|
|
+ CLK(NULL, "hsotgusb_fck", &hsotgusb_fck_am35xx, CK_AM35XX),
|
|
|
+ CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX),
|
|
|
+ CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX),
|
|
|
+ CLK(NULL, "timer_32k_ck", &omap_32k_fck, CK_3XXX),
|
|
|
+ CLK(NULL, "timer_sys_ck", &sys_ck, CK_3XXX),
|
|
|
+ CLK(NULL, "cpufreq_ck", &dpll1_ck, CK_3XXX),
|
|
|
+};
|
|
|
+
|
|
|
+static const char *enable_init_clks[] = {
|
|
|
+ "sdrc_ick",
|
|
|
+ "gpmc_fck",
|
|
|
+ "omapctrl_ick",
|
|
|
+};
|
|
|
+
|
|
|
+int __init omap3xxx_clk_init(void)
|
|
|
+{
|
|
|
+ struct omap_clk *c;
|
|
|
+ u32 cpu_clkflg = 0;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 3505 must be tested before 3517, since 3517 returns true
|
|
|
+ * for both AM3517 chips and AM3517 family chips, which
|
|
|
+ * includes 3505. Unfortunately there's no obvious family
|
|
|
+ * test for 3517/3505 :-(
|
|
|
+ */
|
|
|
+ if (soc_is_am35xx()) {
|
|
|
+ cpu_mask = RATE_IN_34XX;
|
|
|
+ cpu_clkflg = CK_AM35XX;
|
|
|
+ } else if (cpu_is_omap3630()) {
|
|
|
+ cpu_mask = (RATE_IN_34XX | RATE_IN_36XX);
|
|
|
+ cpu_clkflg = CK_36XX;
|
|
|
+ } else if (cpu_is_ti816x()) {
|
|
|
+ cpu_mask = RATE_IN_TI816X;
|
|
|
+ cpu_clkflg = CK_TI816X;
|
|
|
+ } else if (soc_is_am33xx()) {
|
|
|
+ cpu_mask = RATE_IN_AM33XX;
|
|
|
+ } else if (cpu_is_ti814x()) {
|
|
|
+ cpu_mask = RATE_IN_TI814X;
|
|
|
+ } else if (cpu_is_omap34xx()) {
|
|
|
+ if (omap_rev() == OMAP3430_REV_ES1_0) {
|
|
|
+ cpu_mask = RATE_IN_3430ES1;
|
|
|
+ cpu_clkflg = CK_3430ES1;
|
|
|
+ } else {
|
|
|
+ /*
|
|
|
+ * Assume that anything that we haven't matched yet
|
|
|
+ * has 3430ES2-type clocks.
|
|
|
+ */
|
|
|
+ cpu_mask = RATE_IN_3430ES2PLUS;
|
|
|
+ cpu_clkflg = CK_3430ES2PLUS;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ WARN(1, "clock: could not identify OMAP3 variant\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (omap3_has_192mhz_clk())
|
|
|
+ omap_96m_alwon_fck = omap_96m_alwon_fck_3630;
|
|
|
+
|
|
|
+ if (cpu_is_omap3630()) {
|
|
|
+ dpll3_m3x2_ck = dpll3_m3x2_ck_3630;
|
|
|
+ dpll4_m2x2_ck = dpll4_m2x2_ck_3630;
|
|
|
+ dpll4_m3x2_ck = dpll4_m3x2_ck_3630;
|
|
|
+ dpll4_m4x2_ck = dpll4_m4x2_ck_3630;
|
|
|
+ dpll4_m5x2_ck = dpll4_m5x2_ck_3630;
|
|
|
+ dpll4_m6x2_ck = dpll4_m6x2_ck_3630;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * XXX This type of dynamic rewriting of the clock tree is
|
|
|
+ * deprecated and should be revised soon.
|
|
|
+ */
|
|
|
+ if (cpu_is_omap3630())
|
|
|
+ dpll4_dd = dpll4_dd_3630;
|
|
|
+ else
|
|
|
+ dpll4_dd = dpll4_dd_34xx;
|
|
|
+
|
|
|
+ for (c = omap3xxx_clks; c < omap3xxx_clks + ARRAY_SIZE(omap3xxx_clks);
|
|
|
+ c++)
|
|
|
+ if (c->cpu & cpu_clkflg) {
|
|
|
+ clkdev_add(&c->lk);
|
|
|
+ if (!__clk_init(NULL, c->lk.clk))
|
|
|
+ omap2_init_clk_hw_omap_clocks(c->lk.clk);
|
|
|
+ }
|
|
|
+
|
|
|
+ omap2_clk_disable_autoidle_all();
|
|
|
+
|
|
|
+ omap2_clk_enable_init_clocks(enable_init_clks,
|
|
|
+ ARRAY_SIZE(enable_init_clks));
|
|
|
+
|
|
|
+ pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n",
|
|
|
+ (clk_get_rate(&osc_sys_ck) / 1000000),
|
|
|
+ (clk_get_rate(&osc_sys_ck) / 100000) % 10,
|
|
|
+ (clk_get_rate(&core_ck) / 1000000),
|
|
|
+ (clk_get_rate(&arm_fck) / 1000000));
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Lock DPLL5 -- here only until other device init code can
|
|
|
+ * handle this
|
|
|
+ */
|
|
|
+ if (!cpu_is_ti81xx() && (omap_rev() >= OMAP3430_REV_ES2_0))
|
|
|
+ omap3_clk_lock_dpll5();
|
|
|
+
|
|
|
+ /* Avoid sleeping during omap3_core_dpll_m2_set_rate() */
|
|
|
+ sdrc_ick_p = clk_get(NULL, "sdrc_ick");
|
|
|
+ arm_fck_p = clk_get(NULL, "arm_fck");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|