aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/controller/dwc/pcie-designware-host.c
diff options
context:
space:
mode:
authorJisheng Zhang <Jisheng.Zhang@synaptics.com>2019-03-29 07:59:26 -0400
committerBjorn Helgaas <bhelgaas@google.com>2019-05-07 09:59:49 -0400
commitfe23274f72f4e3be93134aac0ae1e1fd522f438a (patch)
tree1f0d1b32f08c82610e5c2cba2f46365fc5f5476b /drivers/pci/controller/dwc/pcie-designware-host.c
parente6fdd3bf5aecd8615f31a5128775b9abcf3e0d86 (diff)
PCI: dwc: Save root bus for driver remove hooks
Currently DWC host does not support the remove callback, but nothing prevents us from supporting it. Save the root bus for clean up work in driver remove code paths to allow DWC host drivers to implement their remove hook as, eg: static int foo_pcie_remove(struct platform_device *pdev) { ... pci_stop_root_bus(pp->root_bus); pci_remove_root_bus(pp->root_bus); dw_pcie_free_msi(pp); ... } Signed-off-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Diffstat (limited to 'drivers/pci/controller/dwc/pcie-designware-host.c')
-rw-r--r--drivers/pci/controller/dwc/pcie-designware-host.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
index dcc7405aff9a..3e4169e738a5 100644
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
@@ -341,7 +341,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
341 struct device_node *np = dev->of_node; 341 struct device_node *np = dev->of_node;
342 struct platform_device *pdev = to_platform_device(dev); 342 struct platform_device *pdev = to_platform_device(dev);
343 struct resource_entry *win, *tmp; 343 struct resource_entry *win, *tmp;
344 struct pci_bus *bus, *child; 344 struct pci_bus *child;
345 struct pci_host_bridge *bridge; 345 struct pci_host_bridge *bridge;
346 struct resource *cfg_res; 346 struct resource *cfg_res;
347 int ret; 347 int ret;
@@ -496,18 +496,18 @@ int dw_pcie_host_init(struct pcie_port *pp)
496 if (ret) 496 if (ret)
497 goto err_free_msi; 497 goto err_free_msi;
498 498
499 bus = bridge->bus; 499 pp->root_bus = bridge->bus;
500 500
501 if (pp->ops->scan_bus) 501 if (pp->ops->scan_bus)
502 pp->ops->scan_bus(pp); 502 pp->ops->scan_bus(pp);
503 503
504 pci_bus_size_bridges(bus); 504 pci_bus_size_bridges(pp->root_bus);
505 pci_bus_assign_resources(bus); 505 pci_bus_assign_resources(pp->root_bus);
506 506
507 list_for_each_entry(child, &bus->children, node) 507 list_for_each_entry(child, &pp->root_bus->children, node)
508 pcie_bus_configure_settings(child); 508 pcie_bus_configure_settings(child);
509 509
510 pci_bus_add_devices(bus); 510 pci_bus_add_devices(pp->root_bus);
511 return 0; 511 return 0;
512 512
513err_free_msi: 513err_free_msi: