PCI: Move setting pci_host_bridge.busnr out of host drivers
authorRob Herring <robh@kernel.org>
Wed, 22 Jul 2020 02:25:06 +0000 (20:25 -0600)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Thu, 23 Jul 2020 16:13:06 +0000 (17:13 +0100)
Most host drivers only parse the DT bus range to set the root bus number
in pci_host_bridge.busnr. The ones that don't set busnr are buggy in
that they ignore what's in DT. Let's set busnr in pci_scan_root_bus_bridge()
where we already check for the bus resource and remove setting it in
host drivers.

Link: https://lore.kernel.org/r/20200722022514.1283916-12-robh@kernel.org
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: Jingoo Han <jingoohan1@gmail.com>
Cc: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Cc: Will Deacon <will@kernel.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Ryder Lee <ryder.lee@mediatek.com>
Cc: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Cc: linux-tegra@vger.kernel.org
Cc: linux-mediatek@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
drivers/pci/controller/dwc/pcie-designware-host.c
drivers/pci/controller/pci-aardvark.c
drivers/pci/controller/pci-host-common.c
drivers/pci/controller/pci-tegra.c
drivers/pci/controller/pci-v3-semi.c
drivers/pci/controller/pcie-mediatek.c
drivers/pci/controller/pcie-rcar-host.c
drivers/pci/probe.c

index 9e8a9cfc6d3a727f1425b7e98c53be63f5c9e835..9775558acdc880f2ef923102a306ce4f5dd65a6c 100644 (file)
@@ -474,7 +474,6 @@ int dw_pcie_host_init(struct pcie_port *pp)
        }
 
        bridge->sysdata = pp;
-       bridge->busnr = pp->busn->start;
        bridge->ops = &dw_pcie_ops;
        bridge->map_irq = of_irq_parse_and_map_pci;
        bridge->swizzle_irq = pci_common_swizzle;
index e08ed861368fcca62e8e104c081f9e9e2d520f53..36dc2412c66feaa91707d5abb8f1ef4e78b28fba 100644 (file)
@@ -1104,7 +1104,6 @@ static int advk_pcie_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        struct advk_pcie *pcie;
-       struct resource *bus;
        struct pci_host_bridge *bridge;
        int ret, irq;
 
@@ -1132,12 +1131,11 @@ static int advk_pcie_probe(struct platform_device *pdev)
        }
 
        ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
-                                             &bridge->dma_ranges, &bus);
+                                             &bridge->dma_ranges, NULL);
        if (ret) {
                dev_err(dev, "Failed to parse resources\n");
                return ret;
        }
-       bridge->busnr = bus->start;
 
        pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node,
                                                       "reset-gpios", 0,
index ad395d7feddc52ee311e387ab21a609b60b45ece..e662910fe03282d8c15fc76b1d553a4039d2a8b6 100644 (file)
@@ -77,7 +77,6 @@ int pci_host_common_probe(struct platform_device *pdev)
                pci_add_flags(PCI_REASSIGN_ALL_BUS);
 
        bridge->sysdata = cfg;
-       bridge->busnr = cfg->busr.start;
        bridge->ops = (struct pci_ops *)&ops->pci_ops;
        bridge->map_irq = of_irq_parse_and_map_pci;
        bridge->swizzle_irq = pci_common_swizzle;
index 41232bd07c3d1e5a9a24d67f8fb9f833b50e91cf..8f37cbe7657eff108c7e0124a2b9e3341cabd752 100644 (file)
@@ -2668,7 +2668,6 @@ static int tegra_pcie_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        struct pci_host_bridge *host;
        struct tegra_pcie *pcie;
-       struct resource *bus;
        int err;
 
        host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
@@ -2683,7 +2682,7 @@ static int tegra_pcie_probe(struct platform_device *pdev)
        INIT_LIST_HEAD(&pcie->ports);
        pcie->dev = dev;
 
-       err = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL, &bus);
+       err = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL, NULL);
        if (err) {
                dev_err(dev, "Getting bridge resources failed\n");
                return err;
@@ -2712,7 +2711,6 @@ static int tegra_pcie_probe(struct platform_device *pdev)
                goto pm_runtime_put;
        }
 
-       host->busnr = bus->start;
        host->ops = &tegra_pcie_ops;
        host->map_irq = tegra_pcie_map_irq;
        host->swizzle_irq = pci_common_swizzle;
index d79af39e6e6064298bea8861a2929a1dc9455911..d2619f583bfbe9d17167c71e8fa88d9aac0a99d8 100644 (file)
@@ -584,8 +584,6 @@ static int v3_pci_setup_resource(struct v3_pci *v3,
                }
                break;
        case IORESOURCE_BUS:
-               dev_dbg(dev, "BUS %pR\n", win->res);
-               host->busnr = win->res->start;
                break;
        default:
                dev_info(dev, "Unknown resource type %lu\n",
index a9399b8d2e8b4863cb192c168a43f9d883a8d69b..ac6dfa08724715027513fa5e82a080c3bda679d9 100644 (file)
@@ -209,7 +209,6 @@ struct mtk_pcie_port {
  * @mem: non-prefetchable memory resource
  * @ports: pointer to PCIe port information
  * @soc: pointer to SoC-dependent operations
- * @busnr: root bus number
  */
 struct mtk_pcie {
        struct device *dev;
@@ -218,7 +217,6 @@ struct mtk_pcie {
 
        struct list_head ports;
        const struct mtk_pcie_soc *soc;
-       unsigned int busnr;
 };
 
 static void mtk_pcie_subsys_powerdown(struct mtk_pcie *pcie)
@@ -1031,16 +1029,13 @@ static int mtk_pcie_setup(struct mtk_pcie *pcie)
        struct mtk_pcie_port *port, *tmp;
        struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
        struct list_head *windows = &host->windows;
-       struct resource *bus;
        int err;
 
        err = pci_parse_request_of_pci_ranges(dev, windows,
-                                             &host->dma_ranges, &bus);
+                                             &host->dma_ranges, NULL);
        if (err)
                return err;
 
-       pcie->busnr = bus->start;
-
        for_each_available_child_of_node(node, child) {
                int slot;
 
@@ -1094,7 +1089,6 @@ static int mtk_pcie_probe(struct platform_device *pdev)
        if (err)
                return err;
 
-       host->busnr = pcie->busnr;
        host->ops = pcie->soc->ops;
        host->map_irq = of_irq_parse_and_map_pci;
        host->swizzle_irq = pci_common_swizzle;
index bf10f1cf04f439fef083c957f8548035008bcea2..58f4d339eb0c8187c5a9da71be1514fff6422483 100644 (file)
@@ -224,7 +224,6 @@ static int rcar_pcie_setup(struct list_head *resource,
                        i++;
                        break;
                case IORESOURCE_BUS:
-                       bridge->busnr = res->start;
                        break;
                default:
                        continue;
index 5583037dbdfab566627e3f9aea5a932c4e4fe84f..f850782efc35f3b4890103866fc14d5ef20d0ddf 100644 (file)
@@ -3088,6 +3088,7 @@ int pci_scan_root_bus_bridge(struct pci_host_bridge *bridge)
 
        resource_list_for_each_entry(window, &bridge->windows)
                if (window->res->flags & IORESOURCE_BUS) {
+                       bridge->busnr = window->res->start;
                        found = true;
                        break;
                }