[MIPS] Deforest the function pointer jungle in the time code.
[firefly-linux-kernel-4.4.55.git] / arch / mips / sgi-ip22 / ip22-time.c
index 0e061890f7973fab7d33c114ae89a6820c6c44dd..0387c385b4b2e1b07c4a102d5179bd957cb88111 100644 (file)
@@ -32,7 +32,7 @@
  * note that mktime uses month from 1 to 12 while to_tm
  * uses 0 to 11.
  */
-static unsigned long indy_rtc_get_time(void)
+unsigned long read_persistent_clock(void)
 {
        unsigned int yrs, mon, day, hrs, min, sec;
        unsigned int save_control;
@@ -60,7 +60,7 @@ static unsigned long indy_rtc_get_time(void)
        return mktime(yrs + 1900, mon, day, hrs, min, sec);
 }
 
-static int indy_rtc_set_time(unsigned long tim)
+int rtc_mips_set_time(unsigned long tim)
 {
        struct rtc_time tm;
        unsigned int save_control;
@@ -94,7 +94,7 @@ static int indy_rtc_set_time(unsigned long tim)
 static unsigned long dosample(void)
 {
        u32 ct0, ct1;
-       volatile u8 msb, lsb;
+       u8 msb, lsb;
 
        /* Start the counter. */
        sgint->tcword = (SGINT_TCWORD_CNT2 | SGINT_TCWORD_CALL |
@@ -107,28 +107,28 @@ static unsigned long dosample(void)
 
        /* Latch and spin until top byte of counter2 is zero */
        do {
-               sgint->tcword = SGINT_TCWORD_CNT2 | SGINT_TCWORD_CLAT;
-               lsb = sgint->tcnt2;
-               msb = sgint->tcnt2;
+               writeb(SGINT_TCWORD_CNT2 | SGINT_TCWORD_CLAT, &sgint->tcword);
+               lsb = readb(&sgint->tcnt2);
+               msb = readb(&sgint->tcnt2);
                ct1 = read_c0_count();
        } while (msb);
 
        /* Stop the counter. */
-       sgint->tcword = (SGINT_TCWORD_CNT2 | SGINT_TCWORD_CALL |
-                        SGINT_TCWORD_MSWST);
+       writeb(SGINT_TCWORD_CNT2 | SGINT_TCWORD_CALL | SGINT_TCWORD_MSWST,
+              &sgint->tcword);
        /*
         * Return the difference, this is how far the r4k counter increments
         * for every 1/HZ seconds. We round off the nearest 1 MHz of master
         * clock (= 1000000 / HZ / 2).
         */
-       /*return (ct1 - ct0 + (500000/HZ/2)) / (500000/HZ) * (500000/HZ);*/
+
        return (ct1 - ct0) / (500000/HZ) * (500000/HZ);
 }
 
 /*
  * Here we need to calibrate the cycle counter to at least be close.
  */
-static __init void indy_time_init(void)
+__init void plat_time_init(void)
 {
        unsigned long r4k_ticks[3];
        unsigned long r4k_tick;
@@ -175,7 +175,7 @@ static __init void indy_time_init(void)
 }
 
 /* Generic SGI handler for (spurious) 8254 interrupts */
-void indy_8254timer_irq(struct pt_regs *regs)
+void indy_8254timer_irq(void)
 {
        int irq = SGI_8254_0_IRQ;
        ULONG cnt;
@@ -189,13 +189,13 @@ void indy_8254timer_irq(struct pt_regs *regs)
        irq_exit();
 }
 
-void indy_r4k_timer_interrupt(struct pt_regs *regs)
+void indy_r4k_timer_interrupt(void)
 {
        int irq = SGI_TIMER_IRQ;
 
        irq_enter();
        kstat_this_cpu.irqs[irq]++;
-       timer_interrupt(irq, NULL, regs);
+       timer_interrupt(irq, NULL);
        irq_exit();
 }
 
@@ -207,12 +207,3 @@ void __init plat_timer_setup(struct irqaction *irq)
        /* setup irqaction */
        setup_irq(SGI_TIMER_IRQ, irq);
 }
-
-void __init ip22_time_init(void)
-{
-       /* setup hookup functions */
-       rtc_mips_get_time = indy_rtc_get_time;
-       rtc_mips_set_time = indy_rtc_set_time;
-
-       board_time_init = indy_time_init;
-}