diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-05-08 09:09:47 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-05-23 13:04:51 -0400 |
commit | 234b6ceddb4fc2a4bc5b9a7670f070f6e69e0868 (patch) | |
tree | 891f57ca663b5ec0bb61bb3e38c5306e0d13d2bd /arch/arm/plat-mxc | |
parent | 442c8176d2efa468577738e3a99a6e051f6e8e55 (diff) |
clocksource: convert ARM 32-bit up counting clocksources
Convert ixp4xx, lpc32xx, mxc, netx, pxa, sa1100, tcc8k, tegra and u300
to use the generic mmio clocksource recently introduced.
Cc: Imre Kaloz <kaloz@openwrt.org>
Cc: Krzysztof Halasa <khc@pm.waw.pl>
Acked-by: Eric Miao <eric.y.miao@gmail.com>
Acked-by: "Hans J. Koch" <hjk@hansjkoch.de>
Acked-by: Colin Cross <ccross@android.com>
Cc: Erik Gilling <konkers@android.com>
Cc: Olof Johansson <olof@lixom.net>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/plat-mxc')
-rw-r--r-- | arch/arm/plat-mxc/time.c | 38 |
1 files changed, 7 insertions, 31 deletions
diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/plat-mxc/time.c index 2237ff8b434f..e4ac94a86832 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/plat-mxc/time.c | |||
@@ -106,56 +106,32 @@ static void gpt_irq_acknowledge(void) | |||
106 | __raw_writel(V2_TSTAT_OF1, timer_base + V2_TSTAT); | 106 | __raw_writel(V2_TSTAT_OF1, timer_base + V2_TSTAT); |
107 | } | 107 | } |
108 | 108 | ||
109 | static cycle_t dummy_get_cycles(struct clocksource *cs) | 109 | static void __iomem *sched_clock_reg; |
110 | { | ||
111 | return 0; | ||
112 | } | ||
113 | |||
114 | static cycle_t mx1_2_get_cycles(struct clocksource *cs) | ||
115 | { | ||
116 | return __raw_readl(timer_base + MX1_2_TCN); | ||
117 | } | ||
118 | |||
119 | static cycle_t v2_get_cycles(struct clocksource *cs) | ||
120 | { | ||
121 | return __raw_readl(timer_base + V2_TCN); | ||
122 | } | ||
123 | |||
124 | static struct clocksource clocksource_mxc = { | ||
125 | .name = "mxc_timer1", | ||
126 | .rating = 200, | ||
127 | .read = dummy_get_cycles, | ||
128 | .mask = CLOCKSOURCE_MASK(32), | ||
129 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | ||
130 | }; | ||
131 | 110 | ||
132 | static DEFINE_CLOCK_DATA(cd); | 111 | static DEFINE_CLOCK_DATA(cd); |
133 | unsigned long long notrace sched_clock(void) | 112 | unsigned long long notrace sched_clock(void) |
134 | { | 113 | { |
135 | cycle_t cyc = clocksource_mxc.read(&clocksource_mxc); | 114 | cycle_t cyc = sched_clock_reg ? __raw_readl(sched_clock_reg) : 0; |
136 | 115 | ||
137 | return cyc_to_sched_clock(&cd, cyc, (u32)~0); | 116 | return cyc_to_sched_clock(&cd, cyc, (u32)~0); |
138 | } | 117 | } |
139 | 118 | ||
140 | static void notrace mxc_update_sched_clock(void) | 119 | static void notrace mxc_update_sched_clock(void) |
141 | { | 120 | { |
142 | cycle_t cyc = clocksource_mxc.read(&clocksource_mxc); | 121 | cycle_t cyc = sched_clock_reg ? __raw_readl(sched_clock_reg) : 0; |
143 | update_sched_clock(&cd, cyc, (u32)~0); | 122 | update_sched_clock(&cd, cyc, (u32)~0); |
144 | } | 123 | } |
145 | 124 | ||
146 | static int __init mxc_clocksource_init(struct clk *timer_clk) | 125 | static int __init mxc_clocksource_init(struct clk *timer_clk) |
147 | { | 126 | { |
148 | unsigned int c = clk_get_rate(timer_clk); | 127 | unsigned int c = clk_get_rate(timer_clk); |
128 | void __iomem *reg = timer_base + (timer_is_v2() ? V2_TCN : MX1_2_TCN); | ||
149 | 129 | ||
150 | if (timer_is_v2()) | 130 | sched_clock_reg = reg; |
151 | clocksource_mxc.read = v2_get_cycles; | ||
152 | else | ||
153 | clocksource_mxc.read = mx1_2_get_cycles; | ||
154 | 131 | ||
155 | init_sched_clock(&cd, mxc_update_sched_clock, 32, c); | 132 | init_sched_clock(&cd, mxc_update_sched_clock, 32, c); |
156 | clocksource_register_hz(&clocksource_mxc, c); | 133 | return clocksource_mmio_init(reg, "mxc_timer1", c, 200, 32, |
157 | 134 | clocksource_mmio_readl_up); | |
158 | return 0; | ||
159 | } | 135 | } |
160 | 136 | ||
161 | /* clock event */ | 137 | /* clock event */ |