|
@@ -231,27 +231,37 @@ static struct clock_event_device hpet_clockevent = {
|
|
|
.rating = 50,
|
|
|
};
|
|
|
|
|
|
-static void hpet_start_counter(void)
|
|
|
+static void hpet_stop_counter(void)
|
|
|
{
|
|
|
unsigned long cfg = hpet_readl(HPET_CFG);
|
|
|
-
|
|
|
cfg &= ~HPET_CFG_ENABLE;
|
|
|
hpet_writel(cfg, HPET_CFG);
|
|
|
hpet_writel(0, HPET_COUNTER);
|
|
|
hpet_writel(0, HPET_COUNTER + 4);
|
|
|
+}
|
|
|
+
|
|
|
+static void hpet_start_counter(void)
|
|
|
+{
|
|
|
+ unsigned long cfg = hpet_readl(HPET_CFG);
|
|
|
cfg |= HPET_CFG_ENABLE;
|
|
|
hpet_writel(cfg, HPET_CFG);
|
|
|
}
|
|
|
|
|
|
+static void hpet_restart_counter(void)
|
|
|
+{
|
|
|
+ hpet_stop_counter();
|
|
|
+ hpet_start_counter();
|
|
|
+}
|
|
|
+
|
|
|
static void hpet_resume_device(void)
|
|
|
{
|
|
|
force_hpet_resume();
|
|
|
}
|
|
|
|
|
|
-static void hpet_restart_counter(void)
|
|
|
+static void hpet_resume_counter(void)
|
|
|
{
|
|
|
hpet_resume_device();
|
|
|
- hpet_start_counter();
|
|
|
+ hpet_restart_counter();
|
|
|
}
|
|
|
|
|
|
static void hpet_enable_legacy_int(void)
|
|
@@ -738,7 +748,7 @@ static struct clocksource clocksource_hpet = {
|
|
|
.mask = HPET_MASK,
|
|
|
.shift = HPET_SHIFT,
|
|
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
|
|
- .resume = hpet_restart_counter,
|
|
|
+ .resume = hpet_resume_counter,
|
|
|
#ifdef CONFIG_X86_64
|
|
|
.vread = vread_hpet,
|
|
|
#endif
|
|
@@ -750,7 +760,7 @@ static int hpet_clocksource_register(void)
|
|
|
cycle_t t1;
|
|
|
|
|
|
/* Start the counter */
|
|
|
- hpet_start_counter();
|
|
|
+ hpet_restart_counter();
|
|
|
|
|
|
/* Verify whether hpet counter works */
|
|
|
t1 = read_hpet();
|