Loading arch/mips/kernel/time.c +31 −8 Original line number Diff line number Diff line Loading @@ -171,25 +171,48 @@ struct clocksource clocksource_mips = { .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; static void __init init_mips_clocksource(void) void __init clocksource_set_clock(struct clocksource *cs, unsigned int clock) { u64 temp; u32 shift; if (!mips_hpt_frequency || clocksource_mips.read == null_hpt_read) return; /* Find a shift value */ for (shift = 32; shift > 0; shift--) { temp = (u64) NSEC_PER_SEC << shift; do_div(temp, clock); if ((temp >> 32) == 0) break; } cs->shift = shift; cs->mult = (u32) temp; } void __cpuinit clockevent_set_clock(struct clock_event_device *cd, unsigned int clock) { u64 temp; u32 shift; /* Calclate a somewhat reasonable rating value */ clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; /* Find a shift value */ for (shift = 32; shift > 0; shift--) { temp = (u64) NSEC_PER_SEC << shift; do_div(temp, mips_hpt_frequency); do_div(temp, clock); if ((temp >> 32) == 0) break; } clocksource_mips.shift = shift; clocksource_mips.mult = (u32)temp; cd->shift = shift; cd->mult = (u32) temp; } static void __init init_mips_clocksource(void) { if (!mips_hpt_frequency || clocksource_mips.read == null_hpt_read) return; /* Calclate a somewhat reasonable rating value */ clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; clocksource_set_clock(&clocksource_mips, mips_hpt_frequency); clocksource_register(&clocksource_mips); } Loading include/asm-mips/time.h +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <linux/ptrace.h> #include <linux/rtc.h> #include <linux/spinlock.h> #include <linux/clockchips.h> #include <linux/clocksource.h> extern spinlock_t rtc_lock; Loading Loading @@ -83,4 +84,8 @@ static inline void mips_clockevent_init(void) } #endif extern void clocksource_set_clock(struct clocksource *cs, unsigned int clock); extern void clockevent_set_clock(struct clock_event_device *cd, unsigned int clock); #endif /* _ASM_TIME_H */ Loading
arch/mips/kernel/time.c +31 −8 Original line number Diff line number Diff line Loading @@ -171,25 +171,48 @@ struct clocksource clocksource_mips = { .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; static void __init init_mips_clocksource(void) void __init clocksource_set_clock(struct clocksource *cs, unsigned int clock) { u64 temp; u32 shift; if (!mips_hpt_frequency || clocksource_mips.read == null_hpt_read) return; /* Find a shift value */ for (shift = 32; shift > 0; shift--) { temp = (u64) NSEC_PER_SEC << shift; do_div(temp, clock); if ((temp >> 32) == 0) break; } cs->shift = shift; cs->mult = (u32) temp; } void __cpuinit clockevent_set_clock(struct clock_event_device *cd, unsigned int clock) { u64 temp; u32 shift; /* Calclate a somewhat reasonable rating value */ clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; /* Find a shift value */ for (shift = 32; shift > 0; shift--) { temp = (u64) NSEC_PER_SEC << shift; do_div(temp, mips_hpt_frequency); do_div(temp, clock); if ((temp >> 32) == 0) break; } clocksource_mips.shift = shift; clocksource_mips.mult = (u32)temp; cd->shift = shift; cd->mult = (u32) temp; } static void __init init_mips_clocksource(void) { if (!mips_hpt_frequency || clocksource_mips.read == null_hpt_read) return; /* Calclate a somewhat reasonable rating value */ clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; clocksource_set_clock(&clocksource_mips, mips_hpt_frequency); clocksource_register(&clocksource_mips); } Loading
include/asm-mips/time.h +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <linux/ptrace.h> #include <linux/rtc.h> #include <linux/spinlock.h> #include <linux/clockchips.h> #include <linux/clocksource.h> extern spinlock_t rtc_lock; Loading Loading @@ -83,4 +84,8 @@ static inline void mips_clockevent_init(void) } #endif extern void clocksource_set_clock(struct clocksource *cs, unsigned int clock); extern void clockevent_set_clock(struct clock_event_device *cd, unsigned int clock); #endif /* _ASM_TIME_H */