Commit 51d5aa75 authored by Feng Tang's avatar Feng Tang Committed by Ben Hutchings

ACPI: Make acpi_skip_timer_override cover all source_irq==0 cases

commit ae10ccdc 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=40002Reported-and-tested-by: default avatarSzymon Kowalczyk <fazerxlo@o2.pl>
Signed-off-by: default avatarFeng Tang <feng.tang@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 73a33465
...@@ -416,12 +416,14 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header, ...@@ -416,12 +416,14 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,
return 0; return 0;
} }
if (intsrc->source_irq == 0 && intsrc->global_irq == 2) { if (intsrc->source_irq == 0) {
if (acpi_skip_timer_override) { if (acpi_skip_timer_override) {
printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); printk(PREFIX "BIOS IRQ0 override ignored.\n");
return 0; return 0;
} }
if (acpi_fix_pin2_polarity && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) {
if ((intsrc->global_irq == 2) && acpi_fix_pin2_polarity
&& (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) {
intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK; intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK;
printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n"); printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n");
} }
...@@ -1327,7 +1329,7 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d) ...@@ -1327,7 +1329,7 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d)
} }
/* /*
* Force ignoring BIOS IRQ0 pin2 override * Force ignoring BIOS IRQ0 override
*/ */
static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
{ {
...@@ -1337,7 +1339,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) ...@@ -1337,7 +1339,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
*/ */
if (!acpi_skip_timer_override) { if (!acpi_skip_timer_override) {
WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n"); WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n");
pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n", pr_notice("%s detected: Ignoring BIOS IRQ0 override\n",
d->ident); d->ident);
acpi_skip_timer_override = 1; acpi_skip_timer_override = 1;
} }
...@@ -1431,7 +1433,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = { ...@@ -1431,7 +1433,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = {
* is enabled. This input is incorrectly designated the * is enabled. This input is incorrectly designated the
* ISA IRQ 0 via an interrupt source override even though * ISA IRQ 0 via an interrupt source override even though
* it is wired to the output of the master 8259A and INTIN0 * it is wired to the output of the master 8259A and INTIN0
* is not connected at all. Force ignoring BIOS IRQ0 pin2 * is not connected at all. Force ignoring BIOS IRQ0
* override in that cases. * override in that cases.
*/ */
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment