aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pci/host/pci-xgene.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c
index 8cae013e7188..262bedf026c1 100644
--- a/drivers/pci/host/pci-xgene.c
+++ b/drivers/pci/host/pci-xgene.c
@@ -636,13 +636,16 @@ static int xgene_pcie_probe_bridge(struct platform_device *pdev)
636 struct xgene_pcie_port *port; 636 struct xgene_pcie_port *port;
637 resource_size_t iobase = 0; 637 resource_size_t iobase = 0;
638 struct pci_bus *bus, *child; 638 struct pci_bus *bus, *child;
639 struct pci_host_bridge *bridge;
639 int ret; 640 int ret;
640 LIST_HEAD(res); 641 LIST_HEAD(res);
641 642
642 port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); 643 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*port));
643 if (!port) 644 if (!bridge)
644 return -ENOMEM; 645 return -ENOMEM;
645 646
647 port = pci_host_bridge_priv(bridge);
648
646 port->node = of_node_get(dn); 649 port->node = of_node_get(dn);
647 port->dev = dev; 650 port->dev = dev;
648 651
@@ -670,11 +673,17 @@ static int xgene_pcie_probe_bridge(struct platform_device *pdev)
670 if (ret) 673 if (ret)
671 goto error; 674 goto error;
672 675
673 bus = pci_create_root_bus(dev, 0, &xgene_pcie_ops, port, &res); 676 list_splice_init(&res, &bridge->windows);
674 if (!bus) { 677 bridge->dev.parent = dev;
675 ret = -ENOMEM; 678 bridge->sysdata = port;
679 bridge->busnr = 0;
680 bridge->ops = &xgene_pcie_ops;
681
682 ret = pci_scan_root_bus_bridge(bridge);
683 if (ret < 0)
676 goto error; 684 goto error;
677 } 685
686 bus = bridge->bus;
678 687
679 pci_scan_child_bus(bus); 688 pci_scan_child_bus(bus);
680 pci_assign_unassigned_bus_resources(bus); 689 pci_assign_unassigned_bus_resources(bus);