Commit 7f3257ab authored by Len Brown's avatar Len Brown

[ACPI] Handle systems that specify non-ACPI-compliant SCI over-rides (Jun Nakajima)

parent 6c0d6304
......@@ -1019,8 +1019,6 @@ void __init mp_config_acpi_legacy_irqs (void)
}
}
/* Ensure the ACPI SCI interrupt level is active low, edge-triggered */
extern FADT_DESCRIPTOR acpi_fadt;
void __init mp_config_ioapic_for_sci(int irq)
......@@ -1029,6 +1027,7 @@ void __init mp_config_ioapic_for_sci(int irq)
int ioapic_pin;
struct acpi_table_madt *madt;
struct acpi_table_int_src_ovr *entry = NULL;
acpi_interrupt_flags flags;
void *madt_end;
acpi_status status;
......@@ -1052,15 +1051,12 @@ void __init mp_config_ioapic_for_sci(int irq)
* See the note at the end of ACPI 2.0b section
* 5.2.10.8 for what this is about.
*/
if (entry->bus_irq != entry->global_irq) {
acpi_fadt.sci_int = entry->global_irq;
irq = entry->global_irq;
break;
}
else
return;
flags = entry->flags;
acpi_fadt.sci_int = entry->global_irq;
irq = entry->global_irq;
break;
}
entry = (struct acpi_table_int_src_ovr *)
((unsigned long) entry + entry->header.length);
}
......@@ -1070,7 +1066,13 @@ void __init mp_config_ioapic_for_sci(int irq)
ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start;
io_apic_set_pci_routing(ioapic, ioapic_pin, irq, 1, 1); // Active low, level triggered
if (flags.polarity == 0)
flags.polarity = 0x3; /* Active low */
if (flags.trigger == 0)
flags.trigger = 0x3; /* Level-triggered */
io_apic_set_pci_routing(ioapic, ioapic_pin, irq,
(flags.trigger >> 1) , (flags.polarity >> 1));
}
#ifdef CONFIG_ACPI_PCI
......
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