Commit 4f5c883d authored by Rob Herring's avatar Rob Herring Committed by Lorenzo Pieralisi
Browse files

PCI: Move setting pci_host_bridge.busnr out of host drivers

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: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: default avatarBjorn 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
parent 6176a5f3
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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;
+1 −3
Original line number Diff line number Diff line
@@ -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,
+0 −1
Original line number Diff line number Diff line
@@ -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;
+1 −3
Original line number Diff line number Diff line
@@ -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;
+0 −2
Original line number Diff line number Diff line
@@ -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",
Loading