Merge tag 'boards-for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
[firefly-linux-kernel-4.4.55.git] / drivers / clocksource / timer-prima2.c
index 1a6b2d6356d630ca65cca3f988d39d553171c038..ce18d570e1cdfa58274201f74e90f15c2f1d13ff 100644 (file)
@@ -61,7 +61,8 @@ static irqreturn_t sirfsoc_timer_interrupt(int irq, void *dev_id)
 {
        struct clock_event_device *ce = dev_id;
 
-       WARN_ON(!(readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_STATUS) & BIT(0)));
+       WARN_ON(!(readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_STATUS) &
+               BIT(0)));
 
        /* clear timer0 interrupt */
        writel_relaxed(BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_STATUS);
@@ -77,9 +78,11 @@ static cycle_t sirfsoc_timer_read(struct clocksource *cs)
        u64 cycles;
 
        /* latch the 64-bit timer counter */
-       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
+       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT,
+               sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
        cycles = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_HI);
-       cycles = (cycles << 32) | readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_LO);
+       cycles = (cycles << 32) |
+               readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_LO);
 
        return cycles;
 }
@@ -89,11 +92,13 @@ static int sirfsoc_timer_set_next_event(unsigned long delta,
 {
        unsigned long now, next;
 
-       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
+       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT,
+               sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
        now = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_LO);
        next = now + delta;
        writel_relaxed(next, sirfsoc_timer_base + SIRFSOC_TIMER_MATCH_0);
-       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
+       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT,
+               sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
        now = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_LO);
 
        return next - now > delta ? -ETIME : 0;
@@ -108,10 +113,12 @@ static void sirfsoc_timer_set_mode(enum clock_event_mode mode,
                WARN_ON(1);
                break;
        case CLOCK_EVT_MODE_ONESHOT:
-               writel_relaxed(val | BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
+               writel_relaxed(val | BIT(0),
+                       sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
                break;
        case CLOCK_EVT_MODE_SHUTDOWN:
-               writel_relaxed(val & ~BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
+               writel_relaxed(val & ~BIT(0),
+                       sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
                break;
        case CLOCK_EVT_MODE_UNUSED:
        case CLOCK_EVT_MODE_RESUME:
@@ -123,10 +130,13 @@ static void sirfsoc_clocksource_suspend(struct clocksource *cs)
 {
        int i;
 
-       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
+       writel_relaxed(SIRFSOC_TIMER_LATCH_BIT,
+               sirfsoc_timer_base + SIRFSOC_TIMER_LATCH);
 
        for (i = 0; i < SIRFSOC_TIMER_REG_CNT; i++)
-               sirfsoc_timer_reg_val[i] = readl_relaxed(sirfsoc_timer_base + sirfsoc_timer_reg_list[i]);
+               sirfsoc_timer_reg_val[i] =
+                       readl_relaxed(sirfsoc_timer_base +
+                               sirfsoc_timer_reg_list[i]);
 }
 
 static void sirfsoc_clocksource_resume(struct clocksource *cs)
@@ -134,10 +144,13 @@ static void sirfsoc_clocksource_resume(struct clocksource *cs)
        int i;
 
        for (i = 0; i < SIRFSOC_TIMER_REG_CNT - 2; i++)
-               writel_relaxed(sirfsoc_timer_reg_val[i], sirfsoc_timer_base + sirfsoc_timer_reg_list[i]);
+               writel_relaxed(sirfsoc_timer_reg_val[i],
+                       sirfsoc_timer_base + sirfsoc_timer_reg_list[i]);
 
-       writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 2], sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO);
-       writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 1], sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI);
+       writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 2],
+               sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO);
+       writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 1],
+               sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI);
 }
 
 static struct clock_event_device sirfsoc_clockevent = {
@@ -185,11 +198,11 @@ static void __init sirfsoc_prima2_timer_init(struct device_node *np)
        unsigned long rate;
        struct clk *clk;
 
-       /* timer's input clock is io clock */
-       clk = clk_get_sys("io", NULL);
-
+       clk = of_clk_get(np, 0);
        BUG_ON(IS_ERR(clk));
 
+       BUG_ON(clk_prepare_enable(clk));
+
        rate = clk_get_rate(clk);
 
        BUG_ON(rate < PRIMA2_CLOCK_FREQ);
@@ -202,7 +215,7 @@ static void __init sirfsoc_prima2_timer_init(struct device_node *np)
        sirfsoc_timer_irq.irq = irq_of_parse_and_map(np, 0);
 
        writel_relaxed(rate / PRIMA2_CLOCK_FREQ / 2 - 1,
-                      sirfsoc_timer_base + SIRFSOC_TIMER_DIV);
+               sirfsoc_timer_base + SIRFSOC_TIMER_DIV);
        writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO);
        writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI);
        writel_relaxed(BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_STATUS);
@@ -216,4 +229,5 @@ static void __init sirfsoc_prima2_timer_init(struct device_node *np)
 
        sirfsoc_clockevent_init();
 }
-CLOCKSOURCE_OF_DECLARE(sirfsoc_prima2_timer, "sirf,prima2-tick", sirfsoc_prima2_timer_init);
+CLOCKSOURCE_OF_DECLARE(sirfsoc_prima2_timer,
+       "sirf,prima2-tick", sirfsoc_prima2_timer_init);