aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFeng Tang <feng.tang@intel.com>2012-06-04 03:00:04 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-16 11:47:52 -0400
commit62aae691aaecc2695294cfdc6719f7bd5bbcd9c6 (patch)
tree8ae6cf76fba70ee37b76e8fca73598f02c2eebee
parente12fcd38abe8a869cbabd77724008f1cf812a3e7 (diff)
ACPI: Make acpi_skip_timer_override cover all source_irq==0 cases
commit ae10ccdc3093486f8c2369d227583f9d79f628e5 upstream. Currently when acpi_skip_timer_override is set, it only cover the (source_irq == 0 && global_irq == 2) cases. While there is also platform which need use this option and its global_irq is not 2. This patch will extend acpi_skip_timer_override to cover all timer overriding cases as long as the source irq is 0. This is the first part of a fix to kernel bug bugzilla 40002: "IRQ 0 assigned to VGA" https://bugzilla.kernel.org/show_bug.cgi?id=40002 Reported-and-tested-by: Szymon Kowalczyk <fazerxlo@o2.pl> Signed-off-by: Feng Tang <feng.tang@intel.com> Signed-off-by: Len Brown <len.brown@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--arch/x86/kernel/acpi/boot.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 8da75ff8650..9650bccc77b 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -416,12 +416,14 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,
416 return 0; 416 return 0;
417 } 417 }
418 418
419 if (intsrc->source_irq == 0 && intsrc->global_irq == 2) { 419 if (intsrc->source_irq == 0) {
420 if (acpi_skip_timer_override) { 420 if (acpi_skip_timer_override) {
421 printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); 421 printk(PREFIX "BIOS IRQ0 override ignored.\n");
422 return 0; 422 return 0;
423 } 423 }
424 if (acpi_fix_pin2_polarity && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) { 424
425 if ((intsrc->global_irq == 2) && acpi_fix_pin2_polarity
426 && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) {
425 intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK; 427 intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK;
426 printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n"); 428 printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n");
427 } 429 }
@@ -1327,7 +1329,7 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d)
1327} 1329}
1328 1330
1329/* 1331/*
1330 * Force ignoring BIOS IRQ0 pin2 override 1332 * Force ignoring BIOS IRQ0 override
1331 */ 1333 */
1332static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) 1334static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
1333{ 1335{
@@ -1337,7 +1339,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
1337 */ 1339 */
1338 if (!acpi_skip_timer_override) { 1340 if (!acpi_skip_timer_override) {
1339 WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n"); 1341 WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n");
1340 pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n", 1342 pr_notice("%s detected: Ignoring BIOS IRQ0 override\n",
1341 d->ident); 1343 d->ident);
1342 acpi_skip_timer_override = 1; 1344 acpi_skip_timer_override = 1;
1343 } 1345 }
@@ -1431,7 +1433,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = {
1431 * is enabled. This input is incorrectly designated the 1433 * is enabled. This input is incorrectly designated the
1432 * ISA IRQ 0 via an interrupt source override even though 1434 * ISA IRQ 0 via an interrupt source override even though
1433 * it is wired to the output of the master 8259A and INTIN0 1435 * it is wired to the output of the master 8259A and INTIN0
1434 * is not connected at all. Force ignoring BIOS IRQ0 pin2 1436 * is not connected at all. Force ignoring BIOS IRQ0
1435 * override in that cases. 1437 * override in that cases.
1436 */ 1438 */
1437 { 1439 {