@@ -56,12 +56,16 @@ int pciehp_configure_device(struct controller *ctrl)
goto out;
}
- for_each_pci_bridge(dev, parent)
- pci_hp_add_bridge(dev);
+ if (pci_movable_bars_enabled()) {
+ pci_rescan_bus(parent);
+ } else {
+ for_each_pci_bridge(dev, parent)
+ pci_hp_add_bridge(dev);
- pci_assign_unassigned_bridge_resources(bridge);
- pcie_bus_configure_settings(parent);
- pci_bus_add_devices(parent);
+ pci_assign_unassigned_bridge_resources(bridge);
+ pcie_bus_configure_settings(parent);
+ pci_bus_add_devices(parent);
+ }
out:
pci_unlock_rescan_remove();
With movable BARs, adding a hotplugged device may affect all the PCIe domain starting from the root, so use a pci_rescan_bus() function which handles the rearrangement of existing BARs and bridge windows. Signed-off-by: Sergey Miroshnichenko <s.miroshnichenko@yadro.com> --- drivers/pci/hotplug/pciehp_pci.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)