diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-12-14 21:39:50 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-12-14 21:39:50 +0000 |
commit | 873d7498bd7efba53e22e2db70ebbc11bf686d07 (patch) | |
tree | 6cd350493a7bbd9adc739e4193af44f2d1765040 /arch/mips/mips-boards/generic | |
parent | 920c6058e2a57774263231a6a2c76c4f8b633eaa (diff) |
MIPS32 patches from MIPS.
Diffstat (limited to 'arch/mips/mips-boards/generic')
-rw-r--r-- | arch/mips/mips-boards/generic/time.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/mips/mips-boards/generic/time.c b/arch/mips/mips-boards/generic/time.c index d5fdc5f6a..ee08dd5ac 100644 --- a/arch/mips/mips-boards/generic/time.c +++ b/arch/mips/mips-boards/generic/time.c @@ -31,6 +31,7 @@ #include <asm/mipsregs.h> #include <asm/ptrace.h> +#include <asm/div64.h> #include <linux/mc146818rtc.h> #include <linux/timex.h> @@ -274,6 +275,7 @@ void __init time_init(void) /* This is for machines which generate the exact clock. */ #define USECS_PER_JIFFY (1000000/HZ) +#define USECS_PER_JIFFY_FRAC (0x100000000*1000000/HZ&0xffffffff) /* Cycle counter value at the previous timer interrupt.. */ @@ -303,6 +305,15 @@ static unsigned long do_fast_gettimeoffset(void) if (tmp && last_jiffies != tmp) { last_jiffies = tmp; +#ifdef CONFIG_CPU_MIPS32 + if (last_jiffies != 0) { + unsigned long r0; + do_div64_32(r0, timerhi, timerlo, tmp); + do_div64_32(quotient, USECS_PER_JIFFY, + USECS_PER_JIFFY_FRAC, r0); + cached_quotient = quotient; + } +#else __asm__(".set\tnoreorder\n\t" ".set\tnoat\n\t" ".set\tmips3\n\t" @@ -325,6 +336,7 @@ static unsigned long do_fast_gettimeoffset(void) "r" (USECS_PER_JIFFY) :"$1"); cached_quotient = quotient; +#endif } /* Get last timer tick in absolute kernel time */ |