|
|
@@ -74,9 +74,6 @@ extern void chk_phy_pll(void);
|
|
|
|
|
|
#define RALINK_PCI_CONFIG_ADDR 0x20
|
|
|
#define RALINK_PCI_CONFIG_DATA_VIRTUAL_REG 0x24
|
|
|
-#define RALINK_INT_PCIE0 pcie_irq[0]
|
|
|
-#define RALINK_INT_PCIE1 pcie_irq[1]
|
|
|
-#define RALINK_INT_PCIE2 pcie_irq[2]
|
|
|
#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)
|
|
|
@@ -367,68 +364,12 @@ pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
|
|
{
|
|
|
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
|
|
|
@@ -436,6 +377,9 @@ pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
|
|
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);
|
|
|
return irq;
|
|
|
}
|