ChangeSet 1.1499.5.2, 2005/01/26 03:49:55-05:00, [EMAIL PROTECTED]

        [ACPI] via interrupt quirk fix from 2.6
        http://bugzilla.kernel.org/show_bug.cgi?id=3319
        
        Signed-off-by: David Shaohua Li <[EMAIL PROTECTED]>
        Signed-off-by: Len Brown <[EMAIL PROTECTED]



 arch/i386/kernel/pci-irq.c   |    4 ++--
 arch/x86_64/kernel/pci-irq.c |    4 ++--
 drivers/acpi/pci_irq.c       |    4 ++++
 drivers/pci/quirks.c         |   30 +++++-------------------------
 4 files changed, 13 insertions(+), 29 deletions(-)


diff -Nru a/arch/i386/kernel/pci-irq.c b/arch/i386/kernel/pci-irq.c
--- a/arch/i386/kernel/pci-irq.c        2005-01-31 05:25:32 -08:00
+++ b/arch/i386/kernel/pci-irq.c        2005-01-31 05:25:32 -08:00
@@ -1075,7 +1075,7 @@
 void pcibios_enable_irq(struct pci_dev *dev)
 {
        u8 pin;
-       extern int interrupt_line_quirk;
+       extern int via_interrupt_line_quirk;
        struct pci_dev *temp_dev;
        
        pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
@@ -1128,7 +1128,7 @@
        }
        /* VIA bridges use interrupt line for apic/pci steering across
           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);
                
 }
diff -Nru a/arch/x86_64/kernel/pci-irq.c b/arch/x86_64/kernel/pci-irq.c
--- a/arch/x86_64/kernel/pci-irq.c      2005-01-31 05:25:32 -08:00
+++ b/arch/x86_64/kernel/pci-irq.c      2005-01-31 05:25:32 -08:00
@@ -742,7 +742,7 @@
 void pcibios_enable_irq(struct pci_dev *dev)
 {
                u8 pin;
-       extern int interrupt_line_quirk;
+       extern int via_interrupt_line_quirk;
 
                pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
        if (pin && !pcibios_lookup_irq(dev, 1) && !dev->irq) {
@@ -762,6 +762,6 @@
        }
        /* VIA bridges use interrupt line for apic/pci steering across
           the V-Link */
-       else if (interrupt_line_quirk)
+       else if (via_interrupt_line_quirk)
                pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
 }
diff -Nru a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
--- a/drivers/acpi/pci_irq.c    2005-01-31 05:25:32 -08:00
+++ b/drivers/acpi/pci_irq.c    2005-01-31 05:25:32 -08:00
@@ -335,6 +335,7 @@
 {
        int                     irq = 0;
        u8                      pin = 0;
+       extern int via_interrupt_line_quirk;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_enable");
 
@@ -382,6 +383,9 @@
                        return_VALUE(0);
                }
        }
+
+       if (via_interrupt_line_quirk)
+               pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq & 15);
 
        dev->irq = irq;
 
diff -Nru a/drivers/pci/quirks.c b/drivers/pci/quirks.c
--- a/drivers/pci/quirks.c      2005-01-31 05:25:32 -08:00
+++ b/drivers/pci/quirks.c      2005-01-31 05:25:32 -08:00
@@ -368,9 +368,6 @@
  * non-x86 architectures (yes Via exists on PPC among other places),
  * we must mask the PCI_INTERRUPT_LINE value versus 0xf to get
  * interrupts delivered properly.
- *
- * TODO: When we have device-specific interrupt routers,
- * quirk_via_irqpic will go away from quirks.
  */
 
 /*
@@ -393,22 +390,6 @@
                d->irq = irq;
 }
 
-static void __init 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",
-                      dev->slot_name, irq, new_irq);
-
-               udelay(15);
-               pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
-       }
-}
-
-
 /*
  * PIIX3 USB: We have to disable USB interrupts that are
  * hardwired to PIRQD# and may be shared with an
@@ -639,12 +620,14 @@
  *     VIA northbridges care about PCI_INTERRUPT_LINE
  */
  
-int interrupt_line_quirk;
+int via_interrupt_line_quirk;
 
 static void __init quirk_via_bridge(struct pci_dev *pdev)
 {
-       if(pdev->devfn == 0)
-               interrupt_line_quirk = 1;
+       if(pdev->devfn == 0) {
+               printk(KERN_INFO "PCI: Via IRQ fixup\n");
+               via_interrupt_line_quirk = 1;
+       }
 }
        
 /* 
@@ -773,9 +756,6 @@
 #endif
        { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_VIA,      
PCI_DEVICE_ID_VIA_82C586_3,     quirk_via_acpi },
        { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_VIA,      
PCI_DEVICE_ID_VIA_82C686_4,     quirk_via_acpi },
-       { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_VIA,      
PCI_DEVICE_ID_VIA_82C586_2,     quirk_via_irqpic },
-       { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_VIA,      
PCI_DEVICE_ID_VIA_82C686_5,     quirk_via_irqpic },
-       { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_VIA,      
PCI_DEVICE_ID_VIA_82C686_6,     quirk_via_irqpic },
 
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_AMD,      
PCI_DEVICE_ID_AMD_VIPER_7410,   quirk_amd_ioapic },
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_AMD,      
PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering },
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to