Patch "PCI: mvebu: Fix duplicate resource requests" has been added to the 5.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    PCI: mvebu: Fix duplicate resource requests

to the 5.9-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     pci-mvebu-fix-duplicate-resource-requests.patch
and it can be found in the queue-5.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4877125f37ee1cfbab0066b38332b3667229cbee
Author: Rob Herring <robh@xxxxxxxxxx>
Date:   Fri Oct 23 09:52:52 2020 -0500

    PCI: mvebu: Fix duplicate resource requests
    
    [ Upstream commit 832ea234277a2465ec6602fa6a4db5cd9ee87ae3 ]
    
    With commit 669cbc708122 ("PCI: Move DT resource setup into
    devm_pci_alloc_host_bridge()"), the DT 'ranges' is parsed and populated
    into resources when the host bridge is allocated. The resources are
    requested as well, but that happens a second time for the mvebu driver in
    mvebu_pcie_parse_request_resources(). We should only be requesting the
    additional resources added in mvebu_pcie_parse_request_resources().  These
    are not added by default because they use custom properties rather than
    standard DT address translation.
    
    Also, the bus ranges was also populated by default, so we can remove it
    from mvebu_pci_host_probe().
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=209729
    Fixes: 669cbc708122 ("PCI: Move DT resource setup into devm_pci_alloc_host_bridge()")
    Link: https://lore.kernel.org/r/20201023145252.2691779-1-robh@xxxxxxxxxx
    Reported-by: vtolkm@xxxxxxxxxxxxxx
    Tested-by: Jan Kundrát <jan.kundrat@xxxxxxxxx>
    Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
    Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
    Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx>
    Cc: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxx>
    Cc: Jason Cooper <jason@xxxxxxxxxxxxxx>
    Cc: Russell King <linux@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
index c39978b750ec6..653c0b3d29125 100644
--- a/drivers/pci/controller/pci-mvebu.c
+++ b/drivers/pci/controller/pci-mvebu.c
@@ -960,25 +960,16 @@ static void mvebu_pcie_powerdown(struct mvebu_pcie_port *port)
 }
 
 /*
- * We can't use devm_of_pci_get_host_bridge_resources() because we
- * need to parse our special DT properties encoding the MEM and IO
- * apertures.
+ * devm_of_pci_get_host_bridge_resources() only sets up translateable resources,
+ * so we need extra resource setup parsing our special DT properties encoding
+ * the MEM and IO apertures.
  */
 static int mvebu_pcie_parse_request_resources(struct mvebu_pcie *pcie)
 {
 	struct device *dev = &pcie->pdev->dev;
-	struct device_node *np = dev->of_node;
 	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
 	int ret;
 
-	/* Get the bus range */
-	ret = of_pci_parse_bus_range(np, &pcie->busn);
-	if (ret) {
-		dev_err(dev, "failed to parse bus-range property: %d\n", ret);
-		return ret;
-	}
-	pci_add_resource(&bridge->windows, &pcie->busn);
-
 	/* Get the PCIe memory aperture */
 	mvebu_mbus_get_pcie_mem_aperture(&pcie->mem);
 	if (resource_size(&pcie->mem) == 0) {
@@ -988,6 +979,9 @@ static int mvebu_pcie_parse_request_resources(struct mvebu_pcie *pcie)
 
 	pcie->mem.name = "PCI MEM";
 	pci_add_resource(&bridge->windows, &pcie->mem);
+	ret = devm_request_resource(dev, &iomem_resource, &pcie->mem);
+	if (ret)
+		return ret;
 
 	/* Get the PCIe IO aperture */
 	mvebu_mbus_get_pcie_io_aperture(&pcie->io);
@@ -1001,9 +995,12 @@ static int mvebu_pcie_parse_request_resources(struct mvebu_pcie *pcie)
 		pcie->realio.name = "PCI I/O";
 
 		pci_add_resource(&bridge->windows, &pcie->realio);
+		ret = devm_request_resource(dev, &ioport_resource, &pcie->realio);
+		if (ret)
+			return ret;
 	}
 
-	return devm_request_pci_bus_resources(dev, &bridge->windows);
+	return 0;
 }
 
 /*



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux