diff options
Diffstat (limited to 'drivers/clocksource/acpi_pm.c')
| -rw-r--r-- | drivers/clocksource/acpi_pm.c | 35 | 
1 files changed, 19 insertions, 16 deletions
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index cfb0f527841..6eab8898567 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c @@ -73,7 +73,7 @@ static struct clocksource clocksource_acpi_pm = {  #ifdef CONFIG_PCI -static int __devinitdata acpi_pm_good; +static int acpi_pm_good;  static int __init acpi_pm_good_setup(char *__str)  {  	acpi_pm_good = 1; @@ -102,7 +102,7 @@ static inline void acpi_pm_need_workaround(void)   * incorrect when read). As a result, the ACPI free running count up   * timer specification is violated due to erroneous reads.   */ -static void __devinit acpi_pm_check_blacklist(struct pci_dev *dev) +static void acpi_pm_check_blacklist(struct pci_dev *dev)  {  	if (acpi_pm_good)  		return; @@ -120,7 +120,7 @@ static void __devinit acpi_pm_check_blacklist(struct pci_dev *dev)  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3,  			acpi_pm_check_blacklist); -static void __devinit acpi_pm_check_graylist(struct pci_dev *dev) +static void acpi_pm_check_graylist(struct pci_dev *dev)  {  	if (acpi_pm_good)  		return; @@ -143,7 +143,7 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_LE,  #ifndef CONFIG_X86_64  #include <asm/mach_timer.h>  #define PMTMR_EXPECTED_RATE \ -  ((CALIBRATE_LATCH * (PMTMR_TICKS_PER_SEC >> 10)) / (CLOCK_TICK_RATE>>10)) +  ((CALIBRATE_LATCH * (PMTMR_TICKS_PER_SEC >> 10)) / (PIT_TICK_RATE>>10))  /*   * Some boards have the PMTMR running way too fast. We check   * the PMTMR rate against PIT channel 2 to catch these cases. @@ -200,19 +200,23 @@ static int __init init_acpi_pm_clocksource(void)  			if ((value2 < value1) && ((value2) < 0xFFF))  				break;  			printk(KERN_INFO "PM-Timer had inconsistent results:" -			       " 0x%#llx, 0x%#llx - aborting.\n", +			       " %#llx, %#llx - aborting.\n",  			       value1, value2); +			pmtmr_ioport = 0;  			return -EINVAL;  		}  		if (i == ACPI_PM_READ_CHECKS) {  			printk(KERN_INFO "PM-Timer failed consistency check " -			       " (0x%#llx) - aborting.\n", value1); +			       " (%#llx) - aborting.\n", value1); +			pmtmr_ioport = 0;  			return -ENODEV;  		}  	} -	if (verify_pmtmr_rate() != 0) +	if (verify_pmtmr_rate() != 0){ +		pmtmr_ioport = 0;  		return -ENODEV; +	}  	return clocksource_register_hz(&clocksource_acpi_pm,  						PMTMR_TICKS_PER_SEC); @@ -229,16 +233,15 @@ fs_initcall(init_acpi_pm_clocksource);   */  static int __init parse_pmtmr(char *arg)  { -	unsigned long base; +	unsigned int base; +	int ret; -	if (strict_strtoul(arg, 16, &base)) -		return -EINVAL; -#ifdef CONFIG_X86_64 -	if (base > UINT_MAX) -		return -ERANGE; -#endif -	printk(KERN_INFO "PMTMR IOPort override: 0x%04x -> 0x%04lx\n", -	       pmtmr_ioport, base); +	ret = kstrtouint(arg, 16, &base); +	if (ret) +		return ret; + +	pr_info("PMTMR IOPort override: 0x%04x -> 0x%04x\n", pmtmr_ioport, +		base);  	pmtmr_ioport = base;  	return 1;  | 
