[PATCH] Consolidate default sched_clock()
[cascardo/linux.git] / arch / mips / kernel / time.c
index 111d1ba..545fcbc 100644 (file)
@@ -11,7 +11,6 @@
  * Free Software Foundation;  either version 2 of the  License, or (at your
  * option) any later version.
  */
-#include <linux/clocksource.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -83,7 +82,7 @@ static void null_timer_ack(void) { /* nothing */ }
 /*
  * Null high precision timer functions for systems lacking one.
  */
-static unsigned int null_hpt_read(void)
+static cycle_t null_hpt_read(void)
 {
        return 0;
 }
@@ -95,10 +94,8 @@ static void c0_timer_ack(void)
 {
        unsigned int count;
 
-#ifndef CONFIG_SOC_PNX8550     /* pnx8550 resets to zero */
        /* Ack this timer interrupt and set the next one.  */
        expirelo += cycles_per_jiffy;
-#endif
        write_c0_compare(expirelo);
 
        /* Check to see if we have missed any timer interrupts.  */
@@ -112,7 +109,7 @@ static void c0_timer_ack(void)
 /*
  * High precision timer functions for a R4k-compatible timer.
  */
-static unsigned int c0_hpt_read(void)
+static cycle_t c0_hpt_read(void)
 {
        return read_c0_count();
 }
@@ -126,8 +123,6 @@ static void __init c0_hpt_timer_init(void)
 
 int (*mips_timer_state)(void);
 void (*mips_timer_ack)(void);
-unsigned int (*mips_hpt_read)(void);
-unsigned int mips_hpt_mask = 0xffffffff;
 
 /* last time when xtime and rtc are sync'ed up */
 static long last_rtc_update;
@@ -269,8 +264,7 @@ static struct irqaction timer_irqaction = {
 
 static unsigned int __init calibrate_hpt(void)
 {
-       u64 frequency;
-       u32 hpt_start, hpt_end, hpt_count, hz;
+       cycle_t frequency, hpt_start, hpt_end, hpt_count, hz;
 
        const int loops = HZ / 10;
        int log_2_loops = 0;
@@ -296,28 +290,23 @@ static unsigned int __init calibrate_hpt(void)
         * during the calculated number of periods between timer
         * interrupts.
         */
-       hpt_start = mips_hpt_read();
+       hpt_start = clocksource_mips.read();
        do {
                while (mips_timer_state());
                while (!mips_timer_state());
        } while (--i);
-       hpt_end = mips_hpt_read();
+       hpt_end = clocksource_mips.read();
 
-       hpt_count = (hpt_end - hpt_start) & mips_hpt_mask;
+       hpt_count = (hpt_end - hpt_start) & clocksource_mips.mask;
        hz = HZ;
-       frequency = (u64)hpt_count * (u64)hz;
+       frequency = hpt_count * hz;
 
        return frequency >> log_2_loops;
 }
 
-static cycle_t read_mips_hpt(void)
-{
-       return (cycle_t)mips_hpt_read();
-}
-
-static struct clocksource clocksource_mips = {
+struct clocksource clocksource_mips = {
        .name           = "MIPS",
-       .read           = read_mips_hpt,
+       .mask           = 0xffffffff,
        .is_continuous  = 1,
 };
 
@@ -326,7 +315,7 @@ static void __init init_mips_clocksource(void)
        u64 temp;
        u32 shift;
 
-       if (!mips_hpt_frequency || mips_hpt_read == null_hpt_read)
+       if (!mips_hpt_frequency || clocksource_mips.read == null_hpt_read)
                return;
 
        /* Calclate a somewhat reasonable rating value */
@@ -340,7 +329,6 @@ static void __init init_mips_clocksource(void)
        }
        clocksource_mips.shift = shift;
        clocksource_mips.mult = (u32)temp;
-       clocksource_mips.mask = mips_hpt_mask;
 
        clocksource_register(&clocksource_mips);
 }
@@ -360,19 +348,19 @@ void __init time_init(void)
                                -xtime.tv_sec, -xtime.tv_nsec);
 
        /* Choose appropriate high precision timer routines.  */
-       if (!cpu_has_counter && !mips_hpt_read)
+       if (!cpu_has_counter && !clocksource_mips.read)
                /* No high precision timer -- sorry.  */
-               mips_hpt_read = null_hpt_read;
+               clocksource_mips.read = null_hpt_read;
        else if (!mips_hpt_frequency && !mips_timer_state) {
                /* A high precision timer of unknown frequency.  */
-               if (!mips_hpt_read)
+               if (!clocksource_mips.read)
                        /* No external high precision timer -- use R4k.  */
-                       mips_hpt_read = c0_hpt_read;
+                       clocksource_mips.read = c0_hpt_read;
        } else {
                /* We know counter frequency.  Or we can get it.  */
-               if (!mips_hpt_read) {
+               if (!clocksource_mips.read) {
                        /* No external high precision timer -- use R4k.  */
-                       mips_hpt_read = c0_hpt_read;
+                       clocksource_mips.read = c0_hpt_read;
 
                        if (!mips_timer_state) {
                                /* No external timer interrupt -- use R4k.  */
@@ -467,8 +455,3 @@ EXPORT_SYMBOL(rtc_lock);
 EXPORT_SYMBOL(to_tm);
 EXPORT_SYMBOL(rtc_mips_set_time);
 EXPORT_SYMBOL(rtc_mips_get_time);
-
-unsigned long long sched_clock(void)
-{
-       return (unsigned long long)jiffies*(1000000000/HZ);
-}