aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Gospodarek <gospo@broadcom.com>2016-12-01 15:34:52 -0500
committerBjorn Helgaas <bhelgaas@google.com>2016-12-08 13:24:20 -0500
commitffbd796821472c6571b09962cdbd13cd2815e2c1 (patch)
tree3a42377599cb49deab299bf44129fac78bca4c41
parentfeacdb4a35920235a0daf42d6f5701a74c4708b5 (diff)
PCI: iproc: Skip check for legacy IRQ on PAXC buses
PAXC and PAXCv2 buses do not support legacy IRQs so there is no reason to even try and map them. Without a change like this, one cannot create VFs on Nitro ports since legacy interrupts are checked as part of the PCI device creation process. Testing on PAXC hardware showed that VFs are properly created with only the change to not set pcie->map_irq, but just to be safe the change in iproc_pcie_setup() will ensure that pdev_fixup_irq() will not panic. Signed-off-by: Andy Gospodarek <gospo@broadcom.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Ray Jui <ray.jui@broadcom.com>
-rw-r--r--drivers/pci/host/pcie-iproc-platform.c9
-rw-r--r--drivers/pci/host/pcie-iproc.c5
2 files changed, 12 insertions, 2 deletions
diff --git a/drivers/pci/host/pcie-iproc-platform.c b/drivers/pci/host/pcie-iproc-platform.c
index fd3ed9bccaff..22d814a78a78 100644
--- a/drivers/pci/host/pcie-iproc-platform.c
+++ b/drivers/pci/host/pcie-iproc-platform.c
@@ -108,7 +108,14 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
108 return ret; 108 return ret;
109 } 109 }
110 110
111 pcie->map_irq = of_irq_parse_and_map_pci; 111 /* PAXC doesn't support legacy IRQs, skip mapping */
112 switch (pcie->type) {
113 case IPROC_PCIE_PAXC:
114 case IPROC_PCIE_PAXC_V2:
115 break;
116 default:
117 pcie->map_irq = of_irq_parse_and_map_pci;
118 }
112 119
113 ret = iproc_pcie_setup(pcie, &res); 120 ret = iproc_pcie_setup(pcie, &res);
114 if (ret) 121 if (ret)
diff --git a/drivers/pci/host/pcie-iproc.c b/drivers/pci/host/pcie-iproc.c
index cd513342b913..3ebc025499b9 100644
--- a/drivers/pci/host/pcie-iproc.c
+++ b/drivers/pci/host/pcie-iproc.c
@@ -1274,7 +1274,10 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
1274 1274
1275 pci_scan_child_bus(bus); 1275 pci_scan_child_bus(bus);
1276 pci_assign_unassigned_bus_resources(bus); 1276 pci_assign_unassigned_bus_resources(bus);
1277 pci_fixup_irqs(pci_common_swizzle, pcie->map_irq); 1277
1278 if (pcie->map_irq)
1279 pci_fixup_irqs(pci_common_swizzle, pcie->map_irq);
1280
1278 pci_bus_add_devices(bus); 1281 pci_bus_add_devices(bus);
1279 1282
1280 return 0; 1283 return 0;