aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/acpi/boot.c
diff options
context:
space:
mode:
authorMatthew Garrett <mjg59@srcf.ucam.org>2008-06-30 20:12:06 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-08 05:10:41 -0400
commit9340e1ccdf7b9b22a2be7f51cd74e8b5e11961bf (patch)
treebecdda013a47f66a54e4c44cbb7eaff6b5471a41 /arch/x86/kernel/acpi/boot.c
parent471694ea6c6ccdf7131354f1d698d4d83a605293 (diff)
x86, ioapic, acpi quirk: disable IRQ 0 through I/O APIC for some HP systems
Some HP laptops have a problem with their DSDT reporting as HP/SB400/10000, which includes some code which overrides all temperature trip points to 16C if the INTIN2 input of the I/O APIC is enabled. This input is incorrectly designated the ISA IRQ 0 via an interrupt source override even though it is wired to the output of the master 8259A and INTIN0 is not connected at all. So far two models have been identified, namely nx6125 and nx6325. Use a knob provided by the I/O APIC interrupt registration code to abandon any attempts to route IRQ 0 through the I/O APIC for these systems. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: Len Brown <lenb@kernel.org> Cc: Matthew Garrett <mjg59@srcf.ucam.org> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/acpi/boot.c')
-rw-r--r--arch/x86/kernel/acpi/boot.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 92a542653956..9908ef45a6b2 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1427,6 +1427,17 @@ static int __init force_acpi_ht(const struct dmi_system_id *d)
1427} 1427}
1428 1428
1429/* 1429/*
1430 * Don't register any I/O APIC entries for the 8254 timer IRQ.
1431 */
1432static int __init
1433dmi_disable_irq0_through_ioapic(const struct dmi_system_id *d)
1434{
1435 pr_notice("%s detected: disabling IRQ 0 through I/O APIC\n", d->ident);
1436 disable_irq0_through_ioapic = 1;
1437 return 0;
1438}
1439
1440/*
1430 * If your system is blacklisted here, but you find that acpi=force 1441 * If your system is blacklisted here, but you find that acpi=force
1431 * works for you, please contact acpi-devel@sourceforge.net 1442 * works for you, please contact acpi-devel@sourceforge.net
1432 */ 1443 */
@@ -1593,6 +1604,32 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
1593 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), 1604 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
1594 }, 1605 },
1595 }, 1606 },
1607 /*
1608 * HP laptops which use a DSDT reporting as HP/SB400/10000,
1609 * which includes some code which overrides all temperature
1610 * trip points to 16C if the INTIN2 input of the I/O APIC
1611 * is enabled. This input is incorrectly designated the
1612 * ISA IRQ 0 via an interrupt source override even though
1613 * it is wired to the output of the master 8259A and INTIN0
1614 * is not connected at all. Abandon any attempts to route
1615 * IRQ 0 through the I/O APIC therefore.
1616 */
1617 {
1618 .callback = dmi_disable_irq0_through_ioapic,
1619 .ident = "HP NX6125 laptop",
1620 .matches = {
1621 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1622 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6125"),
1623 },
1624 },
1625 {
1626 .callback = dmi_disable_irq0_through_ioapic,
1627 .ident = "HP NX6325 laptop",
1628 .matches = {
1629 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1630 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
1631 },
1632 },
1596 {} 1633 {}
1597}; 1634};
1598 1635