static void __devinit acpi_pm_check_graylist(struct pci_dev *dev) { if (acpi_pm_good) return; printk(KERN_WARNING "* The chipset may have PM-Timer Bug. Due to" " workarounds for a bug,\n" "* this clock source is slow. If you are sure your timer" " does not have\n" "* this bug, please use \"acpi_pm_good\" to disable the" " workaround\n"); acpi_pm_need_workaround(); }
/* * PIIX4 Errata: * * The power management timer may return improper results when read. * Although the timer value settles properly after incrementing, * while incrementing there is a 3 ns window every 69.8 ns where the * timer value is indeterminate (a 4.2% chance that the data will be * 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) { if (acpi_pm_good) return; /* the bug has been fixed in PIIX4M */ if (dev->revision < 3) { printk(KERN_WARNING "* Found PM-Timer Bug on the chipset." " Due to workarounds for a bug,\n" "* this clock source is slow. Consider trying" " other clock sources\n"); acpi_pm_need_workaround(); } }
/* * PIIX4 Errata: * * The power management timer may return improper results when read. * Although the timer value settles properly after incrementing, * while incrementing there is a 3 ns window every 69.8 ns where the * timer value is indeterminate (a 4.2% chance that the data will be * 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) { u8 rev; if (acpi_pm_good) return; pci_read_config_byte(dev, PCI_REVISION_ID, &rev); /* the bug has been fixed in PIIX4M */ if (rev < 3) { printk(KERN_WARNING "* Found PM-Timer Bug on the chipset." " Due to workarounds for a bug,\n" "* this clock source is slow. Consider trying" " other clock sources\n"); acpi_pm_need_workaround(); } }