Skip to content

Commit

Permalink
x86: HPET try to activate force detected hpet
Browse files Browse the repository at this point in the history
Enable HPET later during boot, after the force detect in PCI quirks.  Also add
a call to repeat the force enabling at resume time.

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Andi Kleen <ak@suse.de>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Venki Pallipadi authored and Thomas Gleixner committed Oct 12, 2007
1 parent d54bd57 commit 59c69f2
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
27 changes: 25 additions & 2 deletions arch/x86/kernel/hpet.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ static struct clock_event_device hpet_clockevent = {
.set_next_event = hpet_legacy_next_event,
.shift = 32,
.irq = 0,
.rating = 50,
};

static void hpet_start_counter(void)
Expand All @@ -178,6 +179,17 @@ static void hpet_start_counter(void)
hpet_writel(cfg, HPET_CFG);
}

static void hpet_resume_device(void)
{
ich_force_hpet_resume();
}

static void hpet_restart_counter(void)
{
hpet_resume_device();
hpet_start_counter();
}

static void hpet_enable_legacy_int(void)
{
unsigned long cfg = hpet_readl(HPET_CFG);
Expand Down Expand Up @@ -299,7 +311,7 @@ static struct clocksource clocksource_hpet = {
.mask = HPET_MASK,
.shift = HPET_SHIFT,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
.resume = hpet_start_counter,
.resume = hpet_restart_counter,
#ifdef CONFIG_X86_64
.vread = vread_hpet,
#endif
Expand Down Expand Up @@ -412,10 +424,21 @@ int __init hpet_enable(void)
*/
static __init int hpet_late_init(void)
{
if (!is_hpet_capable())
if (boot_hpet_disable)
return -ENODEV;

if (!hpet_address) {
if (!force_hpet_address)
return -ENODEV;

hpet_address = force_hpet_address;
hpet_enable();
if (!hpet_virt_address)
return -ENODEV;
}

hpet_reserve_platform_timers(hpet_readl(HPET_ID));

return 0;
}
fs_initcall(hpet_late_init);
Expand Down
1 change: 1 addition & 0 deletions include/asm-x86/hpet.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@

/* hpet memory map physical address */
extern unsigned long hpet_address;
extern unsigned long force_hpet_address;
extern int is_hpet_enabled(void);
extern int hpet_enable(void);
extern unsigned long hpet_readl(unsigned long a);
Expand Down

0 comments on commit 59c69f2

Please sign in to comment.