@@ -313,9 +313,6 @@ int __init pcibios_init(void)
}
}
- /* Do machine dependent PCI interrupt routing */
- pci_fixup_irqs(pci_common_swizzle, tile_map_irq);
-
/*
* This comes from the generic Linux PCI driver.
*
@@ -367,6 +364,13 @@ int __init pcibios_init(void)
}
subsys_initcall(pcibios_init);
+int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
+{
+ bridge->swizzle_irq = pci_common_swizzle;
+ bridge->map_irq = tile_map_irq;
+ return 0;
+}
+
/*
* No bus fixups needed.
*/
@@ -893,9 +893,6 @@ int __init pcibios_init(void)
next_busno = bus->busn_res.end + 1;
}
- /* Do machine dependent PCI interrupt routing */
- pci_fixup_irqs(pci_common_swizzle, tile_map_irq);
-
/*
* This comes from the generic Linux PCI driver.
*
@@ -1048,6 +1045,13 @@ alloc_mem_map_failed:
}
subsys_initcall(pcibios_init);
+int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
+{
+ bridge->swizzle_irq = pci_common_swizzle;
+ bridge->map_irq = tile_map_irq;
+ return 0;
+}
+
/* No bus fixups needed. */
void pcibios_fixup_bus(struct pci_bus *bus)
{
From: Vality <matt@masarand.com> Currently pcibios_init is running pci_fixup_irqs in order to assign IRQs to PCI devices, this is only done once at boot-time and causes devices hot-plugged after boot time to not be allocated an IRQ. This is fixed in this patch-set by delaying the allocation untill device enable time by registering the function to be called later. --- arch/tile/kernel/pci.c | 10 +++++++--- arch/tile/kernel/pci_gx.c | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-)