#define RALINK_PCI_CONFIG_ADDR                         0x20
 #define RALINK_PCI_CONFIG_DATA_VIRTUAL_REG     0x24
-#define SURFBOARDINT_PCIE0       11      /* PCIE0 */
-#define RALINK_INT_PCIE0         SURFBOARDINT_PCIE0
-#define RALINK_INT_PCIE1         SURFBOARDINT_PCIE1
-#define RALINK_INT_PCIE2         SURFBOARDINT_PCIE2
-#define SURFBOARDINT_PCIE1       31     /* PCIE1 */
-#define SURFBOARDINT_PCIE2       32     /* PCIE2 */
 #define RALINK_PCI_MEMBASE              *(volatile u32 *)(RALINK_PCI_BASE + 0x0028)
 #define RALINK_PCI_IOBASE               *(volatile u32 *)(RALINK_PCI_BASE + 0x002C)
 #define RALINK_PCIE0_RST                (1<<24)
 {
        u16 cmd;
        u32 val;
-       int irq = 0;
-
-       if ((dev->bus->number == 0) && (slot == 0)) {
-               write_config(0, 0, 0, PCI_BASE_ADDRESS_0, MEMORY_BASE);
-               read_config(0, 0, 0, PCI_BASE_ADDRESS_0, (unsigned long *)&val);
-               printk("BAR0 at slot 0 = %x\n", val);
-               printk("bus=0x%x, slot = 0x%x\n",dev->bus->number, slot);
-       } else if((dev->bus->number == 0) && (slot == 0x1)) {
-               write_config(0, 1, 0, PCI_BASE_ADDRESS_0, MEMORY_BASE);
-               read_config(0, 1, 0, PCI_BASE_ADDRESS_0, (unsigned long *)&val);
-               printk("BAR0 at slot 1 = %x\n", val);
-               printk("bus=0x%x, slot = 0x%x\n",dev->bus->number, slot);
-       } else if((dev->bus->number == 0) && (slot == 0x2)) {
-               write_config(0, 2, 0, PCI_BASE_ADDRESS_0, MEMORY_BASE);
-               read_config(0, 2, 0, PCI_BASE_ADDRESS_0, (unsigned long *)&val);
-               printk("BAR0 at slot 2 = %x\n", val);
-               printk("bus=0x%x, slot = 0x%x\n",dev->bus->number, slot);
-       } else if ((dev->bus->number == 1) && (slot == 0x0)) {
-               switch (pcie_link_status) {
-               case 2:
-               case 6:
-                       irq = RALINK_INT_PCIE1;
-                       break;
-               case 4:
-                       irq = RALINK_INT_PCIE2;
-                       break;
-               default:
-                       irq = RALINK_INT_PCIE0;
-               }
-               printk("bus=0x%x, slot = 0x%x, irq=0x%x\n",dev->bus->number, slot, dev->irq);
-       } else if ((dev->bus->number == 2) && (slot == 0x0)) {
-               switch (pcie_link_status) {
-               case 5:
-               case 6:
-                       irq = RALINK_INT_PCIE2;
-                       break;
-               default:
-                       irq = RALINK_INT_PCIE1;
-               }
-               printk("bus=0x%x, slot = 0x%x, irq=0x%x\n",dev->bus->number, slot, dev->irq);
-       } else if ((dev->bus->number == 2) && (slot == 0x1)) {
-               switch (pcie_link_status) {
-               case 5:
-               case 6:
-                       irq = RALINK_INT_PCIE2;
-                       break;
-               default:
-                       irq = RALINK_INT_PCIE1;
-               }
-               printk("bus=0x%x, slot = 0x%x, irq=0x%x\n",dev->bus->number, slot, dev->irq);
-       } else if ((dev->bus->number ==3) && (slot == 0x0)) {
-               irq = RALINK_INT_PCIE2;
-               printk("bus=0x%x, slot = 0x%x, irq=0x%x\n",dev->bus->number, slot, dev->irq);
-       } else if ((dev->bus->number ==3) && (slot == 0x1)) {
-               irq = RALINK_INT_PCIE2;
-               printk("bus=0x%x, slot = 0x%x, irq=0x%x\n",dev->bus->number, slot, dev->irq);
-       } else if ((dev->bus->number ==3) && (slot == 0x2)) {
-               irq = RALINK_INT_PCIE2;
-               printk("bus=0x%x, slot = 0x%x, irq=0x%x\n",dev->bus->number, slot, dev->irq);
-       } else {
-               printk("bus=0x%x, slot = 0x%x\n",dev->bus->number, slot);
-               return 0;
+       int irq;
+
+       if (dev->bus->number == 0) {
+               write_config(0, slot, 0, PCI_BASE_ADDRESS_0, MEMORY_BASE);
+               read_config(0, slot, 0, PCI_BASE_ADDRESS_0, (unsigned long *)&val);
+               printk("BAR0 at slot %d = %x\n", slot, val);
        }
 
        pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 0x14);  //configure cache line size 0x14
        pci_read_config_word(dev, PCI_COMMAND, &cmd);
        cmd = cmd | PCI_COMMAND_MASTER | PCI_COMMAND_IO | PCI_COMMAND_MEMORY;
        pci_write_config_word(dev, PCI_COMMAND, cmd);
+
+       irq = of_irq_parse_and_map_pci(dev, slot, pin);
+
        pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq);
-#ifdef CONFIG_DTB_GNUBEE1
-       /*
-        * 'irq' here is a hwirq, but a virq is needed.  Until we know how and where
-        * to convert one to the other, we have this hack for the GNUBEE1
-        * Similarly 31->23 and 32->24.
-        */
-       if (irq == 11)
-               return 22;
-       if (irq == 31)
-               return 23;
-       if (irq == 32)
-               return 24;
-#endif
        return irq;
 }