Force acpi_use_timer_override if NFORCE5 chipset is detected. From: Alexey Starikovskiy --- arch/i386/kernel/acpi/earlyquirk.c | 17 +++++++++++++---- include/linux/pci_ids.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c index 23f78ef..1adb188 100644 --- a/arch/i386/kernel/acpi/earlyquirk.c +++ b/arch/i386/kernel/acpi/earlyquirk.c @@ -26,14 +26,23 @@ static int __init check_bridge(int vendor, int device) /* According to Nvidia all timer overrides are bogus unless HPET is enabled. */ if (!acpi_use_timer_override && vendor == PCI_VENDOR_ID_NVIDIA) { + /* NFORCE5 is known to require timer override + see bugzilla.kernel.org #8368 */ + if (device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_PCI_BRIDGE) { + printk(KERN_INFO "NFORCE5 is detected," + " forcing ACPI timer override.\n"); + acpi_use_timer_override = 1; + acpi_skip_timer_override = 0; + return 0; + } if (!warned && acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) { warned = 1; acpi_skip_timer_override = 1; - printk(KERN_INFO "Nvidia board " - "detected. Ignoring ACPI " - "timer override.\n"); - printk(KERN_INFO "If you got timer trouble " + printk(KERN_INFO "Nvidia board " + "detected. Ignoring ACPI " + "timer override.\n"); + printk(KERN_INFO "If you got timer trouble " "try acpi_use_timer_override\n"); } diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 6a115cf..e78809e 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -1159,6 +1159,7 @@ #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE 0x0265 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA 0x0266 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2 0x0267 +#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_PCI_BRIDGE 0x370 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SMBUS 0x0368 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E