From: Tim Harvey Subject: [PATCH] PCI: imx6: add support for legacy irqs The i.MX6 supports legacy IRQ's via 155,154,153,152. When devices are behind a PCIe-to-PCIe switch (at least for the TI XIO2001) the mapping is reversed from when they are behind a PCIe switch. This patch still needs some review and clarification before going upstream. --- drivers/pci/host/pcie-designware.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) --- a/drivers/pci/host/pcie-designware.c +++ b/drivers/pci/host/pcie-designware.c @@ -482,7 +482,26 @@ int dw_pcie_map_irq(const struct pci_dev { struct pcie_port *pp = sys_to_pcie(dev->bus->sysdata); - return pp->irq; + /* TI XIO2001 PCIe-to-PCI bridge IRQs are flipped it seems */ + if ( dev->bus && dev->bus->self + && (dev->bus->self->vendor == 0x104c) + && (dev->bus->self->device == 0x8240)) { + switch (pin) { + case 1: return pp->irq - 3; + case 2: return pp->irq - 2; + case 3: return pp->irq - 1; + case 4: return pp->irq; + default: return -1; + } + } else { + switch (pin) { + case 1: return pp->irq; + case 2: return pp->irq - 1; + case 3: return pp->irq - 2; + case 4: return pp->irq - 3; + default: return -1; + } + } } static struct hw_pci dw_pci = {