Commit dac0b80e authored by Len Brown's avatar Len Brown

[ACPI] apply via_interrupt_line_quirk in ACPI mode

the same way it is applied in legacy mode.
Delete redundant quirks.

http://bugzilla.kernel.org/show_bug.cgi?id=3319Signed-off-by: default avatarDavid Shaohua Li <shaohua.li@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent ba20db08
...@@ -1022,7 +1022,7 @@ void pcibios_penalize_isa_irq(int irq) ...@@ -1022,7 +1022,7 @@ void pcibios_penalize_isa_irq(int irq)
int pirq_enable_irq(struct pci_dev *dev) int pirq_enable_irq(struct pci_dev *dev)
{ {
u8 pin; u8 pin;
extern int interrupt_line_quirk; extern int via_interrupt_line_quirk;
struct pci_dev *temp_dev; struct pci_dev *temp_dev;
pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
...@@ -1080,7 +1080,7 @@ int pirq_enable_irq(struct pci_dev *dev) ...@@ -1080,7 +1080,7 @@ int pirq_enable_irq(struct pci_dev *dev)
} }
/* VIA bridges use interrupt line for apic/pci steering across /* VIA bridges use interrupt line for apic/pci steering across
the V-Link */ the V-Link */
else if (interrupt_line_quirk) else if (via_interrupt_line_quirk)
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq & 15); pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq & 15);
return 0; return 0;
} }
......
...@@ -391,6 +391,7 @@ acpi_pci_irq_enable ( ...@@ -391,6 +391,7 @@ acpi_pci_irq_enable (
u8 pin = 0; u8 pin = 0;
int edge_level = ACPI_LEVEL_SENSITIVE; int edge_level = ACPI_LEVEL_SENSITIVE;
int active_high_low = ACPI_ACTIVE_LOW; int active_high_low = ACPI_ACTIVE_LOW;
extern int via_interrupt_line_quirk;
ACPI_FUNCTION_TRACE("acpi_pci_irq_enable"); ACPI_FUNCTION_TRACE("acpi_pci_irq_enable");
...@@ -440,6 +441,9 @@ acpi_pci_irq_enable ( ...@@ -440,6 +441,9 @@ acpi_pci_irq_enable (
} }
} }
if (via_interrupt_line_quirk)
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq & 15);
dev->irq = acpi_register_gsi(irq, edge_level, active_high_low); dev->irq = acpi_register_gsi(irq, edge_level, active_high_low);
printk(KERN_INFO PREFIX "PCI interrupt %s[%c] -> GSI %u " printk(KERN_INFO PREFIX "PCI interrupt %s[%c] -> GSI %u "
......
...@@ -479,27 +479,6 @@ static void __devinit quirk_via_acpi(struct pci_dev *d) ...@@ -479,27 +479,6 @@ static void __devinit quirk_via_acpi(struct pci_dev *d)
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_acpi ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_acpi );
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_acpi ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_acpi );
static void quirk_via_irqpic(struct pci_dev *dev)
{
u8 irq, new_irq = dev->irq & 0xf;
pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
if (new_irq != irq) {
printk(KERN_INFO "PCI: Via IRQ fixup for %s, from %d to %d\n",
pci_name(dev), irq, new_irq);
udelay(15);
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
}
}
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irqpic );
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irqpic );
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_6, quirk_via_irqpic );
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8233_5, quirk_via_irqpic );
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8233_7, quirk_via_irqpic );
/* /*
* PIIX3 USB: We have to disable USB interrupts that are * PIIX3 USB: We have to disable USB interrupts that are
* hardwired to PIRQD# and may be shared with an * hardwired to PIRQD# and may be shared with an
...@@ -692,12 +671,14 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_ ...@@ -692,12 +671,14 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_
/* /*
* VIA northbridges care about PCI_INTERRUPT_LINE * VIA northbridges care about PCI_INTERRUPT_LINE
*/ */
int interrupt_line_quirk; int via_interrupt_line_quirk;
static void __devinit quirk_via_bridge(struct pci_dev *pdev) static void __devinit quirk_via_bridge(struct pci_dev *pdev)
{ {
if(pdev->devfn == 0) if(pdev->devfn == 0) {
interrupt_line_quirk = 1; printk(KERN_INFO "PCI: Via IRQ fixup\n");
via_interrupt_line_quirk = 1;
}
} }
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_bridge ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_bridge );
......
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