TIMER_INTR_MASK register (Base Address of Timer + 0x38) is not designed
for masking interrupts on ast2500 chips, and it's not even listed in
ast2400 datasheet, so it's not safe to access TIMER_INTR_MASK on aspeed
chips.
Similarly, TIMER_INTR_STATE register (Base Address of Timer + 0x34) is
not interrupt status register on ast2400 and ast2500 chips. Although
there is no side effect to reset the register in fttmr010_common_init(),
it's just misleading to do so.

Signed-off-by: Tao Ren <[email protected]>
---
 drivers/clocksource/timer-fttmr010.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/drivers/clocksource/timer-fttmr010.c 
b/drivers/clocksource/timer-fttmr010.c
index c020038ebfab..daf063c9842e 100644
--- a/drivers/clocksource/timer-fttmr010.c
+++ b/drivers/clocksource/timer-fttmr010.c
@@ -171,16 +171,17 @@ static int fttmr010_timer_set_oneshot(struct 
clock_event_device *evt)
 
        /* Setup counter start from 0 or ~0 */
        writel(0, fttmr010->base + TIMER1_COUNT);
-       if (fttmr010->count_down)
+       if (fttmr010->count_down) {
                writel(~0, fttmr010->base + TIMER1_LOAD);
-       else
+       } else {
                writel(0, fttmr010->base + TIMER1_LOAD);
 
-       /* Enable interrupt */
-       cr = readl(fttmr010->base + TIMER_INTR_MASK);
-       cr &= ~(TIMER_1_INT_OVERFLOW | TIMER_1_INT_MATCH2);
-       cr |= TIMER_1_INT_MATCH1;
-       writel(cr, fttmr010->base + TIMER_INTR_MASK);
+               /* Enable interrupt */
+               cr = readl(fttmr010->base + TIMER_INTR_MASK);
+               cr &= ~(TIMER_1_INT_OVERFLOW | TIMER_1_INT_MATCH2);
+               cr |= TIMER_1_INT_MATCH1;
+               writel(cr, fttmr010->base + TIMER_INTR_MASK);
+       }
 
        return 0;
 }
@@ -287,13 +288,13 @@ static int __init fttmr010_common_init(struct device_node 
*np, bool is_aspeed)
                fttmr010->count_down = true;
        } else {
                fttmr010->t1_enable_val = TIMER_1_CR_ENABLE | TIMER_1_CR_INT;
-       }
 
-       /*
-        * Reset the interrupt mask and status
-        */
-       writel(TIMER_INT_ALL_MASK, fttmr010->base + TIMER_INTR_MASK);
-       writel(0, fttmr010->base + TIMER_INTR_STATE);
+               /*
+                * Reset the interrupt mask and status
+                */
+               writel(TIMER_INT_ALL_MASK, fttmr010->base + TIMER_INTR_MASK);
+               writel(0, fttmr010->base + TIMER_INTR_STATE);
+       }
 
        /*
         * Enable timer 1 count up, timer 2 count up, except on Aspeed,
-- 
2.17.1

Reply via email to