Skip to content

Commit 295aeb9

Browse files
Lorenzo Pieralisibjorn-helgaas
authored andcommitted
PCI: designware: Convert PCI scan API to pci_scan_root_bus_bridge()
The introduction of pci_scan_root_bus_bridge() provides a PCI core API to scan a PCI root bus backed by an already initialized struct pci_host_bridge object, which simplifies the bus scan interface and makes the PCI scan root bus interface easier to generalize as members are added to the struct pci_host_bridge. Convert PCI designware host code to pci_scan_root_bus_bridge() to improve the PCI root bus scanning interface. Signed-off-by: Lorenzo Pieralisi <[email protected]> Signed-off-by: Bjorn Helgaas <[email protected]> Cc: Jingoo Han <[email protected]> Cc: Joao Pinto <[email protected]>
1 parent 97ad2bd commit 295aeb9

File tree

1 file changed

+22
-14
lines changed

1 file changed

+22
-14
lines changed

drivers/pci/dwc/pcie-designware-host.c

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,9 @@ int dw_pcie_host_init(struct pcie_port *pp)
280280
struct device_node *np = dev->of_node;
281281
struct platform_device *pdev = to_platform_device(dev);
282282
struct pci_bus *bus, *child;
283+
struct pci_host_bridge *bridge;
283284
struct resource *cfg_res;
284285
int i, ret;
285-
LIST_HEAD(res);
286286
struct resource_entry *win, *tmp;
287287

288288
cfg_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "config");
@@ -295,16 +295,21 @@ int dw_pcie_host_init(struct pcie_port *pp)
295295
dev_err(dev, "missing *config* reg space\n");
296296
}
297297

298-
ret = of_pci_get_host_bridge_resources(np, 0, 0xff, &res, &pp->io_base);
298+
bridge = pci_alloc_host_bridge(0);
299+
if (!bridge)
300+
return -ENOMEM;
301+
302+
ret = of_pci_get_host_bridge_resources(np, 0, 0xff,
303+
&bridge->windows, &pp->io_base);
299304
if (ret)
300305
return ret;
301306

302-
ret = devm_request_pci_bus_resources(dev, &res);
307+
ret = devm_request_pci_bus_resources(dev, &bridge->windows);
303308
if (ret)
304309
goto error;
305310

306311
/* Get the I/O and memory ranges from DT */
307-
resource_list_for_each_entry_safe(win, tmp, &res) {
312+
resource_list_for_each_entry_safe(win, tmp, &bridge->windows) {
308313
switch (resource_type(win->res)) {
309314
case IORESOURCE_IO:
310315
ret = pci_remap_iospace(win->res, pp->io_base);
@@ -400,19 +405,22 @@ int dw_pcie_host_init(struct pcie_port *pp)
400405
pp->ops->host_init(pp);
401406

402407
pp->root_bus_nr = pp->busn->start;
408+
409+
bridge->dev.parent = dev;
410+
bridge->sysdata = pp;
411+
bridge->busnr = pp->root_bus_nr;
412+
bridge->ops = &dw_pcie_ops;
403413
if (IS_ENABLED(CONFIG_PCI_MSI)) {
404-
bus = pci_scan_root_bus_msi(dev, pp->root_bus_nr,
405-
&dw_pcie_ops, pp, &res,
406-
&dw_pcie_msi_chip);
414+
bridge->msi = &dw_pcie_msi_chip;
407415
dw_pcie_msi_chip.dev = dev;
408-
} else
409-
bus = pci_scan_root_bus(dev, pp->root_bus_nr, &dw_pcie_ops,
410-
pp, &res);
411-
if (!bus) {
412-
ret = -ENOMEM;
413-
goto error;
414416
}
415417

418+
ret = pci_scan_root_bus_bridge(bridge);
419+
if (ret)
420+
goto error;
421+
422+
bus = bridge->bus;
423+
416424
if (pp->ops->scan_bus)
417425
pp->ops->scan_bus(pp);
418426

@@ -431,7 +439,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
431439
return 0;
432440

433441
error:
434-
pci_free_resource_list(&res);
442+
pci_free_host_bridge(bridge);
435443
return ret;
436444
}
437445

0 commit comments

Comments
 (0)