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) ...@@ -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; extern FADT_DESCRIPTOR acpi_fadt;
void __init mp_config_ioapic_for_sci(int irq) void __init mp_config_ioapic_for_sci(int irq)
...@@ -1029,6 +1027,7 @@ 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; int ioapic_pin;
struct acpi_table_madt *madt; struct acpi_table_madt *madt;
struct acpi_table_int_src_ovr *entry = NULL; struct acpi_table_int_src_ovr *entry = NULL;
acpi_interrupt_flags flags;
void *madt_end; void *madt_end;
acpi_status status; acpi_status status;
...@@ -1052,15 +1051,12 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -1052,15 +1051,12 @@ void __init mp_config_ioapic_for_sci(int irq)
* See the note at the end of ACPI 2.0b section * See the note at the end of ACPI 2.0b section
* 5.2.10.8 for what this is about. * 5.2.10.8 for what this is about.
*/ */
if (entry->bus_irq != entry->global_irq) { flags = entry->flags;
acpi_fadt.sci_int = entry->global_irq; acpi_fadt.sci_int = entry->global_irq;
irq = entry->global_irq; irq = entry->global_irq;
break; break;
}
else
return;
} }
entry = (struct acpi_table_int_src_ovr *) entry = (struct acpi_table_int_src_ovr *)
((unsigned long) entry + entry->header.length); ((unsigned long) entry + entry->header.length);
} }
...@@ -1070,7 +1066,13 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -1070,7 +1066,13 @@ void __init mp_config_ioapic_for_sci(int irq)
ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start; 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 #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