ARM: mxs: use apbx bus clock to drive the timers on timrotv2
authorTorben Hohn <torbenh@linutronix.de>
Fri, 21 Dec 2012 14:06:15 +0000 (15:06 +0100)
committerShawn Guo <shawn.guo@linaro.org>
Tue, 5 Feb 2013 03:19:46 +0000 (11:19 +0800)
timer resolution of ~32us is pretty low.
v2 has 32bits resolution, so we have quite some headroom, and
can use the 24MHz clock.
v1 has only 16bits, so we only increase v2.

So we just exchange the timrot clock in imx28.
On imx23 we have timrotv1 and everything stays the same.

Signed-off-by: Torben Hohn <torbenh@linutronix.de>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
arch/arm/mach-mxs/timer.c
drivers/clk/mxs/clk-imx28.c

index 27451b1ba3f1cc9470e38899627b8b390f8bc138..1f8ec8cd91823aaa251f78a08bb462e35460db85 100644 (file)
@@ -72,8 +72,9 @@
 #define BM_TIMROT_TIMCTRLn_IRQ_EN      (1 << 14)
 #define BM_TIMROT_TIMCTRLn_IRQ         (1 << 15)
 #define BP_TIMROT_TIMCTRLn_SELECT      0
-#define BV_TIMROTv1_TIMCTRLn_SELECT__32KHZ_XTAL        0x8
-#define BV_TIMROTv2_TIMCTRLn_SELECT__32KHZ_XTAL        0xb
+#define BV_TIMROTv1_TIMCTRLn_SELECT__32KHZ_XTAL                0x8
+#define BV_TIMROTv2_TIMCTRLn_SELECT__32KHZ_XTAL                0xb
+#define BV_TIMROTv2_TIMCTRLn_SELECT__TICK_ALWAYS       0xf
 
 static struct clock_event_device mxs_clockevent_device;
 static enum clock_event_mode mxs_clockevent_mode = CLOCK_EVT_MODE_UNUSED;
@@ -274,7 +275,7 @@ void __init mxs_timer_init(void)
        /* one for clock_event */
        __raw_writel((timrot_is_v1() ?
                        BV_TIMROTv1_TIMCTRLn_SELECT__32KHZ_XTAL :
-                       BV_TIMROTv2_TIMCTRLn_SELECT__32KHZ_XTAL) |
+                       BV_TIMROTv2_TIMCTRLn_SELECT__TICK_ALWAYS) |
                        BM_TIMROT_TIMCTRLn_UPDATE |
                        BM_TIMROT_TIMCTRLn_IRQ_EN,
                        mxs_timrot_base + HW_TIMROT_TIMCTRLn(0));
@@ -282,7 +283,7 @@ void __init mxs_timer_init(void)
        /* another for clocksource */
        __raw_writel((timrot_is_v1() ?
                        BV_TIMROTv1_TIMCTRLn_SELECT__32KHZ_XTAL :
-                       BV_TIMROTv2_TIMCTRLn_SELECT__32KHZ_XTAL) |
+                       BV_TIMROTv2_TIMCTRLn_SELECT__TICK_ALWAYS) |
                        BM_TIMROT_TIMCTRLn_RELOAD,
                        mxs_timrot_base + HW_TIMROT_TIMCTRLn(1));
 
index db3af0874121cdf348d4d314be7b44a80d499422..0174270abfe7e64b3dfec54d89575ea67edf4c61 100644 (file)
@@ -238,7 +238,7 @@ int __init mx28_clocks_init(void)
                of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
        }
 
-       clk_register_clkdev(clks[clk32k], NULL, "timrot");
+       clk_register_clkdev(clks[xbus], NULL, "timrot");
        clk_register_clkdev(clks[enet_out], NULL, "enet_out");
 
        for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)