History

PCI: Move DT resource setup into devm_pci_alloc_host_bridge()

Now that pci_parse_request_of_pci_ranges() callers just setup pci_host_bridge.windows and dma_ranges directly and don't need the bus range returned, we can just initialize them when allocating the pci_host_bridge struct. With this, pci_parse_request_of_pci_ranges() becomes a static function.

Rob Herring committed 6 years ago

Commit 669cbc71 parent 4a9575624 files · +36 −155Browse files

Unified · Split

24 files
  1. drivers/pci/controller/cadence/pcie-cadence-host.c +0 −6
  2. drivers/pci/controller/dwc/pcie-designware-host.c +0 −5
  3. drivers/pci/controller/mobiveil/pcie-mobiveil-host.c +0 −8
  4. drivers/pci/controller/pci-aardvark.c +0 −7
  5. drivers/pci/controller/pci-ftpci100.c +0 −5
  6. drivers/pci/controller/pci-host-common.c +6 −7
  7. drivers/pci/controller/pci-loongson.c +0 −7
  8. drivers/pci/controller/pci-rcar-gen2.c +0 −6
  9. drivers/pci/controller/pci-tegra.c +0 −6
  10. drivers/pci/controller/pci-v3-semi.c +0 −5
  11. drivers/pci/controller/pci-versatile.c +1 −6
  12. drivers/pci/controller/pci-xgene.c +0 −5
  13. drivers/pci/controller/pcie-altera.c +0 −7
  14. drivers/pci/controller/pcie-brcmstb.c +0 −5
  15. drivers/pci/controller/pcie-iproc-platform.c +0 −7
  16. drivers/pci/controller/pcie-mediatek.c +0 −7
  17. drivers/pci/controller/pcie-rcar-host.c +0 −5
  18. drivers/pci/controller/pcie-rockchip-host.c +0 −5
  19. drivers/pci/controller/pcie-xilinx-nwl.c +0 −7
  20. drivers/pci/controller/pcie-xilinx.c +0 −7
  21. drivers/pci/of.c +17 −20
  22. drivers/pci/pci.h +8 −0
  23. drivers/pci/probe.c +4 −0
  24. include/linux/pci.h +0 −12
drivers/pci/controller/cadence/pcie-cadence-host.c+0−6
@@ -171,14 +171,8 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc) · 170 unmodified lines
171171 static int cdns_pcie_host_init(struct device *dev,
172172 struct cdns_pcie_rc *rc)
173173 {
174− struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc);
175174 int err;
176175
177− /* Parse our PCI ranges and request their resources */
178− err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL, NULL);
179− if (err)
180− return err;
181−
182176 err = cdns_pcie_host_init_root_port(rc);
183177 if (err)
184178 return err;
drivers/pci/controller/dwc/pcie-designware-host.c+0−5
@@ -346,11 +346,6 @@ int dw_pcie_host_init(struct pcie_port *pp) · 345 unmodified lines
346346 if (!bridge)
347347 return -ENOMEM;
348348
349− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
350− &bridge->dma_ranges, NULL);
351− if (ret)
352− return ret;
353−
354349 /* Get the I/O and memory ranges from DT */
355350 resource_list_for_each_entry(win, &bridge->windows) {
356351 switch (resource_type(win->res)) {
drivers/pci/controller/mobiveil/pcie-mobiveil-host.c+0−8
@@ -577,14 +577,6 @@ int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie) · 576 unmodified lines
577577 if (!mobiveil_pcie_is_bridge(pcie))
578578 return -ENODEV;
579579
580− /* parse the host bridge base addresses from the device tree file */
581− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
582− &bridge->dma_ranges, NULL);
583− if (ret) {
584− dev_err(dev, "Getting bridge resources failed\n");
585− return ret;
586− }
587−
588580 /*
589581 * configure all inbound and outbound windows and prepare the RC for
590582 * config access
drivers/pci/controller/pci-aardvark.c+0−7
@@ -1130,13 +1130,6 @@ static int advk_pcie_probe(struct platform_device *pdev) · 1129 unmodified lines
11301130 return ret;
11311131 }
11321132
1133− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
1134− &bridge->dma_ranges, NULL);
1135− if (ret) {
1136− dev_err(dev, "Failed to parse resources\n");
1137− return ret;
1138− }
1139−
11401133 pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node,
11411134 "reset-gpios", 0,
11421135 GPIOD_OUT_LOW,
drivers/pci/controller/pci-ftpci100.c+0−5
@@ -465,11 +465,6 @@ static int faraday_pci_probe(struct platform_device *pdev) · 464 unmodified lines
465465 if (IS_ERR(p->base))
466466 return PTR_ERR(p->base);
467467
468− ret = pci_parse_request_of_pci_ranges(dev, &host->windows,
469− &host->dma_ranges, NULL);
470− if (ret)
471− return ret;
472−
473468 win = resource_list_first_type(&host->windows, IORESOURCE_IO);
474469 if (win) {
475470 io = win->res;
drivers/pci/controller/pci-host-common.c+6−7
@@ -25,21 +25,20 @@ static struct pci_config_window *gen_pci_init(struct device *dev, · 24 unmodified lines
2525 {
2626 int err;
2727 struct resource cfgres;
28− struct resource *bus_range = NULL;
28+ struct resource_entry *bus;
2929 struct pci_config_window *cfg;
3030
31− /* Parse our PCI ranges and request their resources */
32− err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL, &bus_range);
33− if (err)
34− return ERR_PTR(err);
35−
3631 err = of_address_to_resource(dev->of_node, 0, &cfgres);
3732 if (err) {
3833 dev_err(dev, "missing \"reg\" property\n");
3934 return ERR_PTR(err);
4035 }
4136
42− cfg = pci_ecam_create(dev, &cfgres, bus_range, ops);
37+ bus = resource_list_first_type(&bridge->windows, IORESOURCE_BUS);
38+ if (!bus)
39+ return ERR_PTR(-ENODEV);
40+
41+ cfg = pci_ecam_create(dev, &cfgres, bus->res, ops);
4342 if (IS_ERR(cfg))
4443 return cfg;
4544
drivers/pci/controller/pci-loongson.c+0−7
@@ -218,13 +218,6 @@ static int loongson_pci_probe(struct platform_device *pdev) · 217 unmodified lines
218218 }
219219 }
220220
221− err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
222− &bridge->dma_ranges, NULL);
223− if (err) {
224− dev_err(dev, "failed to get bridge resources\n");
225− return err;
226− }
227−
228221 bridge->sysdata = priv;
229222 bridge->ops = &loongson_pci_ops;
230223 bridge->map_irq = loongson_map_irq;
drivers/pci/controller/pci-rcar-gen2.c+0−6
@@ -282,7 +282,6 @@ static int rcar_pci_probe(struct platform_device *pdev) · 281 unmodified lines
282282 struct rcar_pci_priv *priv;
283283 struct pci_host_bridge *bridge;
284284 void __iomem *reg;
285− int ret;
286285
287286 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*priv));
288287 if (!bridge)
@@ -315,11 +314,6 @@ static int rcar_pci_probe(struct platform_device *pdev) · 26 unmodified lines
315314 return priv->irq;
316315 }
317316
318− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
319− &bridge->dma_ranges, NULL);
320− if (ret)
321− return ret;
322−
323317 bridge->ops = &rcar_pci_ops;
324318
325319 pci_add_flags(PCI_REASSIGN_ALL_BUS);
drivers/pci/controller/pci-tegra.c+0−6
@@ -2682,12 +2682,6 @@ static int tegra_pcie_probe(struct platform_device *pdev) · 2681 unmodified lines
26822682 INIT_LIST_HEAD(&pcie->ports);
26832683 pcie->dev = dev;
26842684
2685− err = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL, NULL);
2686− if (err) {
2687− dev_err(dev, "Getting bridge resources failed\n");
2688− return err;
2689− }
2690−
26912685 err = tegra_pcie_parse_dt(pcie);
26922686 if (err < 0)
26932687 return err;
drivers/pci/controller/pci-v3-semi.c+0−5
@@ -764,11 +764,6 @@ static int v3_pci_probe(struct platform_device *pdev) · 763 unmodified lines
764764 if (IS_ERR(v3->config_base))
765765 return PTR_ERR(v3->config_base);
766766
767− ret = pci_parse_request_of_pci_ranges(dev, &host->windows,
768− &host->dma_ranges, NULL);
769− if (ret)
770− return ret;
771−
772767 /* Get and request error IRQ resource */
773768 irq = platform_get_irq(pdev, 0);
774769 if (irq < 0) {
drivers/pci/controller/pci-versatile.c+1−6
@@ -67,7 +67,7 @@ static int versatile_pci_probe(struct platform_device *pdev) · 66 unmodified lines
6767 struct device *dev = &pdev->dev;
6868 struct resource *res;
6969 struct resource_entry *entry;
70− int ret, i, myslot = -1, mem = 1;
70+ int i, myslot = -1, mem = 1;
7171 u32 val;
7272 void __iomem *local_pci_cfg_base;
7373 struct pci_host_bridge *bridge;
@@ -89,11 +89,6 @@ static int versatile_pci_probe(struct platform_device *pdev) · 15 unmodified lines
8989 if (IS_ERR(versatile_cfg_base[1]))
9090 return PTR_ERR(versatile_cfg_base[1]);
9191
92− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
93− NULL, NULL);
94− if (ret)
95− return ret;
96−
9792 resource_list_for_each_entry(entry, &bridge->windows) {
9893 if (resource_type(entry->res) == IORESOURCE_MEM) {
9994 writel(entry->res->start >> 28, PCI_IMAP(mem));
drivers/pci/controller/pci-xgene.c+0−5
@@ -614,11 +614,6 @@ static int xgene_pcie_probe(struct platform_device *pdev) · 613 unmodified lines
614614 if (ret)
615615 return ret;
616616
617− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
618− &bridge->dma_ranges, NULL);
619− if (ret)
620− return ret;
621−
622617 ret = xgene_pcie_setup(port);
623618 if (ret)
624619 return ret;
drivers/pci/controller/pcie-altera.c+0−7
@@ -794,13 +794,6 @@ static int altera_pcie_probe(struct platform_device *pdev) · 793 unmodified lines
794794 return ret;
795795 }
796796
797− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
798− &bridge->dma_ranges, NULL);
799− if (ret) {
800− dev_err(dev, "Failed add resources\n");
801− return ret;
802− }
803−
804797 ret = altera_pcie_init_irq_domain(pcie);
805798 if (ret) {
806799 dev_err(dev, "Failed creating IRQ Domain\n");
drivers/pci/controller/pcie-brcmstb.c+0−5
@@ -970,11 +970,6 @@ static int brcm_pcie_probe(struct platform_device *pdev) · 969 unmodified lines
970970
971971 pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc");
972972
973− ret = pci_parse_request_of_pci_ranges(pcie->dev, &bridge->windows,
974− &bridge->dma_ranges, NULL);
975− if (ret)
976− return ret;
977−
978973 ret = clk_prepare_enable(pcie->clk);
979974 if (ret) {
980975 dev_err(&pdev->dev, "could not enable clock\n");
drivers/pci/controller/pcie-iproc-platform.c+0−7
@@ -95,13 +95,6 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev) · 94 unmodified lines
9595 if (IS_ERR(pcie->phy))
9696 return PTR_ERR(pcie->phy);
9797
98− ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
99− &bridge->dma_ranges, NULL);
100− if (ret) {
101− dev_err(dev, "unable to get PCI host bridge resources\n");
102− return ret;
103− }
104−
10598 /* PAXC doesn't support legacy IRQs, skip mapping */
10699 switch (pcie->type) {
107100 case IPROC_PCIE_PAXC:
drivers/pci/controller/pcie-mediatek.c+0−7
@@ -1027,15 +1027,8 @@ static int mtk_pcie_setup(struct mtk_pcie *pcie) · 1026 unmodified lines
10271027 struct device *dev = pcie->dev;
10281028 struct device_node *node = dev->of_node, *child;
10291029 struct mtk_pcie_port *port, *tmp;
1030− struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1031− struct list_head *windows = &host->windows;
10321030 int err;
10331031
1034− err = pci_parse_request_of_pci_ranges(dev, windows,
1035− &host->dma_ranges, NULL);
1036− if (err)
1037− return err;
1038−
10391032 for_each_available_child_of_node(node, child) {
10401033 int slot;
10411034
drivers/pci/controller/pcie-rcar-host.c+0−5
@@ -913,11 +913,6 @@ static int rcar_pcie_probe(struct platform_device *pdev) · 912 unmodified lines
913913 pcie->dev = dev;
914914 platform_set_drvdata(pdev, host);
915915
916− err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
917− &bridge->dma_ranges, NULL);
918− if (err)
919− return err;
920−
921916 pm_runtime_enable(pcie->dev);
922917 err = pm_runtime_get_sync(pcie->dev);
923918 if (err < 0) {
drivers/pci/controller/pcie-rockchip-host.c+0−5
@@ -989,11 +989,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev) · 988 unmodified lines
989989 if (err < 0)
990990 goto err_deinit_port;
991991
992− err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
993− &bridge->dma_ranges, NULL);
994− if (err)
995− goto err_remove_irq_domain;
996−
997992 err = rockchip_pcie_cfg_atu(rockchip);
998993 if (err)
999994 goto err_remove_irq_domain;
drivers/pci/controller/pcie-xilinx-nwl.c+0−7
@@ -838,13 +838,6 @@ static int nwl_pcie_probe(struct platform_device *pdev) · 837 unmodified lines
838838 return err;
839839 }
840840
841− err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
842− &bridge->dma_ranges, NULL);
843− if (err) {
844− dev_err(dev, "Getting bridge resources failed\n");
845− return err;
846− }
847−
848841 err = nwl_pcie_init_irq_domain(pcie);
849842 if (err) {
850843 dev_err(dev, "Failed creating IRQ Domain\n");
drivers/pci/controller/pcie-xilinx.c+0−7
@@ -641,13 +641,6 @@ static int xilinx_pcie_probe(struct platform_device *pdev) · 640 unmodified lines
641641 return err;
642642 }
643643
644− err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
645− &bridge->dma_ranges, NULL);
646− if (err) {
647− dev_err(dev, "Getting bridge resources failed\n");
648− return err;
649− }
650−
651644 bridge->sysdata = port;
652645 bridge->ops = &xilinx_pcie_ops;
653646 bridge->map_irq = of_irq_parse_and_map_pci;
drivers/pci/of.c+17−20
@@ -521,28 +521,26 @@ int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin) · 520 unmodified lines
521521 EXPORT_SYMBOL_GPL(of_irq_parse_and_map_pci);
522522 #endif /* CONFIG_OF_IRQ */
523523
524−int pci_parse_request_of_pci_ranges(struct device *dev,
525− struct list_head *resources,
526− struct list_head *ib_resources,
527− struct resource **bus_range)
524+static int pci_parse_request_of_pci_ranges(struct device *dev,
525+ struct pci_host_bridge *bridge)
528526 {
529527 int err, res_valid = 0;
530528 resource_size_t iobase;
531529 struct resource_entry *win, *tmp;
532530
533− INIT_LIST_HEAD(resources);
534− if (ib_resources)
535− INIT_LIST_HEAD(ib_resources);
536− err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, resources,
537− ib_resources, &iobase);
531+ INIT_LIST_HEAD(&bridge->windows);
532+ INIT_LIST_HEAD(&bridge->dma_ranges);
533+
534+ err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &bridge->windows,
535+ &bridge->dma_ranges, &iobase);
538536 if (err)
539537 return err;
540538
541− err = devm_request_pci_bus_resources(dev, resources);
539+ err = devm_request_pci_bus_resources(dev, &bridge->windows);
542540 if (err)
543− goto out_release_res;
541+ return err;
544542
545− resource_list_for_each_entry_safe(win, tmp, resources) {
543+ resource_list_for_each_entry_safe(win, tmp, &bridge->windows) {
546544 struct resource *res = win->res;
547545
548546 switch (resource_type(res)) {
@@ -557,10 +555,6 @@ int pci_parse_request_of_pci_ranges(struct device *dev, · 8 unmodified lines
557555 case IORESOURCE_MEM:
558556 res_valid |= !(res->flags & IORESOURCE_PREFETCH);
559557 break;
560− case IORESOURCE_BUS:
561− if (bus_range)
562− *bus_range = res;
563− break;
564558 }
565559 }
566560
@@ -568,12 +562,15 @@ int pci_parse_request_of_pci_ranges(struct device *dev, · 1 unmodified line
568562 dev_warn(dev, "non-prefetchable memory resource required\n");
569563
570564 return 0;
565+}
571566
572− out_release_res:
573− pci_free_resource_list(resources);
574− return err;
567+int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge)
568+{
569+ if (!dev->of_node)
570+ return 0;
571+
572+ return pci_parse_request_of_pci_ranges(dev, bridge);
575573 }
576−EXPORT_SYMBOL_GPL(pci_parse_request_of_pci_ranges);
577574
578575 #endif /* CONFIG_PCI */
579576
drivers/pci/pci.h+8−0
@@ -627,6 +627,8 @@ void pci_release_of_node(struct pci_dev *dev); · 626 unmodified lines
627627 void pci_set_bus_of_node(struct pci_bus *bus);
628628 void pci_release_bus_of_node(struct pci_bus *bus);
629629
630+int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge);
631+
630632 #else
631633 static inline int
632634 of_pci_parse_bus_range(struct device_node *node, struct resource *res)
@@ -650,6 +652,12 @@ static inline void pci_set_of_node(struct pci_dev *dev) { } · 17 unmodified lines
650652 static inline void pci_release_of_node(struct pci_dev *dev) { }
651653 static inline void pci_set_bus_of_node(struct pci_bus *bus) { }
652654 static inline void pci_release_bus_of_node(struct pci_bus *bus) { }
655+
656+static inline int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge)
657+{
658+ return 0;
659+}
660+
653661 #endif /* CONFIG_OF */
654662
655663 #ifdef CONFIG_PCIEAER
drivers/pci/probe.c+4−0
@@ -635,6 +635,10 @@ struct pci_host_bridge *devm_pci_alloc_host_bridge(struct device *dev, · 634 unmodified lines
635635 if (ret)
636636 return NULL;
637637
638+ ret = devm_of_pci_bridge_init(dev, bridge);
639+ if (ret)
640+ return NULL;
641+
638642 return bridge;
639643 }
640644 EXPORT_SYMBOL(devm_pci_alloc_host_bridge);
include/linux/pci.h+0−12
@@ -2303,10 +2303,6 @@ int pci_vpd_find_info_keyword(const u8 *buf, unsigned int off, · 2302 unmodified lines
23032303 struct device_node;
23042304 struct irq_domain;
23052305 struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus);
2306−int pci_parse_request_of_pci_ranges(struct device *dev,
2307− struct list_head *resources,
2308− struct list_head *ib_resources,
2309− struct resource **bus_range);
23102306
23112307 /* Arch may override this (weak) */
23122308 struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus);
@@ -2314,14 +2310,6 @@ struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus); · 1 unmodified line
23142310 #else /* CONFIG_OF */
23152311 static inline struct irq_domain *
23162312 pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; }
2317−static inline int
2318−pci_parse_request_of_pci_ranges(struct device *dev,
2319− struct list_head *resources,
2320− struct list_head *ib_resources,
2321− struct resource **bus_range)
2322−{
2323− return -EINVAL;
2324−}
23252313 #endif /* CONFIG_OF */
23262314
23272315 static inline struct device_node *