ARM: twd: data endian fix
authorBen Dooks <ben.dooks@codethink.co.uk>
Wed, 6 Feb 2013 18:44:20 +0000 (18:44 +0000)
committerBen Dooks <ben.dooks@codethink.co.uk>
Sat, 19 Oct 2013 19:46:33 +0000 (20:46 +0100)
Ensure the twd driver uses the correct calls to access the hardware
to ensure that we do not end up with data in the wrong endian format.

Reviewed-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
arch/arm/kernel/smp_twd.c

index 2985c9f..6591e26 100644 (file)
@@ -45,7 +45,7 @@ static void twd_set_mode(enum clock_event_mode mode,
        case CLOCK_EVT_MODE_PERIODIC:
                ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE
                        | TWD_TIMER_CONTROL_PERIODIC;
-               __raw_writel(DIV_ROUND_CLOSEST(twd_timer_rate, HZ),
+               writel_relaxed(DIV_ROUND_CLOSEST(twd_timer_rate, HZ),
                        twd_base + TWD_TIMER_LOAD);
                break;
        case CLOCK_EVT_MODE_ONESHOT:
@@ -58,18 +58,18 @@ static void twd_set_mode(enum clock_event_mode mode,
                ctrl = 0;
        }
 
-       __raw_writel(ctrl, twd_base + TWD_TIMER_CONTROL);
+       writel_relaxed(ctrl, twd_base + TWD_TIMER_CONTROL);
 }
 
 static int twd_set_next_event(unsigned long evt,
                        struct clock_event_device *unused)
 {
-       unsigned long ctrl = __raw_readl(twd_base + TWD_TIMER_CONTROL);
+       unsigned long ctrl = readl_relaxed(twd_base + TWD_TIMER_CONTROL);
 
        ctrl |= TWD_TIMER_CONTROL_ENABLE;
 
-       __raw_writel(evt, twd_base + TWD_TIMER_COUNTER);
-       __raw_writel(ctrl, twd_base + TWD_TIMER_CONTROL);
+       writel_relaxed(evt, twd_base + TWD_TIMER_COUNTER);
+       writel_relaxed(ctrl, twd_base + TWD_TIMER_CONTROL);
 
        return 0;
 }
@@ -82,8 +82,8 @@ static int twd_set_next_event(unsigned long evt,
  */
 static int twd_timer_ack(void)
 {
-       if (__raw_readl(twd_base + TWD_TIMER_INTSTAT)) {
-               __raw_writel(1, twd_base + TWD_TIMER_INTSTAT);
+       if (readl_relaxed(twd_base + TWD_TIMER_INTSTAT)) {
+               writel_relaxed(1, twd_base + TWD_TIMER_INTSTAT);
                return 1;
        }
 
@@ -211,15 +211,15 @@ static void twd_calibrate_rate(void)
                waitjiffies += 5;
 
                                 /* enable, no interrupt or reload */
-               __raw_writel(0x1, twd_base + TWD_TIMER_CONTROL);
+               writel_relaxed(0x1, twd_base + TWD_TIMER_CONTROL);
 
                                 /* maximum value */
-               __raw_writel(0xFFFFFFFFU, twd_base + TWD_TIMER_COUNTER);
+               writel_relaxed(0xFFFFFFFFU, twd_base + TWD_TIMER_COUNTER);
 
                while (get_jiffies_64() < waitjiffies)
                        udelay(10);
 
-               count = __raw_readl(twd_base + TWD_TIMER_COUNTER);
+               count = readl_relaxed(twd_base + TWD_TIMER_COUNTER);
 
                twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5);
 
@@ -277,7 +277,7 @@ static void twd_timer_setup(void)
         * bother with the below.
         */
        if (per_cpu(percpu_setup_called, cpu)) {
-               __raw_writel(0, twd_base + TWD_TIMER_CONTROL);
+               writel_relaxed(0, twd_base + TWD_TIMER_CONTROL);
                clockevents_register_device(clk);
                enable_percpu_irq(clk->irq, 0);
                return;
@@ -290,7 +290,7 @@ static void twd_timer_setup(void)
         * The following is done once per CPU the first time .setup() is
         * called.
         */
-       __raw_writel(0, twd_base + TWD_TIMER_CONTROL);
+       writel_relaxed(0, twd_base + TWD_TIMER_CONTROL);
 
        clk->name = "local_timer";
        clk->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT |