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.
Unified · Split
| @@ -171,14 +171,8 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc) · 170 unmodified lines | |||
| 171 | static int cdns_pcie_host_init(struct device *dev, | 171 | static int cdns_pcie_host_init(struct device *dev, |
| 172 | struct cdns_pcie_rc *rc) | 172 | struct cdns_pcie_rc *rc) |
| 173 | { | 173 | { |
| 174 | struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc); | ||
| 175 | int err; | 174 | int err; |
| 176 | 175 | ||
| 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 | |||
| 182 | err = cdns_pcie_host_init_root_port(rc); | 176 | err = cdns_pcie_host_init_root_port(rc); |
| 183 | if (err) | 177 | if (err) |
| 184 | return err; | 178 | return err; |
| @@ -346,11 +346,6 @@ int dw_pcie_host_init(struct pcie_port *pp) · 345 unmodified lines | |||
| 346 | if (!bridge) | 346 | if (!bridge) |
| 347 | return -ENOMEM; | 347 | return -ENOMEM; |
| 348 | 348 | ||
| 349 | ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, | ||
| 350 | &bridge->dma_ranges, NULL); | ||
| 351 | if (ret) | ||
| 352 | return ret; | ||
| 353 | |||
| 354 | /* Get the I/O and memory ranges from DT */ | 349 | /* Get the I/O and memory ranges from DT */ |
| 355 | resource_list_for_each_entry(win, &bridge->windows) { | 350 | resource_list_for_each_entry(win, &bridge->windows) { |
| 356 | switch (resource_type(win->res)) { | 351 | switch (resource_type(win->res)) { |
| @@ -577,14 +577,6 @@ int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie) · 576 unmodified lines | |||
| 577 | if (!mobiveil_pcie_is_bridge(pcie)) | 577 | if (!mobiveil_pcie_is_bridge(pcie)) |
| 578 | return -ENODEV; | 578 | return -ENODEV; |
| 579 | 579 | ||
| 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 | |||
| 588 | /* | 580 | /* |
| 589 | * configure all inbound and outbound windows and prepare the RC for | 581 | * configure all inbound and outbound windows and prepare the RC for |
| 590 | * config access | 582 | * config access |
| @@ -1130,13 +1130,6 @@ static int advk_pcie_probe(struct platform_device *pdev) · 1129 unmodified lines | |||
| 1130 | return ret; | 1130 | return ret; |
| 1131 | } | 1131 | } |
| 1132 | 1132 | ||
| 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 | |||
| 1140 | pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node, | 1133 | pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node, |
| 1141 | "reset-gpios", 0, | 1134 | "reset-gpios", 0, |
| 1142 | GPIOD_OUT_LOW, | 1135 | GPIOD_OUT_LOW, |
| @@ -465,11 +465,6 @@ static int faraday_pci_probe(struct platform_device *pdev) · 464 unmodified lines | |||
| 465 | if (IS_ERR(p->base)) | 465 | if (IS_ERR(p->base)) |
| 466 | return PTR_ERR(p->base); | 466 | return PTR_ERR(p->base); |
| 467 | 467 | ||
| 468 | ret = pci_parse_request_of_pci_ranges(dev, &host->windows, | ||
| 469 | &host->dma_ranges, NULL); | ||
| 470 | if (ret) | ||
| 471 | return ret; | ||
| 472 | |||
| 473 | win = resource_list_first_type(&host->windows, IORESOURCE_IO); | 468 | win = resource_list_first_type(&host->windows, IORESOURCE_IO); |
| 474 | if (win) { | 469 | if (win) { |
| 475 | io = win->res; | 470 | io = win->res; |
| @@ -25,21 +25,20 @@ static struct pci_config_window *gen_pci_init(struct device *dev, · 24 unmodified lines | |||
| 25 | { | 25 | { |
| 26 | int err; | 26 | int err; |
| 27 | struct resource cfgres; | 27 | struct resource cfgres; |
| 28 | struct resource *bus_range = NULL; | 28 | struct resource_entry *bus; |
| 29 | struct pci_config_window *cfg; | 29 | struct pci_config_window *cfg; |
| 30 | 30 | ||
| 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 | |||
| 36 | err = of_address_to_resource(dev->of_node, 0, &cfgres); | 31 | err = of_address_to_resource(dev->of_node, 0, &cfgres); |
| 37 | if (err) { | 32 | if (err) { |
| 38 | dev_err(dev, "missing \"reg\" property\n"); | 33 | dev_err(dev, "missing \"reg\" property\n"); |
| 39 | return ERR_PTR(err); | 34 | return ERR_PTR(err); |
| 40 | } | 35 | } |
| 41 | 36 | ||
| 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); | ||
| 43 | if (IS_ERR(cfg)) | 42 | if (IS_ERR(cfg)) |
| 44 | return cfg; | 43 | return cfg; |
| 45 | 44 | ||
| @@ -218,13 +218,6 @@ static int loongson_pci_probe(struct platform_device *pdev) · 217 unmodified lines | |||
| 218 | } | 218 | } |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 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 | |||
| 228 | bridge->sysdata = priv; | 221 | bridge->sysdata = priv; |
| 229 | bridge->ops = &loongson_pci_ops; | 222 | bridge->ops = &loongson_pci_ops; |
| 230 | bridge->map_irq = loongson_map_irq; | 223 | bridge->map_irq = loongson_map_irq; |
| @@ -282,7 +282,6 @@ static int rcar_pci_probe(struct platform_device *pdev) · 281 unmodified lines | |||
| 282 | struct rcar_pci_priv *priv; | 282 | struct rcar_pci_priv *priv; |
| 283 | struct pci_host_bridge *bridge; | 283 | struct pci_host_bridge *bridge; |
| 284 | void __iomem *reg; | 284 | void __iomem *reg; |
| 285 | int ret; | ||
| 286 | 285 | ||
| 287 | bridge = devm_pci_alloc_host_bridge(dev, sizeof(*priv)); | 286 | bridge = devm_pci_alloc_host_bridge(dev, sizeof(*priv)); |
| 288 | if (!bridge) | 287 | if (!bridge) |
| @@ -315,11 +314,6 @@ static int rcar_pci_probe(struct platform_device *pdev) · 26 unmodified lines | |||
| 315 | return priv->irq; | 314 | return priv->irq; |
| 316 | } | 315 | } |
| 317 | 316 | ||
| 318 | ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, | ||
| 319 | &bridge->dma_ranges, NULL); | ||
| 320 | if (ret) | ||
| 321 | return ret; | ||
| 322 | |||
| 323 | bridge->ops = &rcar_pci_ops; | 317 | bridge->ops = &rcar_pci_ops; |
| 324 | 318 | ||
| 325 | pci_add_flags(PCI_REASSIGN_ALL_BUS); | 319 | pci_add_flags(PCI_REASSIGN_ALL_BUS); |
| @@ -2682,12 +2682,6 @@ static int tegra_pcie_probe(struct platform_device *pdev) · 2681 unmodified lines | |||
| 2682 | INIT_LIST_HEAD(&pcie->ports); | 2682 | INIT_LIST_HEAD(&pcie->ports); |
| 2683 | pcie->dev = dev; | 2683 | pcie->dev = dev; |
| 2684 | 2684 | ||
| 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 | |||
| 2691 | err = tegra_pcie_parse_dt(pcie); | 2685 | err = tegra_pcie_parse_dt(pcie); |
| 2692 | if (err < 0) | 2686 | if (err < 0) |
| 2693 | return err; | 2687 | return err; |
| @@ -764,11 +764,6 @@ static int v3_pci_probe(struct platform_device *pdev) · 763 unmodified lines | |||
| 764 | if (IS_ERR(v3->config_base)) | 764 | if (IS_ERR(v3->config_base)) |
| 765 | return PTR_ERR(v3->config_base); | 765 | return PTR_ERR(v3->config_base); |
| 766 | 766 | ||
| 767 | ret = pci_parse_request_of_pci_ranges(dev, &host->windows, | ||
| 768 | &host->dma_ranges, NULL); | ||
| 769 | if (ret) | ||
| 770 | return ret; | ||
| 771 | |||
| 772 | /* Get and request error IRQ resource */ | 767 | /* Get and request error IRQ resource */ |
| 773 | irq = platform_get_irq(pdev, 0); | 768 | irq = platform_get_irq(pdev, 0); |
| 774 | if (irq < 0) { | 769 | if (irq < 0) { |
| @@ -67,7 +67,7 @@ static int versatile_pci_probe(struct platform_device *pdev) · 66 unmodified lines | |||
| 67 | struct device *dev = &pdev->dev; | 67 | struct device *dev = &pdev->dev; |
| 68 | struct resource *res; | 68 | struct resource *res; |
| 69 | struct resource_entry *entry; | 69 | struct resource_entry *entry; |
| 70 | int ret, i, myslot = -1, mem = 1; | 70 | int i, myslot = -1, mem = 1; |
| 71 | u32 val; | 71 | u32 val; |
| 72 | void __iomem *local_pci_cfg_base; | 72 | void __iomem *local_pci_cfg_base; |
| 73 | struct pci_host_bridge *bridge; | 73 | struct pci_host_bridge *bridge; |
| @@ -89,11 +89,6 @@ static int versatile_pci_probe(struct platform_device *pdev) · 15 unmodified lines | |||
| 89 | if (IS_ERR(versatile_cfg_base[1])) | 89 | if (IS_ERR(versatile_cfg_base[1])) |
| 90 | return PTR_ERR(versatile_cfg_base[1]); | 90 | return PTR_ERR(versatile_cfg_base[1]); |
| 91 | 91 | ||
| 92 | ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, | ||
| 93 | NULL, NULL); | ||
| 94 | if (ret) | ||
| 95 | return ret; | ||
| 96 | |||
| 97 | resource_list_for_each_entry(entry, &bridge->windows) { | 92 | resource_list_for_each_entry(entry, &bridge->windows) { |
| 98 | if (resource_type(entry->res) == IORESOURCE_MEM) { | 93 | if (resource_type(entry->res) == IORESOURCE_MEM) { |
| 99 | writel(entry->res->start >> 28, PCI_IMAP(mem)); | 94 | writel(entry->res->start >> 28, PCI_IMAP(mem)); |
| @@ -614,11 +614,6 @@ static int xgene_pcie_probe(struct platform_device *pdev) · 613 unmodified lines | |||
| 614 | if (ret) | 614 | if (ret) |
| 615 | return ret; | 615 | return ret; |
| 616 | 616 | ||
| 617 | ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, | ||
| 618 | &bridge->dma_ranges, NULL); | ||
| 619 | if (ret) | ||
| 620 | return ret; | ||
| 621 | |||
| 622 | ret = xgene_pcie_setup(port); | 617 | ret = xgene_pcie_setup(port); |
| 623 | if (ret) | 618 | if (ret) |
| 624 | return ret; | 619 | return ret; |
| @@ -794,13 +794,6 @@ static int altera_pcie_probe(struct platform_device *pdev) · 793 unmodified lines | |||
| 794 | return ret; | 794 | return ret; |
| 795 | } | 795 | } |
| 796 | 796 | ||
| 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 | |||
| 804 | ret = altera_pcie_init_irq_domain(pcie); | 797 | ret = altera_pcie_init_irq_domain(pcie); |
| 805 | if (ret) { | 798 | if (ret) { |
| 806 | dev_err(dev, "Failed creating IRQ Domain\n"); | 799 | dev_err(dev, "Failed creating IRQ Domain\n"); |
| @@ -970,11 +970,6 @@ static int brcm_pcie_probe(struct platform_device *pdev) · 969 unmodified lines | |||
| 970 | 970 | ||
| 971 | pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc"); | 971 | pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc"); |
| 972 | 972 | ||
| 973 | ret = pci_parse_request_of_pci_ranges(pcie->dev, &bridge->windows, | ||
| 974 | &bridge->dma_ranges, NULL); | ||
| 975 | if (ret) | ||
| 976 | return ret; | ||
| 977 | |||
| 978 | ret = clk_prepare_enable(pcie->clk); | 973 | ret = clk_prepare_enable(pcie->clk); |
| 979 | if (ret) { | 974 | if (ret) { |
| 980 | dev_err(&pdev->dev, "could not enable clock\n"); | 975 | dev_err(&pdev->dev, "could not enable clock\n"); |
| @@ -95,13 +95,6 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev) · 94 unmodified lines | |||
| 95 | if (IS_ERR(pcie->phy)) | 95 | if (IS_ERR(pcie->phy)) |
| 96 | return PTR_ERR(pcie->phy); | 96 | return PTR_ERR(pcie->phy); |
| 97 | 97 | ||
| 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 | |||
| 105 | /* PAXC doesn't support legacy IRQs, skip mapping */ | 98 | /* PAXC doesn't support legacy IRQs, skip mapping */ |
| 106 | switch (pcie->type) { | 99 | switch (pcie->type) { |
| 107 | case IPROC_PCIE_PAXC: | 100 | case IPROC_PCIE_PAXC: |
| @@ -1027,15 +1027,8 @@ static int mtk_pcie_setup(struct mtk_pcie *pcie) · 1026 unmodified lines | |||
| 1027 | struct device *dev = pcie->dev; | 1027 | struct device *dev = pcie->dev; |
| 1028 | struct device_node *node = dev->of_node, *child; | 1028 | struct device_node *node = dev->of_node, *child; |
| 1029 | struct mtk_pcie_port *port, *tmp; | 1029 | 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; | ||
| 1032 | int err; | 1030 | int err; |
| 1033 | 1031 | ||
| 1034 | err = pci_parse_request_of_pci_ranges(dev, windows, | ||
| 1035 | &host->dma_ranges, NULL); | ||
| 1036 | if (err) | ||
| 1037 | return err; | ||
| 1038 | |||
| 1039 | for_each_available_child_of_node(node, child) { | 1032 | for_each_available_child_of_node(node, child) { |
| 1040 | int slot; | 1033 | int slot; |
| 1041 | 1034 | ||
| @@ -913,11 +913,6 @@ static int rcar_pcie_probe(struct platform_device *pdev) · 912 unmodified lines | |||
| 913 | pcie->dev = dev; | 913 | pcie->dev = dev; |
| 914 | platform_set_drvdata(pdev, host); | 914 | platform_set_drvdata(pdev, host); |
| 915 | 915 | ||
| 916 | err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, | ||
| 917 | &bridge->dma_ranges, NULL); | ||
| 918 | if (err) | ||
| 919 | return err; | ||
| 920 | |||
| 921 | pm_runtime_enable(pcie->dev); | 916 | pm_runtime_enable(pcie->dev); |
| 922 | err = pm_runtime_get_sync(pcie->dev); | 917 | err = pm_runtime_get_sync(pcie->dev); |
| 923 | if (err < 0) { | 918 | if (err < 0) { |
| @@ -989,11 +989,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev) · 988 unmodified lines | |||
| 989 | if (err < 0) | 989 | if (err < 0) |
| 990 | goto err_deinit_port; | 990 | goto err_deinit_port; |
| 991 | 991 | ||
| 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 | |||
| 997 | err = rockchip_pcie_cfg_atu(rockchip); | 992 | err = rockchip_pcie_cfg_atu(rockchip); |
| 998 | if (err) | 993 | if (err) |
| 999 | goto err_remove_irq_domain; | 994 | goto err_remove_irq_domain; |
| @@ -838,13 +838,6 @@ static int nwl_pcie_probe(struct platform_device *pdev) · 837 unmodified lines | |||
| 838 | return err; | 838 | return err; |
| 839 | } | 839 | } |
| 840 | 840 | ||
| 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 | |||
| 848 | err = nwl_pcie_init_irq_domain(pcie); | 841 | err = nwl_pcie_init_irq_domain(pcie); |
| 849 | if (err) { | 842 | if (err) { |
| 850 | dev_err(dev, "Failed creating IRQ Domain\n"); | 843 | dev_err(dev, "Failed creating IRQ Domain\n"); |
| @@ -641,13 +641,6 @@ static int xilinx_pcie_probe(struct platform_device *pdev) · 640 unmodified lines | |||
| 641 | return err; | 641 | return err; |
| 642 | } | 642 | } |
| 643 | 643 | ||
| 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 | |||
| 651 | bridge->sysdata = port; | 644 | bridge->sysdata = port; |
| 652 | bridge->ops = &xilinx_pcie_ops; | 645 | bridge->ops = &xilinx_pcie_ops; |
| 653 | bridge->map_irq = of_irq_parse_and_map_pci; | 646 | bridge->map_irq = of_irq_parse_and_map_pci; |
| @@ -521,28 +521,26 @@ int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin) · 520 unmodified lines | |||
| 521 | EXPORT_SYMBOL_GPL(of_irq_parse_and_map_pci); | 521 | EXPORT_SYMBOL_GPL(of_irq_parse_and_map_pci); |
| 522 | #endif /* CONFIG_OF_IRQ */ | 522 | #endif /* CONFIG_OF_IRQ */ |
| 523 | 523 | ||
| 524 | int pci_parse_request_of_pci_ranges(struct device *dev, | 524 | static int pci_parse_request_of_pci_ranges(struct device *dev, |
| 525 | struct list_head *resources, | 525 | struct pci_host_bridge *bridge) |
| 526 | struct list_head *ib_resources, | ||
| 527 | struct resource **bus_range) | ||
| 528 | { | 526 | { |
| 529 | int err, res_valid = 0; | 527 | int err, res_valid = 0; |
| 530 | resource_size_t iobase; | 528 | resource_size_t iobase; |
| 531 | struct resource_entry *win, *tmp; | 529 | struct resource_entry *win, *tmp; |
| 532 | 530 | ||
| 533 | INIT_LIST_HEAD(resources); | 531 | INIT_LIST_HEAD(&bridge->windows); |
| 534 | if (ib_resources) | 532 | INIT_LIST_HEAD(&bridge->dma_ranges); |
| 535 | INIT_LIST_HEAD(ib_resources); | 533 | |
| 536 | err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, resources, | 534 | err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &bridge->windows, |
| 537 | ib_resources, &iobase); | 535 | &bridge->dma_ranges, &iobase); |
| 538 | if (err) | 536 | if (err) |
| 539 | return err; | 537 | return err; |
| 540 | 538 | ||
| 541 | err = devm_request_pci_bus_resources(dev, resources); | 539 | err = devm_request_pci_bus_resources(dev, &bridge->windows); |
| 542 | if (err) | 540 | if (err) |
| 543 | goto out_release_res; | 541 | return err; |
| 544 | 542 | ||
| 545 | resource_list_for_each_entry_safe(win, tmp, resources) { | 543 | resource_list_for_each_entry_safe(win, tmp, &bridge->windows) { |
| 546 | struct resource *res = win->res; | 544 | struct resource *res = win->res; |
| 547 | 545 | ||
| 548 | switch (resource_type(res)) { | 546 | switch (resource_type(res)) { |
| @@ -557,10 +555,6 @@ int pci_parse_request_of_pci_ranges(struct device *dev, · 8 unmodified lines | |||
| 557 | case IORESOURCE_MEM: | 555 | case IORESOURCE_MEM: |
| 558 | res_valid |= !(res->flags & IORESOURCE_PREFETCH); | 556 | res_valid |= !(res->flags & IORESOURCE_PREFETCH); |
| 559 | break; | 557 | break; |
| 560 | case IORESOURCE_BUS: | ||
| 561 | if (bus_range) | ||
| 562 | *bus_range = res; | ||
| 563 | break; | ||
| 564 | } | 558 | } |
| 565 | } | 559 | } |
| 566 | 560 | ||
| @@ -568,12 +562,15 @@ int pci_parse_request_of_pci_ranges(struct device *dev, · 1 unmodified line | |||
| 568 | dev_warn(dev, "non-prefetchable memory resource required\n"); | 562 | dev_warn(dev, "non-prefetchable memory resource required\n"); |
| 569 | 563 | ||
| 570 | return 0; | 564 | return 0; |
| 565 | } | ||
| 571 | 566 | ||
| 572 | out_release_res: | 567 | int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge) |
| 573 | pci_free_resource_list(resources); | 568 | { |
| 574 | return err; | 569 | if (!dev->of_node) |
| 570 | return 0; | ||
| 571 | |||
| 572 | return pci_parse_request_of_pci_ranges(dev, bridge); | ||
| 575 | } | 573 | } |
| 576 | EXPORT_SYMBOL_GPL(pci_parse_request_of_pci_ranges); | ||
| 577 | 574 | ||
| 578 | #endif /* CONFIG_PCI */ | 575 | #endif /* CONFIG_PCI */ |
| 579 | 576 | ||
| @@ -627,6 +627,8 @@ void pci_release_of_node(struct pci_dev *dev); · 626 unmodified lines | |||
| 627 | void pci_set_bus_of_node(struct pci_bus *bus); | 627 | void pci_set_bus_of_node(struct pci_bus *bus); |
| 628 | void pci_release_bus_of_node(struct pci_bus *bus); | 628 | void pci_release_bus_of_node(struct pci_bus *bus); |
| 629 | 629 | ||
| 630 | int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge); | ||
| 631 | |||
| 630 | #else | 632 | #else |
| 631 | static inline int | 633 | static inline int |
| 632 | of_pci_parse_bus_range(struct device_node *node, struct resource *res) | 634 | 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 | |||
| 650 | static inline void pci_release_of_node(struct pci_dev *dev) { } | 652 | static inline void pci_release_of_node(struct pci_dev *dev) { } |
| 651 | static inline void pci_set_bus_of_node(struct pci_bus *bus) { } | 653 | static inline void pci_set_bus_of_node(struct pci_bus *bus) { } |
| 652 | static inline void pci_release_bus_of_node(struct pci_bus *bus) { } | 654 | 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 | |||
| 653 | #endif /* CONFIG_OF */ | 661 | #endif /* CONFIG_OF */ |
| 654 | 662 | ||
| 655 | #ifdef CONFIG_PCIEAER | 663 | #ifdef CONFIG_PCIEAER |
| @@ -635,6 +635,10 @@ struct pci_host_bridge *devm_pci_alloc_host_bridge(struct device *dev, · 634 unmodified lines | |||
| 635 | if (ret) | 635 | if (ret) |
| 636 | return NULL; | 636 | return NULL; |
| 637 | 637 | ||
| 638 | ret = devm_of_pci_bridge_init(dev, bridge); | ||
| 639 | if (ret) | ||
| 640 | return NULL; | ||
| 641 | |||
| 638 | return bridge; | 642 | return bridge; |
| 639 | } | 643 | } |
| 640 | EXPORT_SYMBOL(devm_pci_alloc_host_bridge); | 644 | EXPORT_SYMBOL(devm_pci_alloc_host_bridge); |
| @@ -2303,10 +2303,6 @@ int pci_vpd_find_info_keyword(const u8 *buf, unsigned int off, · 2302 unmodified lines | |||
| 2303 | struct device_node; | 2303 | struct device_node; |
| 2304 | struct irq_domain; | 2304 | struct irq_domain; |
| 2305 | struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus); | 2305 | 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); | ||
| 2310 | 2306 | ||
| 2311 | /* Arch may override this (weak) */ | 2307 | /* Arch may override this (weak) */ |
| 2312 | struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus); | 2308 | 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 | |||
| 2314 | #else /* CONFIG_OF */ | 2310 | #else /* CONFIG_OF */ |
| 2315 | static inline struct irq_domain * | 2311 | static inline struct irq_domain * |
| 2316 | pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; } | 2312 | 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 | } | ||
| 2325 | #endif /* CONFIG_OF */ | 2313 | #endif /* CONFIG_OF */ |
| 2326 | 2314 | ||
| 2327 | static inline struct device_node * | 2315 | static inline struct device_node * |