diff options
author | Alexandre Belloni <alexandre.belloni@free-electrons.com> | 2017-06-23 11:03:31 -0400 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2017-06-27 05:25:20 -0400 |
commit | 6ec8be251fb445dcc43086a485fec1b2708c09da (patch) | |
tree | f07868154cb890dcb1b88689b4d164a4059dc296 /drivers/clocksource | |
parent | 239751edad27d4fae964fb1f4ca1fedd742c8365 (diff) |
clocksource/drivers/tcb_clksrc: Make IO endian agnostic
Now that AVR32 is gone, we can use the proper IO accessors that are
correctly handling endianness.
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Diffstat (limited to 'drivers/clocksource')
-rw-r--r-- | drivers/clocksource/tcb_clksrc.c | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c index 828729c70a0c..59e8aee0ec16 100644 --- a/drivers/clocksource/tcb_clksrc.c +++ b/drivers/clocksource/tcb_clksrc.c | |||
@@ -57,9 +57,9 @@ static u64 tc_get_cycles(struct clocksource *cs) | |||
57 | 57 | ||
58 | raw_local_irq_save(flags); | 58 | raw_local_irq_save(flags); |
59 | do { | 59 | do { |
60 | upper = __raw_readl(tcaddr + ATMEL_TC_REG(1, CV)); | 60 | upper = readl_relaxed(tcaddr + ATMEL_TC_REG(1, CV)); |
61 | lower = __raw_readl(tcaddr + ATMEL_TC_REG(0, CV)); | 61 | lower = readl_relaxed(tcaddr + ATMEL_TC_REG(0, CV)); |
62 | } while (upper != __raw_readl(tcaddr + ATMEL_TC_REG(1, CV))); | 62 | } while (upper != readl_relaxed(tcaddr + ATMEL_TC_REG(1, CV))); |
63 | 63 | ||
64 | raw_local_irq_restore(flags); | 64 | raw_local_irq_restore(flags); |
65 | return (upper << 16) | lower; | 65 | return (upper << 16) | lower; |
@@ -67,7 +67,7 @@ static u64 tc_get_cycles(struct clocksource *cs) | |||
67 | 67 | ||
68 | static u64 tc_get_cycles32(struct clocksource *cs) | 68 | static u64 tc_get_cycles32(struct clocksource *cs) |
69 | { | 69 | { |
70 | return __raw_readl(tcaddr + ATMEL_TC_REG(0, CV)); | 70 | return readl_relaxed(tcaddr + ATMEL_TC_REG(0, CV)); |
71 | } | 71 | } |
72 | 72 | ||
73 | void tc_clksrc_suspend(struct clocksource *cs) | 73 | void tc_clksrc_suspend(struct clocksource *cs) |
@@ -147,8 +147,8 @@ static int tc_shutdown(struct clock_event_device *d) | |||
147 | struct tc_clkevt_device *tcd = to_tc_clkevt(d); | 147 | struct tc_clkevt_device *tcd = to_tc_clkevt(d); |
148 | void __iomem *regs = tcd->regs; | 148 | void __iomem *regs = tcd->regs; |
149 | 149 | ||
150 | __raw_writel(0xff, regs + ATMEL_TC_REG(2, IDR)); | 150 | writel(0xff, regs + ATMEL_TC_REG(2, IDR)); |
151 | __raw_writel(ATMEL_TC_CLKDIS, regs + ATMEL_TC_REG(2, CCR)); | 151 | writel(ATMEL_TC_CLKDIS, regs + ATMEL_TC_REG(2, CCR)); |
152 | if (!clockevent_state_detached(d)) | 152 | if (!clockevent_state_detached(d)) |
153 | clk_disable(tcd->clk); | 153 | clk_disable(tcd->clk); |
154 | 154 | ||
@@ -166,9 +166,9 @@ static int tc_set_oneshot(struct clock_event_device *d) | |||
166 | clk_enable(tcd->clk); | 166 | clk_enable(tcd->clk); |
167 | 167 | ||
168 | /* slow clock, count up to RC, then irq and stop */ | 168 | /* slow clock, count up to RC, then irq and stop */ |
169 | __raw_writel(timer_clock | ATMEL_TC_CPCSTOP | ATMEL_TC_WAVE | | 169 | writel(timer_clock | ATMEL_TC_CPCSTOP | ATMEL_TC_WAVE | |
170 | ATMEL_TC_WAVESEL_UP_AUTO, regs + ATMEL_TC_REG(2, CMR)); | 170 | ATMEL_TC_WAVESEL_UP_AUTO, regs + ATMEL_TC_REG(2, CMR)); |
171 | __raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER)); | 171 | writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER)); |
172 | 172 | ||
173 | /* set_next_event() configures and starts the timer */ | 173 | /* set_next_event() configures and starts the timer */ |
174 | return 0; | 174 | return 0; |
@@ -188,25 +188,25 @@ static int tc_set_periodic(struct clock_event_device *d) | |||
188 | clk_enable(tcd->clk); | 188 | clk_enable(tcd->clk); |
189 | 189 | ||
190 | /* slow clock, count up to RC, then irq and restart */ | 190 | /* slow clock, count up to RC, then irq and restart */ |
191 | __raw_writel(timer_clock | ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO, | 191 | writel(timer_clock | ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO, |
192 | regs + ATMEL_TC_REG(2, CMR)); | 192 | regs + ATMEL_TC_REG(2, CMR)); |
193 | __raw_writel((32768 + HZ / 2) / HZ, tcaddr + ATMEL_TC_REG(2, RC)); | 193 | writel((32768 + HZ / 2) / HZ, tcaddr + ATMEL_TC_REG(2, RC)); |
194 | 194 | ||
195 | /* Enable clock and interrupts on RC compare */ | 195 | /* Enable clock and interrupts on RC compare */ |
196 | __raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER)); | 196 | writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER)); |
197 | 197 | ||
198 | /* go go gadget! */ | 198 | /* go go gadget! */ |
199 | __raw_writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG, regs + | 199 | writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG, regs + |
200 | ATMEL_TC_REG(2, CCR)); | 200 | ATMEL_TC_REG(2, CCR)); |
201 | return 0; | 201 | return 0; |
202 | } | 202 | } |
203 | 203 | ||
204 | static int tc_next_event(unsigned long delta, struct clock_event_device *d) | 204 | static int tc_next_event(unsigned long delta, struct clock_event_device *d) |
205 | { | 205 | { |
206 | __raw_writel(delta, tcaddr + ATMEL_TC_REG(2, RC)); | 206 | writel_relaxed(delta, tcaddr + ATMEL_TC_REG(2, RC)); |
207 | 207 | ||
208 | /* go go gadget! */ | 208 | /* go go gadget! */ |
209 | __raw_writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG, | 209 | writel_relaxed(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG, |
210 | tcaddr + ATMEL_TC_REG(2, CCR)); | 210 | tcaddr + ATMEL_TC_REG(2, CCR)); |
211 | return 0; | 211 | return 0; |
212 | } | 212 | } |
@@ -230,7 +230,7 @@ static irqreturn_t ch2_irq(int irq, void *handle) | |||
230 | struct tc_clkevt_device *dev = handle; | 230 | struct tc_clkevt_device *dev = handle; |
231 | unsigned int sr; | 231 | unsigned int sr; |
232 | 232 | ||
233 | sr = __raw_readl(dev->regs + ATMEL_TC_REG(2, SR)); | 233 | sr = readl_relaxed(dev->regs + ATMEL_TC_REG(2, SR)); |
234 | if (sr & ATMEL_TC_CPCS) { | 234 | if (sr & ATMEL_TC_CPCS) { |
235 | dev->clkevt.event_handler(&dev->clkevt); | 235 | dev->clkevt.event_handler(&dev->clkevt); |
236 | return IRQ_HANDLED; | 236 | return IRQ_HANDLED; |
@@ -290,43 +290,43 @@ static int __init setup_clkevents(struct atmel_tc *tc, int clk32k_divisor_idx) | |||
290 | static void __init tcb_setup_dual_chan(struct atmel_tc *tc, int mck_divisor_idx) | 290 | static void __init tcb_setup_dual_chan(struct atmel_tc *tc, int mck_divisor_idx) |
291 | { | 291 | { |
292 | /* channel 0: waveform mode, input mclk/8, clock TIOA0 on overflow */ | 292 | /* channel 0: waveform mode, input mclk/8, clock TIOA0 on overflow */ |
293 | __raw_writel(mck_divisor_idx /* likely divide-by-8 */ | 293 | writel(mck_divisor_idx /* likely divide-by-8 */ |
294 | | ATMEL_TC_WAVE | 294 | | ATMEL_TC_WAVE |
295 | | ATMEL_TC_WAVESEL_UP /* free-run */ | 295 | | ATMEL_TC_WAVESEL_UP /* free-run */ |
296 | | ATMEL_TC_ACPA_SET /* TIOA0 rises at 0 */ | 296 | | ATMEL_TC_ACPA_SET /* TIOA0 rises at 0 */ |
297 | | ATMEL_TC_ACPC_CLEAR, /* (duty cycle 50%) */ | 297 | | ATMEL_TC_ACPC_CLEAR, /* (duty cycle 50%) */ |
298 | tcaddr + ATMEL_TC_REG(0, CMR)); | 298 | tcaddr + ATMEL_TC_REG(0, CMR)); |
299 | __raw_writel(0x0000, tcaddr + ATMEL_TC_REG(0, RA)); | 299 | writel(0x0000, tcaddr + ATMEL_TC_REG(0, RA)); |
300 | __raw_writel(0x8000, tcaddr + ATMEL_TC_REG(0, RC)); | 300 | writel(0x8000, tcaddr + ATMEL_TC_REG(0, RC)); |
301 | __raw_writel(0xff, tcaddr + ATMEL_TC_REG(0, IDR)); /* no irqs */ | 301 | writel(0xff, tcaddr + ATMEL_TC_REG(0, IDR)); /* no irqs */ |
302 | __raw_writel(ATMEL_TC_CLKEN, tcaddr + ATMEL_TC_REG(0, CCR)); | 302 | writel(ATMEL_TC_CLKEN, tcaddr + ATMEL_TC_REG(0, CCR)); |
303 | 303 | ||
304 | /* channel 1: waveform mode, input TIOA0 */ | 304 | /* channel 1: waveform mode, input TIOA0 */ |
305 | __raw_writel(ATMEL_TC_XC1 /* input: TIOA0 */ | 305 | writel(ATMEL_TC_XC1 /* input: TIOA0 */ |
306 | | ATMEL_TC_WAVE | 306 | | ATMEL_TC_WAVE |
307 | | ATMEL_TC_WAVESEL_UP, /* free-run */ | 307 | | ATMEL_TC_WAVESEL_UP, /* free-run */ |
308 | tcaddr + ATMEL_TC_REG(1, CMR)); | 308 | tcaddr + ATMEL_TC_REG(1, CMR)); |
309 | __raw_writel(0xff, tcaddr + ATMEL_TC_REG(1, IDR)); /* no irqs */ | 309 | writel(0xff, tcaddr + ATMEL_TC_REG(1, IDR)); /* no irqs */ |
310 | __raw_writel(ATMEL_TC_CLKEN, tcaddr + ATMEL_TC_REG(1, CCR)); | 310 | writel(ATMEL_TC_CLKEN, tcaddr + ATMEL_TC_REG(1, CCR)); |
311 | 311 | ||
312 | /* chain channel 0 to channel 1*/ | 312 | /* chain channel 0 to channel 1*/ |
313 | __raw_writel(ATMEL_TC_TC1XC1S_TIOA0, tcaddr + ATMEL_TC_BMR); | 313 | writel(ATMEL_TC_TC1XC1S_TIOA0, tcaddr + ATMEL_TC_BMR); |
314 | /* then reset all the timers */ | 314 | /* then reset all the timers */ |
315 | __raw_writel(ATMEL_TC_SYNC, tcaddr + ATMEL_TC_BCR); | 315 | writel(ATMEL_TC_SYNC, tcaddr + ATMEL_TC_BCR); |
316 | } | 316 | } |
317 | 317 | ||
318 | static void __init tcb_setup_single_chan(struct atmel_tc *tc, int mck_divisor_idx) | 318 | static void __init tcb_setup_single_chan(struct atmel_tc *tc, int mck_divisor_idx) |
319 | { | 319 | { |
320 | /* channel 0: waveform mode, input mclk/8 */ | 320 | /* channel 0: waveform mode, input mclk/8 */ |
321 | __raw_writel(mck_divisor_idx /* likely divide-by-8 */ | 321 | writel(mck_divisor_idx /* likely divide-by-8 */ |
322 | | ATMEL_TC_WAVE | 322 | | ATMEL_TC_WAVE |
323 | | ATMEL_TC_WAVESEL_UP, /* free-run */ | 323 | | ATMEL_TC_WAVESEL_UP, /* free-run */ |
324 | tcaddr + ATMEL_TC_REG(0, CMR)); | 324 | tcaddr + ATMEL_TC_REG(0, CMR)); |
325 | __raw_writel(0xff, tcaddr + ATMEL_TC_REG(0, IDR)); /* no irqs */ | 325 | writel(0xff, tcaddr + ATMEL_TC_REG(0, IDR)); /* no irqs */ |
326 | __raw_writel(ATMEL_TC_CLKEN, tcaddr + ATMEL_TC_REG(0, CCR)); | 326 | writel(ATMEL_TC_CLKEN, tcaddr + ATMEL_TC_REG(0, CCR)); |
327 | 327 | ||
328 | /* then reset all the timers */ | 328 | /* then reset all the timers */ |
329 | __raw_writel(ATMEL_TC_SYNC, tcaddr + ATMEL_TC_BCR); | 329 | writel(ATMEL_TC_SYNC, tcaddr + ATMEL_TC_BCR); |
330 | } | 330 | } |
331 | 331 | ||
332 | static int __init tcb_clksrc_init(void) | 332 | static int __init tcb_clksrc_init(void) |