diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-05-30 18:29:21 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-05-30 18:29:21 +0100 |
commit | 29edaf88e2c851f4240a8bc995686dc158db5edd (patch) | |
tree | ea3ed72e0d0aba90d5fd2cf1e4b83f8aecd3c11f | |
parent | dc059c5b4927f773b47bc61b50cd43eb75188bd8 (diff) | |
download | xen-29edaf88e2c851f4240a8bc995686dc158db5edd.tar.gz xen-29edaf88e2c851f4240a8bc995686dc158db5edd.tar.bz2 xen-29edaf88e2c851f4240a8bc995686dc158db5edd.zip |
Remove 'hpet_force' option. Replace with 'clocksource' option to allow
forced selection of platform clocksource, overriding the default
priority ordering.
Usage: clocksource={pit,hpet,cyclone,acpi}
Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r-- | xen/arch/x86/time.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 4ba868f3fe..b4ff7520d9 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -31,10 +31,9 @@ #include <asm/hpet.h> #include <io_ports.h> -/* opt_hpet_force: If true, force HPET configuration via PCI space. */ -/* NB. This is a gross hack. Mainly useful for HPET testing. */ -static int opt_hpet_force = 0; -boolean_param("hpet_force", opt_hpet_force); +/* opt_clocksource: Force clocksource to one of: pit, hpet, cyclone, acpi. */ +static char opt_clocksource[10]; +string_param("clocksource", opt_clocksource); #define EPOCH MILLISECS(1000) @@ -357,15 +356,6 @@ static int init_hpet(void) u32 hpet_id, hpet_period, cfg; int i; - if ( (hpet_address == 0) && opt_hpet_force ) - { - outl(0x800038a0, 0xcf8); - outl(0xff000001, 0xcfc); - outl(0x800038a0, 0xcf8); - hpet_address = inl(0xcfc) & 0xfffffffe; - printk("WARNING: Forcibly enabled HPET at %#lx.\n", hpet_address); - } - if ( hpet_address == 0 ) return 0; @@ -603,6 +593,27 @@ static void platform_time_calibration(void) static void init_platform_timer(void) { + if ( opt_clocksource[0] != '\0' ) + { + int rc = -1; + + if ( !strcmp(opt_clocksource, "pit") ) + rc = (init_pit(), 1); + else if ( !strcmp(opt_clocksource, "hpet") ) + rc = init_hpet(); + else if ( !strcmp(opt_clocksource, "cyclone") ) + rc = init_cyclone(); + else if ( !strcmp(opt_clocksource, "acpi") ) + rc = init_pmtimer(); + + if ( rc == 1 ) + return; + + printk("WARNING: %s clocksource '%s'.\n", + (rc == 0) ? "Could not initialise" : "Unrecognised", + opt_clocksource); + } + if ( !init_cyclone() && !init_hpet() && !init_pmtimer() ) init_pit(); } |