|
@@ -16,7 +16,6 @@
|
|
|
#include <asm/hpet.h>
|
|
|
|
|
|
#define HPET_MASK CLOCKSOURCE_MASK(32)
|
|
|
-#define HPET_SHIFT 22
|
|
|
|
|
|
/* FSEC = 10^-15
|
|
|
NSEC = 10^-9 */
|
|
@@ -787,7 +786,6 @@ static struct clocksource clocksource_hpet = {
|
|
|
.rating = 250,
|
|
|
.read = read_hpet,
|
|
|
.mask = HPET_MASK,
|
|
|
- .shift = HPET_SHIFT,
|
|
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
|
|
.resume = hpet_resume_counter,
|
|
|
#ifdef CONFIG_X86_64
|
|
@@ -798,6 +796,7 @@ static struct clocksource clocksource_hpet = {
|
|
|
static int hpet_clocksource_register(void)
|
|
|
{
|
|
|
u64 start, now;
|
|
|
+ u64 hpet_freq;
|
|
|
cycle_t t1;
|
|
|
|
|
|
/* Start the counter */
|
|
@@ -832,9 +831,15 @@ static int hpet_clocksource_register(void)
|
|
|
* mult = (hpet_period * 2^shift)/10^6
|
|
|
* mult = (hpet_period << shift)/FSEC_PER_NSEC
|
|
|
*/
|
|
|
- clocksource_hpet.mult = div_sc(hpet_period, FSEC_PER_NSEC, HPET_SHIFT);
|
|
|
|
|
|
- clocksource_register(&clocksource_hpet);
|
|
|
+ /* Need to convert hpet_period (fsec/cyc) to cyc/sec:
|
|
|
+ *
|
|
|
+ * cyc/sec = FSEC_PER_SEC/hpet_period(fsec/cyc)
|
|
|
+ * cyc/sec = (FSEC_PER_NSEC * NSEC_PER_SEC)/hpet_period
|
|
|
+ */
|
|
|
+ hpet_freq = FSEC_PER_NSEC * NSEC_PER_SEC;
|
|
|
+ do_div(hpet_freq, hpet_period);
|
|
|
+ clocksource_register_hz(&clocksource_hpet, (u32)hpet_freq);
|
|
|
|
|
|
return 0;
|
|
|
}
|