| From 407dae1e4415acde2d9f48bb76361893c4653756 Mon Sep 17 00:00:00 2001 |
| From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| Date: Mon, 9 Oct 2017 09:00:49 +0200 |
| Subject: PCI: aardvark: Move to struct pci_host_bridge IRQ mapping functions |
| |
| From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| |
| commit 407dae1e4415acde2d9f48bb76361893c4653756 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/pci/host/pci-aardvark.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/pci/host/pci-aardvark.c |
| +++ b/drivers/pci/host/pci-aardvark.c |
| @@ -936,6 +936,8 @@ static int advk_pcie_probe(struct platfo |
| 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) { |