fix extpci irq assignment bug
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 16 Oct 2006 14:21:30 +0000 (14:21 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 16 Oct 2006 14:21:30 +0000 (14:21 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@5159 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/brcm-2.6/patches/001-bcm947xx.patch

index 786b9af..864f774 100644 (file)
@@ -11243,7 +11243,7 @@ diff -urN linux.old/arch/mips/bcm947xx/Makefile linux.dev/arch/mips/bcm947xx/Mak
 diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c
 --- linux.old/arch/mips/bcm947xx/pci.c 1970-01-01 01:00:00.000000000 +0100
 +++ linux.dev/arch/mips/bcm947xx/pci.c 2006-10-15 23:29:14.000000000 +0200
-@@ -0,0 +1,215 @@
+@@ -0,0 +1,227 @@
 +#include <linux/kernel.h>
 +#include <linux/init.h>
 +#include <linux/pci.h>
@@ -11356,11 +11356,23 @@ diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c
 +
 +int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
 +{
++      unsigned long flags;
 +      u8 irq;
++      uint idx;
 +      
-+      if (dev->bus->number == 1)
-+              return 2;
-+
++      /* external: use the irq of the pci core */
++      if (dev->bus->number >= 1) {
++              spin_lock_irqsave(&sbh_lock, flags);
++              idx = sb_coreidx(sbh);
++              sb_setcore(sbh, SB_PCI, 0);
++              irq = sb_irq(sbh);
++              sb_setcoreidx(sbh, idx);
++              spin_unlock_irqrestore(&sbh_lock, flags);
++              
++              return irq + 2;
++      }
++      
++      /* internal */
 +      pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
 +      return irq + 2;
 +}