+ BCMINIT(sb_setirq)(sbh, 0, SB_CODEC, 0);
+ BCMINIT(sb_setirq)(sbh, 0, SB_EXTIF, 0);
+ BCMINIT(sb_setirq)(sbh, 2, SB_ENET, 1);
-+ BCMINIT(sb_setirq)(sbh, 3, SB_ILINE20, 0);
++ // BCMINIT(sb_setirq)(sbh, 3, SB_ILINE20, 0); /* seems to be unused */
+ BCMINIT(sb_setirq)(sbh, 4, SB_PCI, 0);
+ ASSERT(eir);
+ value = BCMINIT(early_nvram_get)("et0phyaddr");
+ if (value && !strcmp(value, "31")) {
+ /* Enable internal UART */
+ W_REG(&eir->corecontrol, CC_UE);
-+ /* Give USB its own interrupt */
-+ BCMINIT(sb_setirq)(sbh, 1, SB_USB, 0);
+ } else {
+ /* Disable internal UART */
+ W_REG(&eir->corecontrol, 0);
+ /* Give Ethernet its own interrupt */
+ BCMINIT(sb_setirq)(sbh, 1, SB_ENET, 0);
-+ BCMINIT(sb_setirq)(sbh, 0, SB_USB, 0);
+ }
++ /* USB gets its own interrupt */
++ BCMINIT(sb_setirq)(sbh, 3, SB_USB, 0);
++
+ break;
+ case BCM5350_DEVICE_ID:
+ /* Clear interrupt map */
+}
+
+
+
diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbpci.c linux.dev/arch/mips/bcm947xx/broadcom/sbpci.c
--- linux.old/arch/mips/bcm947xx/broadcom/sbpci.c 1970-01-01 01:00:00.000000000 +0100
+++ linux.dev/arch/mips/bcm947xx/broadcom/sbpci.c 2006-10-15 23:29:14.000000000 +0200
diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbutils.c linux.dev/arch/mips/bcm947xx/broadcom/sbutils.c
--- linux.old/arch/mips/bcm947xx/broadcom/sbutils.c 1970-01-01 01:00:00.000000000 +0100
+++ linux.dev/arch/mips/bcm947xx/broadcom/sbutils.c 2006-10-15 23:29:14.000000000 +0200
-@@ -0,0 +1,2370 @@
+@@ -0,0 +1,2371 @@
+/*
+ * Misc utility routines for accessing chip-specific features
+ * of the SiliconBackplane-based Broadcom chips.
+EXPORT_SYMBOL(sb_gpiosetcore);
+EXPORT_SYMBOL(sb_gpiotimerval);
+EXPORT_SYMBOL(sb_watchdog);
++EXPORT_SYMBOL(sb_kattach);
diff -urN linux.old/arch/mips/bcm947xx/broadcom/sflash.c linux.dev/arch/mips/bcm947xx/broadcom/sflash.c
--- linux.old/arch/mips/bcm947xx/broadcom/sflash.c 1970-01-01 01:00:00.000000000 +0100
+++ linux.dev/arch/mips/bcm947xx/broadcom/sflash.c 2006-10-15 23:29:14.000000000 +0200
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>
+
+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;
+}