diff options
author | Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | 2017-10-09 09:00:49 +0200 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2017-10-10 21:17:43 -0500 |
commit | 407dae1e4415acde2d9f48bb76361893c4653756 (patch) | |
tree | 97bba4748b1597b2f1887e1eb16c5806f940185c /drivers/pci | |
parent | 8c2b4e3c3725801b57d7b858d216d38f83bdb35d (diff) | |
download | op-kernel-dev-407dae1e4415acde2d9f48bb76361893c4653756.zip op-kernel-dev-407dae1e4415acde2d9f48bb76361893c4653756.tar.gz |
PCI: aardvark: Move to struct pci_host_bridge IRQ mapping functions
struct pci_host_bridge gained hooks to map/swizzle IRQs, so that the IRQ
mapping can be done automatically by PCI core code through the
pci_assign_irq() function instead of resorting to arch-specific
implementation callbacks to carry out the same task which force PCI host
bridge drivers implementation to implement per-arch kludges to carry out a
task that is inherently architecture agnostic.
Commit 769b461fc0c0 ("arm64: PCI: Drop DT IRQ allocation from
pcibios_alloc_irq()") was assuming all PCI host controller drivers had been
converted to use ->map_irq(), but that wasn't the case: pci-aardvark had
not been converted. Due to this, it broke the support for legacy PCI
interrupts when using the pci-aardvark driver (used on Marvell Armada 3720
platforms).
In order to fix this, we make sure the ->map_irq and ->swizzle_irq fields
of pci_host_bridge are properly filled in.
Fixes: 769b461fc0c0 ("arm64: PCI: Drop DT IRQ allocation from pcibios_alloc_irq()")
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: stable@vger.kernel.org # v4.13+
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/host/pci-aardvark.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c index 89f4e3d..26ed0c0 100644 --- a/drivers/pci/host/pci-aardvark.c +++ b/drivers/pci/host/pci-aardvark.c @@ -935,6 +935,8 @@ static int advk_pcie_probe(struct platform_device *pdev) bridge->sysdata = pcie; bridge->busnr = 0; bridge->ops = &advk_pcie_ops; + bridge->map_irq = of_irq_parse_and_map_pci; + bridge->swizzle_irq = pci_common_swizzle; ret = pci_scan_root_bus_bridge(bridge); if (ret < 0) { |