linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/25] PCI host resource consolidation
@ 2019-10-16 20:06 Rob Herring
  2019-10-16 20:06 ` [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper Rob Herring
                   ` (24 more replies)
  0 siblings, 25 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

This started with just dma-ranges parsing consolidation, but has expanded
to converting all host drivers to use pci_parse_request_of_pci_ranges()
rather than devm_of_pci_get_host_bridge_resources(). This series moves
the DT 'dma-ranges' parsing into common helpers utilizing a resource list.
There's no (intended) functional change in this series though I'm also
working on a separate series now in dt/next to improve the handling of
'dma-ranges' and dma masks.

The last patch may need to wait if there's any new users of
devm_of_pci_get_host_bridge_resources.

Only versatile has been tested (on QEMU). The rest is compiled only. A git
branch is here[1].

Rob

[1] git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git pci-ranges-cleanup-v2

Rob Herring (25):
  resource: Add a resource_list_get_entry_of_type helper
  PCI: Export pci_parse_request_of_pci_ranges()
  PCI: aardvark: Use pci_parse_request_of_pci_ranges()
  PCI: altera: Use pci_parse_request_of_pci_ranges()
  PCI: dwc: Use pci_parse_request_of_pci_ranges()
  PCI: faraday: Use pci_parse_request_of_pci_ranges
  PCI: iproc: Use pci_parse_request_of_pci_ranges()
  PCI: mediatek: Use pci_parse_request_of_pci_ranges()
  PCI: mobiveil: Use pci_parse_request_of_pci_ranges()
  PCI: rockchip: Use pci_parse_request_of_pci_ranges()
  PCI: rockchip: Drop storing driver private outbound resource data
  PCI: v3-semi: Use pci_parse_request_of_pci_ranges()
  PCI: xgene: Use pci_parse_request_of_pci_ranges()
  PCI: xilinx: Use pci_parse_request_of_pci_ranges()
  PCI: xilinx-nwl: Use pci_parse_request_of_pci_ranges()
  PCI: versatile: Use pci_parse_request_of_pci_ranges()
  PCI: versatile: Remove usage of PHYS_OFFSET
  PCI: versatile: Enable COMPILE_TEST
  PCI: of: Add inbound resource parsing to helpers
  PCI: ftpci100: Use inbound resources for setup
  PCI: v3-semi: Use inbound resources for setup
  PCI: xgene: Use inbound resources for setup
  PCI: iproc: Use inbound resources for setup
  PCI: rcar: Use inbound resources for setup
  PCI: Make devm_of_pci_get_host_bridge_resources() static

 drivers/pci/controller/Kconfig                |  2 +-
 .../pci/controller/dwc/pcie-designware-host.c | 29 ++----
 drivers/pci/controller/pci-aardvark.c         | 60 +------------
 drivers/pci/controller/pci-ftpci100.c         | 78 +++++-----------
 drivers/pci/controller/pci-host-common.c      |  2 +-
 drivers/pci/controller/pci-v3-semi.c          | 74 +++++----------
 drivers/pci/controller/pci-versatile.c        | 70 +++------------
 drivers/pci/controller/pci-xgene.c            | 72 +++++----------
 drivers/pci/controller/pcie-altera.c          | 41 +--------
 drivers/pci/controller/pcie-cadence-host.c    |  2 +-
 drivers/pci/controller/pcie-iproc-platform.c  |  9 +-
 drivers/pci/controller/pcie-iproc.c           | 81 ++++-------------
 drivers/pci/controller/pcie-mediatek.c        | 43 +++------
 drivers/pci/controller/pcie-mobiveil.c        | 27 ++----
 drivers/pci/controller/pcie-rcar.c            | 48 ++++------
 drivers/pci/controller/pcie-rockchip-host.c   | 89 +++++++------------
 drivers/pci/controller/pcie-rockchip.h        |  5 --
 drivers/pci/controller/pcie-xilinx-nwl.c      | 21 ++---
 drivers/pci/controller/pcie-xilinx.c          | 18 +---
 drivers/pci/of.c                              | 51 +++++++++--
 drivers/pci/pci.h                             | 13 ---
 include/linux/pci.h                           |  2 +
 include/linux/resource_ext.h                  | 12 +++
 23 files changed, 253 insertions(+), 596 deletions(-)

--
2.20.1

^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-17  7:25   ` Christoph Hellwig
  2019-10-16 20:06 ` [PATCH v2 02/25] PCI: Export pci_parse_request_of_pci_ranges() Rob Herring
                   ` (23 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

A common pattern is looping over a resource_list just to get a matching
entry with a specific type. Add resource_list_get_entry_of_type() helper
which implements this.

Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 include/linux/resource_ext.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/linux/resource_ext.h b/include/linux/resource_ext.h
index 06da59b23b79..9f52183fab8b 100644
--- a/include/linux/resource_ext.h
+++ b/include/linux/resource_ext.h
@@ -66,4 +66,16 @@ resource_list_destroy_entry(struct resource_entry *entry)
 #define resource_list_for_each_entry_safe(entry, tmp, list)	\
 	list_for_each_entry_safe((entry), (tmp), (list), node)

+static inline struct resource_entry *resource_list_get_entry_of_type(struct list_head *list,
+							      unsigned long type)
+{
+	struct resource_entry *entry;
+
+	resource_list_for_each_entry(entry, list) {
+		if (resource_type(entry->res) == type)
+			return entry;
+	}
+	return NULL;
+}
+
 #endif /* _LINUX_RESOURCE_EXT_H */
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 02/25] PCI: Export pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
  2019-10-16 20:06 ` [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-18 12:06   ` Andrew Murray
  2019-10-16 20:06 ` [PATCH v2 03/25] PCI: aardvark: Use pci_parse_request_of_pci_ranges() Rob Herring
                   ` (22 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

pci_parse_request_of_pci_ranges() is missing a module export, so add it.

Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/of.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pci/of.c b/drivers/pci/of.c
index 36891e7deee3..f3da49a31db4 100644
--- a/drivers/pci/of.c
+++ b/drivers/pci/of.c
@@ -530,6 +530,7 @@ int pci_parse_request_of_pci_ranges(struct device *dev,
 	pci_free_resource_list(resources);
 	return err;
 }
+EXPORT_SYMBOL_GPL(pci_parse_request_of_pci_ranges);

 #endif /* CONFIG_PCI */

--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 03/25] PCI: aardvark: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
  2019-10-16 20:06 ` [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper Rob Herring
  2019-10-16 20:06 ` [PATCH v2 02/25] PCI: Export pci_parse_request_of_pci_ranges() Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 04/25] PCI: altera: " Rob Herring
                   ` (21 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert aardvark to use the common pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- Remove the temporary list
---
 drivers/pci/controller/pci-aardvark.c | 60 ++-------------------------
 1 file changed, 4 insertions(+), 56 deletions(-)

diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
index fc0fe4d4de49..9cbeba507f0c 100644
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
@@ -186,7 +186,6 @@
 struct advk_pcie {
 	struct platform_device *pdev;
 	void __iomem *base;
-	struct list_head resources;
 	struct irq_domain *irq_domain;
 	struct irq_chip irq_chip;
 	struct irq_domain *msi_domain;
@@ -910,63 +909,11 @@ static irqreturn_t advk_pcie_irq_handler(int irq, void *arg)
 	return IRQ_HANDLED;
 }
 
-static int advk_pcie_parse_request_of_pci_ranges(struct advk_pcie *pcie)
-{
-	int err, res_valid = 0;
-	struct device *dev = &pcie->pdev->dev;
-	struct resource_entry *win, *tmp;
-	resource_size_t iobase;
-
-	INIT_LIST_HEAD(&pcie->resources);
-
-	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
-						    &pcie->resources, &iobase);
-	if (err)
-		return err;
-
-	err = devm_request_pci_bus_resources(dev, &pcie->resources);
-	if (err)
-		goto out_release_res;
-
-	resource_list_for_each_entry_safe(win, tmp, &pcie->resources) {
-		struct resource *res = win->res;
-
-		switch (resource_type(res)) {
-		case IORESOURCE_IO:
-			err = devm_pci_remap_iospace(dev, res, iobase);
-			if (err) {
-				dev_warn(dev, "error %d: failed to map resource %pR\n",
-					 err, res);
-				resource_list_destroy_entry(win);
-			}
-			break;
-		case IORESOURCE_MEM:
-			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
-			break;
-		case IORESOURCE_BUS:
-			pcie->root_bus_nr = res->start;
-			break;
-		}
-	}
-
-	if (!res_valid) {
-		dev_err(dev, "non-prefetchable memory resource required\n");
-		err = -EINVAL;
-		goto out_release_res;
-	}
-
-	return 0;
-
-out_release_res:
-	pci_free_resource_list(&pcie->resources);
-	return err;
-}
-
 static int advk_pcie_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct advk_pcie *pcie;
-	struct resource *res;
+	struct resource *res, *bus;
 	struct pci_host_bridge *bridge;
 	int ret, irq;
 
@@ -991,11 +938,13 @@ static int advk_pcie_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = advk_pcie_parse_request_of_pci_ranges(pcie);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bus);
 	if (ret) {
 		dev_err(dev, "Failed to parse resources\n");
 		return ret;
 	}
+	pcie->root_bus_nr = bus->start;
 
 	advk_pcie_setup_hw(pcie);
 
@@ -1014,7 +963,6 @@ static int advk_pcie_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	list_splice_init(&pcie->resources, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = pcie;
 	bridge->busnr = 0;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 04/25] PCI: altera: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (2 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 03/25] PCI: aardvark: Use pci_parse_request_of_pci_ranges() Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-18 12:09   ` Andrew Murray
  2019-10-16 20:06 ` [PATCH v2 05/25] PCI: dwc: " Rob Herring
                   ` (20 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert altera host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

If an I/O range is present, then it will now be mapped. It's expected
that h/w which doesn't support I/O range will not define one.

Cc: Ley Foon Tan <lftan@altera.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: rfi@lists.rocketboards.org
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- Remove temporary resource list
---
 drivers/pci/controller/pcie-altera.c | 41 ++--------------------------
 1 file changed, 2 insertions(+), 39 deletions(-)

diff --git a/drivers/pci/controller/pcie-altera.c b/drivers/pci/controller/pcie-altera.c
index d2497ca43828..ba025efeae28 100644
--- a/drivers/pci/controller/pcie-altera.c
+++ b/drivers/pci/controller/pcie-altera.c
@@ -92,7 +92,6 @@ struct altera_pcie {
 	u8			root_bus_nr;
 	struct irq_domain	*irq_domain;
 	struct resource		bus_range;
-	struct list_head	resources;
 	const struct altera_pcie_data	*pcie_data;
 };
 
@@ -670,39 +669,6 @@ static void altera_pcie_isr(struct irq_desc *desc)
 	chained_irq_exit(chip, desc);
 }
 
-static int altera_pcie_parse_request_of_pci_ranges(struct altera_pcie *pcie)
-{
-	int err, res_valid = 0;
-	struct device *dev = &pcie->pdev->dev;
-	struct resource_entry *win;
-
-	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
-						    &pcie->resources, NULL);
-	if (err)
-		return err;
-
-	err = devm_request_pci_bus_resources(dev, &pcie->resources);
-	if (err)
-		goto out_release_res;
-
-	resource_list_for_each_entry(win, &pcie->resources) {
-		struct resource *res = win->res;
-
-		if (resource_type(res) == IORESOURCE_MEM)
-			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
-	}
-
-	if (res_valid)
-		return 0;
-
-	dev_err(dev, "non-prefetchable memory resource required\n");
-	err = -EINVAL;
-
-out_release_res:
-	pci_free_resource_list(&pcie->resources);
-	return err;
-}
-
 static int altera_pcie_init_irq_domain(struct altera_pcie *pcie)
 {
 	struct device *dev = &pcie->pdev->dev;
@@ -833,9 +799,8 @@ static int altera_pcie_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	INIT_LIST_HEAD(&pcie->resources);
-
-	ret = altera_pcie_parse_request_of_pci_ranges(pcie);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      NULL);
 	if (ret) {
 		dev_err(dev, "Failed add resources\n");
 		return ret;
@@ -853,7 +818,6 @@ static int altera_pcie_probe(struct platform_device *pdev)
 	cra_writel(pcie, P2A_INT_ENA_ALL, P2A_INT_ENABLE);
 	altera_pcie_host_init(pcie);
 
-	list_splice_init(&pcie->resources, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = pcie;
 	bridge->busnr = pcie->root_bus_nr;
@@ -884,7 +848,6 @@ static int altera_pcie_remove(struct platform_device *pdev)
 
 	pci_stop_root_bus(bridge->bus);
 	pci_remove_root_bus(bridge->bus);
-	pci_free_resource_list(&pcie->resources);
 	altera_pcie_irq_teardown(pcie);
 
 	return 0;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 05/25] PCI: dwc: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (3 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 04/25] PCI: altera: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-18 12:35   ` Andrew Murray
  2019-10-16 20:06 ` [PATCH v2 06/25] PCI: faraday: Use pci_parse_request_of_pci_ranges Rob Herring
                   ` (19 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the Designware host bridge to use the common
pci_parse_request_of_pci_ranges().

Cc: Jingoo Han <jingoohan1@gmail.com>
Cc: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 .../pci/controller/dwc/pcie-designware-host.c | 28 ++++++-------------
 1 file changed, 8 insertions(+), 20 deletions(-)

diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
index 0f36a926059a..aeec8b65eb97 100644
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
@@ -319,7 +319,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
 	struct device *dev = pci->dev;
 	struct device_node *np = dev->of_node;
 	struct platform_device *pdev = to_platform_device(dev);
-	struct resource_entry *win, *tmp;
+	struct resource_entry *win;
 	struct pci_bus *child;
 	struct pci_host_bridge *bridge;
 	struct resource *cfg_res;
@@ -342,31 +342,19 @@ int dw_pcie_host_init(struct pcie_port *pp)
 	if (!bridge)
 		return -ENOMEM;

-	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
-					&bridge->windows, &pp->io_base);
-	if (ret)
-		return ret;
-
-	ret = devm_request_pci_bus_resources(dev, &bridge->windows);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
 	if (ret)
 		return ret;

 	/* Get the I/O and memory ranges from DT */
-	resource_list_for_each_entry_safe(win, tmp, &bridge->windows) {
+	resource_list_for_each_entry(win, &bridge->windows) {
 		switch (resource_type(win->res)) {
 		case IORESOURCE_IO:
-			ret = devm_pci_remap_iospace(dev, win->res,
-						     pp->io_base);
-			if (ret) {
-				dev_warn(dev, "Error %d: failed to map resource %pR\n",
-					 ret, win->res);
-				resource_list_destroy_entry(win);
-			} else {
-				pp->io = win->res;
-				pp->io->name = "I/O";
-				pp->io_size = resource_size(pp->io);
-				pp->io_bus_addr = pp->io->start - win->offset;
-			}
+			pp->io = win->res;
+			pp->io->name = "I/O";
+			pp->io_size = resource_size(pp->io);
+			pp->io_bus_addr = pp->io->start - win->offset;
+			pp->io_base = pci_pio_to_address(pp->io->start);
 			break;
 		case IORESOURCE_MEM:
 			pp->mem = win->res;
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 06/25] PCI: faraday: Use pci_parse_request_of_pci_ranges
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (4 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 05/25] PCI: dwc: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-18 12:57   ` Andrew Murray
  2019-10-16 20:06 ` [PATCH v2 07/25] PCI: iproc: Use pci_parse_request_of_pci_ranges() Rob Herring
                   ` (18 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the Faraday host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pci-ftpci100.c | 51 ++++++---------------------
 1 file changed, 11 insertions(+), 40 deletions(-)

diff --git a/drivers/pci/controller/pci-ftpci100.c b/drivers/pci/controller/pci-ftpci100.c
index bf5ece5d9291..12bc7daef5b5 100644
--- a/drivers/pci/controller/pci-ftpci100.c
+++ b/drivers/pci/controller/pci-ftpci100.c
@@ -430,10 +430,8 @@ static int faraday_pci_probe(struct platform_device *pdev)
 	const struct faraday_pci_variant *variant =
 		of_device_get_match_data(dev);
 	struct resource *regs;
-	resource_size_t io_base;
 	struct resource_entry *win;
 	struct faraday_pci *p;
-	struct resource *mem;
 	struct resource *io;
 	struct pci_host_bridge *host;
 	struct clk *clk;
@@ -441,7 +439,6 @@ static int faraday_pci_probe(struct platform_device *pdev)
 	unsigned char cur_bus_speed = PCI_SPEED_33MHz;
 	int ret;
 	u32 val;
-	LIST_HEAD(res);

 	host = devm_pci_alloc_host_bridge(dev, sizeof(*p));
 	if (!host)
@@ -480,44 +477,20 @@ static int faraday_pci_probe(struct platform_device *pdev)
 	if (IS_ERR(p->base))
 		return PTR_ERR(p->base);

-	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
-						    &res, &io_base);
+	ret = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL);
 	if (ret)
 		return ret;

-	ret = devm_request_pci_bus_resources(dev, &res);
-	if (ret)
-		return ret;
-
-	/* Get the I/O and memory ranges from DT */
-	resource_list_for_each_entry(win, &res) {
-		switch (resource_type(win->res)) {
-		case IORESOURCE_IO:
-			io = win->res;
-			io->name = "Gemini PCI I/O";
-			if (!faraday_res_to_memcfg(io->start - win->offset,
-						   resource_size(io), &val)) {
-				/* setup I/O space size */
-				writel(val, p->base + PCI_IOSIZE);
-			} else {
-				dev_err(dev, "illegal IO mem size\n");
-				return -EINVAL;
-			}
-			ret = devm_pci_remap_iospace(dev, io, io_base);
-			if (ret) {
-				dev_warn(dev, "error %d: failed to map resource %pR\n",
-					 ret, io);
-				continue;
-			}
-			break;
-		case IORESOURCE_MEM:
-			mem = win->res;
-			mem->name = "Gemini PCI MEM";
-			break;
-		case IORESOURCE_BUS:
-			break;
-		default:
-			break;
+	win = resource_list_get_entry_of_type(&host->windows, IORESOURCE_IO);
+	if (win) {
+		io = win->res;
+		if (!faraday_res_to_memcfg(io->start - win->offset,
+					   resource_size(io), &val)) {
+			/* setup I/O space size */
+			writel(val, p->base + PCI_IOSIZE);
+		} else {
+			dev_err(dev, "illegal IO mem size\n");
+			return -EINVAL;
 		}
 	}

@@ -569,7 +542,6 @@ static int faraday_pci_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;

-	list_splice_init(&res, &host->windows);
 	ret = pci_scan_root_bus_bridge(host);
 	if (ret) {
 		dev_err(dev, "failed to scan host: %d\n", ret);
@@ -581,7 +553,6 @@ static int faraday_pci_probe(struct platform_device *pdev)

 	pci_bus_assign_resources(p->bus);
 	pci_bus_add_devices(p->bus);
-	pci_free_resource_list(&res);

 	return 0;
 }
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 07/25] PCI: iproc: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (5 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 06/25] PCI: faraday: Use pci_parse_request_of_pci_ranges Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-18 13:00   ` Andrew Murray
  2019-10-16 20:06 ` [PATCH v2 08/25] PCI: mediatek: " Rob Herring
                   ` (17 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the iProc host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list, so just use
bridge->windows directly.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Scott Branden <sbranden@broadcom.com>
Cc: bcm-kernel-feedback-list@broadcom.com
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pcie-iproc-platform.c | 8 ++------
 drivers/pci/controller/pcie-iproc.c          | 5 -----
 2 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/pci/controller/pcie-iproc-platform.c b/drivers/pci/controller/pcie-iproc-platform.c
index 9ee6200a66f4..375d815f7301 100644
--- a/drivers/pci/controller/pcie-iproc-platform.c
+++ b/drivers/pci/controller/pcie-iproc-platform.c
@@ -43,8 +43,6 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
 	struct iproc_pcie *pcie;
 	struct device_node *np = dev->of_node;
 	struct resource reg;
-	resource_size_t iobase = 0;
-	LIST_HEAD(resources);
 	struct pci_host_bridge *bridge;
 	int ret;

@@ -97,8 +95,7 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
 	if (IS_ERR(pcie->phy))
 		return PTR_ERR(pcie->phy);

-	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &resources,
-						    &iobase);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
 	if (ret) {
 		dev_err(dev, "unable to get PCI host bridge resources\n");
 		return ret;
@@ -113,10 +110,9 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
 		pcie->map_irq = of_irq_parse_and_map_pci;
 	}

-	ret = iproc_pcie_setup(pcie, &resources);
+	ret = iproc_pcie_setup(pcie, &bridge->windows);
 	if (ret) {
 		dev_err(dev, "PCIe controller setup failed\n");
-		pci_free_resource_list(&resources);
 		return ret;
 	}

diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
index 2d457bfdaf66..223335ee791a 100644
--- a/drivers/pci/controller/pcie-iproc.c
+++ b/drivers/pci/controller/pcie-iproc.c
@@ -1498,10 +1498,6 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
 		return ret;
 	}

-	ret = devm_request_pci_bus_resources(dev, res);
-	if (ret)
-		return ret;
-
 	ret = phy_init(pcie->phy);
 	if (ret) {
 		dev_err(dev, "unable to initialize PCIe PHY\n");
@@ -1543,7 +1539,6 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
 		if (iproc_pcie_msi_enable(pcie))
 			dev_info(dev, "not using iProc MSI\n");

-	list_splice_init(res, &host->windows);
 	host->busnr = 0;
 	host->dev.parent = dev;
 	host->ops = &iproc_pcie_ops;
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 08/25] PCI: mediatek: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (6 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 07/25] PCI: iproc: Use pci_parse_request_of_pci_ranges() Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 09/25] PCI: mobiveil: " Rob Herring
                   ` (16 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert Mediatek host bridge to use the common
pci_parse_request_of_pci_ranges().

Cc: Ryder Lee <ryder.lee@mediatek.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: linux-mediatek@lists.infradead.org
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- Use resource_list_get_entry_of_type
---
 drivers/pci/controller/pcie-mediatek.c | 43 ++++++++------------------
 1 file changed, 13 insertions(+), 30 deletions(-)

diff --git a/drivers/pci/controller/pcie-mediatek.c b/drivers/pci/controller/pcie-mediatek.c
index 626a7c352dfd..df19beb2b2f1 100644
--- a/drivers/pci/controller/pcie-mediatek.c
+++ b/drivers/pci/controller/pcie-mediatek.c
@@ -216,7 +216,6 @@ struct mtk_pcie {
 	void __iomem *base;
 	struct clk *free_ck;
 
-	struct resource mem;
 	struct list_head ports;
 	const struct mtk_pcie_soc *soc;
 	unsigned int busnr;
@@ -661,11 +660,19 @@ static int mtk_pcie_setup_irq(struct mtk_pcie_port *port,
 static int mtk_pcie_startup_port_v2(struct mtk_pcie_port *port)
 {
 	struct mtk_pcie *pcie = port->pcie;
-	struct resource *mem = &pcie->mem;
+	struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
+	struct resource *mem = NULL;
+	struct resource_entry *entry;
 	const struct mtk_pcie_soc *soc = port->pcie->soc;
 	u32 val;
 	int err;
 
+	entry = resource_list_get_entry_of_type(&host->windows, IORESOURCE_MEM);
+	if (entry)
+		mem = entry->res;
+	if (!mem)
+		return -EINVAL;
+
 	/* MT7622 platforms need to enable LTSSM and ASPM from PCIe subsys */
 	if (pcie->base) {
 		val = readl(pcie->base + PCIE_SYS_CFG_V2);
@@ -1023,39 +1030,15 @@ 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_entry *win, *tmp_win;
-	resource_size_t io_base;
+	struct resource *bus;
 	int err;
 
-	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
-						    windows, &io_base);
+	err = pci_parse_request_of_pci_ranges(dev, windows,
+					      &bus);
 	if (err)
 		return err;
 
-	err = devm_request_pci_bus_resources(dev, windows);
-	if (err < 0)
-		return err;
-
-	/* Get the I/O and memory ranges from DT */
-	resource_list_for_each_entry_safe(win, tmp_win, windows) {
-		switch (resource_type(win->res)) {
-		case IORESOURCE_IO:
-			err = devm_pci_remap_iospace(dev, win->res, io_base);
-			if (err) {
-				dev_warn(dev, "error %d: failed to map resource %pR\n",
-					 err, win->res);
-				resource_list_destroy_entry(win);
-			}
-			break;
-		case IORESOURCE_MEM:
-			memcpy(&pcie->mem, win->res, sizeof(*win->res));
-			pcie->mem.name = "non-prefetchable";
-			break;
-		case IORESOURCE_BUS:
-			pcie->busnr = win->res->start;
-			break;
-		}
-	}
+	pcie->busnr = bus->start;
 
 	for_each_available_child_of_node(node, child) {
 		int slot;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 09/25] PCI: mobiveil: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (7 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 08/25] PCI: mediatek: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-18 15:41   ` Andrew Murray
  2019-10-16 20:06 ` [PATCH v2 10/25] PCI: rockchip: " Rob Herring
                   ` (15 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the Mobiveil host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Karthikeyan Mitran <m.karthikeyan@mobiveil.co.in>
Cc: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pcie-mobiveil.c | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/drivers/pci/controller/pcie-mobiveil.c b/drivers/pci/controller/pcie-mobiveil.c
index a45a6447b01d..4eab8624ce4d 100644
--- a/drivers/pci/controller/pcie-mobiveil.c
+++ b/drivers/pci/controller/pcie-mobiveil.c
@@ -140,7 +140,6 @@ struct mobiveil_msi {			/* MSI information */

 struct mobiveil_pcie {
 	struct platform_device *pdev;
-	struct list_head resources;
 	void __iomem *config_axi_slave_base;	/* endpoint config base */
 	void __iomem *csr_axi_slave_base;	/* root port config base */
 	void __iomem *apb_csr_base;	/* MSI register base */
@@ -575,6 +574,7 @@ static void mobiveil_pcie_enable_msi(struct mobiveil_pcie *pcie)

 static int mobiveil_host_init(struct mobiveil_pcie *pcie)
 {
+	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
 	u32 value, pab_ctrl, type;
 	struct resource_entry *win;

@@ -631,7 +631,7 @@ static int mobiveil_host_init(struct mobiveil_pcie *pcie)
 	program_ib_windows(pcie, WIN_NUM_0, 0, 0, MEM_WINDOW_TYPE, IB_WIN_SIZE);

 	/* Get the I/O and memory ranges from DT */
-	resource_list_for_each_entry(win, &pcie->resources) {
+	resource_list_for_each_entry(win, &bridge->windows) {
 		if (resource_type(win->res) == IORESOURCE_MEM)
 			type = MEM_WINDOW_TYPE;
 		else if (resource_type(win->res) == IORESOURCE_IO)
@@ -857,7 +857,6 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
 	struct pci_bus *child;
 	struct pci_host_bridge *bridge;
 	struct device *dev = &pdev->dev;
-	resource_size_t iobase;
 	int ret;

 	/* allocate the PCIe port */
@@ -875,11 +874,8 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
 		return ret;
 	}

-	INIT_LIST_HEAD(&pcie->resources);
-
 	/* parse the host bridge base addresses from the device tree file */
-	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
-						    &pcie->resources, &iobase);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
 	if (ret) {
 		dev_err(dev, "Getting bridge resources failed\n");
 		return ret;
@@ -892,24 +888,19 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
 	ret = mobiveil_host_init(pcie);
 	if (ret) {
 		dev_err(dev, "Failed to initialize host\n");
-		goto error;
+		return ret;
 	}

 	/* initialize the IRQ domains */
 	ret = mobiveil_pcie_init_irq_domain(pcie);
 	if (ret) {
 		dev_err(dev, "Failed creating IRQ Domain\n");
-		goto error;
+		return ret;
 	}

 	irq_set_chained_handler_and_data(pcie->irq, mobiveil_pcie_isr, pcie);

-	ret = devm_request_pci_bus_resources(dev, &pcie->resources);
-	if (ret)
-		goto error;
-
 	/* Initialize bridge */
-	list_splice_init(&pcie->resources, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = pcie;
 	bridge->busnr = pcie->root_bus_nr;
@@ -920,13 +911,13 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
 	ret = mobiveil_bringup_link(pcie);
 	if (ret) {
 		dev_info(dev, "link bring-up failed\n");
-		goto error;
+		return ret;
 	}

 	/* setup the kernel resources for the newly added PCIe root bus */
 	ret = pci_scan_root_bus_bridge(bridge);
 	if (ret)
-		goto error;
+		return ret;

 	bus = bridge->bus;

@@ -936,9 +927,6 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
 	pci_bus_add_devices(bus);

 	return 0;
-error:
-	pci_free_resource_list(&pcie->resources);
-	return ret;
 }

 static const struct of_device_id mobiveil_pcie_of_match[] = {
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 10/25] PCI: rockchip: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (8 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 09/25] PCI: mobiveil: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-18 15:51   ` Andrew Murray
  2019-10-16 20:06 ` [PATCH v2 11/25] PCI: rockchip: Drop storing driver private outbound resource data Rob Herring
                   ` (14 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the Rockchip host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Heiko Stuebner <heiko@sntech.de>
Cc: linux-rockchip@lists.infradead.org
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pcie-rockchip-host.c | 36 ++++-----------------
 1 file changed, 7 insertions(+), 29 deletions(-)

diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c
index ef8e677ce9d1..8d2e6f2e141e 100644
--- a/drivers/pci/controller/pcie-rockchip-host.c
+++ b/drivers/pci/controller/pcie-rockchip-host.c
@@ -950,14 +950,10 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct pci_bus *bus, *child;
 	struct pci_host_bridge *bridge;
+	struct resource *bus_res;
 	struct resource_entry *win;
-	resource_size_t io_base;
-	struct resource	*mem;
-	struct resource	*io;
 	int err;

-	LIST_HEAD(res);
-
 	if (!dev->of_node)
 		return -ENODEV;

@@ -995,29 +991,20 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_deinit_port;

-	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
-						    &res, &io_base);
+	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, &bus_res);
 	if (err)
 		goto err_remove_irq_domain;

-	err = devm_request_pci_bus_resources(dev, &res);
-	if (err)
-		goto err_free_res;
+	rockchip->root_bus_nr = bus_res->start;

 	/* Get the I/O and memory ranges from DT */
-	resource_list_for_each_entry(win, &res) {
+	resource_list_for_each_entry(win, &bridge->windows) {
 		switch (resource_type(win->res)) {
 		case IORESOURCE_IO:
 			io = win->res;
 			io->name = "I/O";
 			rockchip->io_size = resource_size(io);
 			rockchip->io_bus_addr = io->start - win->offset;
-			err = pci_remap_iospace(io, io_base);
-			if (err) {
-				dev_warn(dev, "error %d: failed to map resource %pR\n",
-					 err, io);
-				continue;
-			}
 			rockchip->io = io;
 			break;
 		case IORESOURCE_MEM:
@@ -1026,9 +1013,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
 			rockchip->mem_size = resource_size(mem);
 			rockchip->mem_bus_addr = mem->start - win->offset;
 			break;
-		case IORESOURCE_BUS:
-			rockchip->root_bus_nr = win->res->start;
-			break;
 		default:
 			continue;
 		}
@@ -1036,15 +1020,14 @@ static int rockchip_pcie_probe(struct platform_device *pdev)

 	err = rockchip_pcie_cfg_atu(rockchip);
 	if (err)
-		goto err_unmap_iospace;
+		goto err_remove_irq_domain;

 	rockchip->msg_region = devm_ioremap(dev, rockchip->msg_bus_addr, SZ_1M);
 	if (!rockchip->msg_region) {
 		err = -ENOMEM;
-		goto err_unmap_iospace;
+		goto err_remove_irq_domain;
 	}

-	list_splice_init(&res, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = rockchip;
 	bridge->busnr = 0;
@@ -1054,7 +1037,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev)

 	err = pci_scan_root_bus_bridge(bridge);
 	if (err < 0)
-		goto err_unmap_iospace;
+		goto err_remove_irq_domain;

 	bus = bridge->bus;

@@ -1068,10 +1051,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
 	pci_bus_add_devices(bus);
 	return 0;

-err_unmap_iospace:
-	pci_unmap_iospace(rockchip->io);
-err_free_res:
-	pci_free_resource_list(&res);
 err_remove_irq_domain:
 	irq_domain_remove(rockchip->irq_domain);
 err_deinit_port:
@@ -1097,7 +1076,6 @@ static int rockchip_pcie_remove(struct platform_device *pdev)

 	pci_stop_root_bus(rockchip->root_bus);
 	pci_remove_root_bus(rockchip->root_bus);
-	pci_unmap_iospace(rockchip->io);
 	irq_domain_remove(rockchip->irq_domain);

 	rockchip_pcie_deinit_phys(rockchip);
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 11/25] PCI: rockchip: Drop storing driver private outbound resource data
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (9 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 10/25] PCI: rockchip: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-17  7:26   ` Christoph Hellwig
  2019-10-16 20:06 ` [PATCH v2 12/25] PCI: v3-semi: Use pci_parse_request_of_pci_ranges() Rob Herring
                   ` (13 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

The Rockchip host bridge driver doesn't need to store outboard resources
in its private struct as they are already stored in struct
pci_host_bridge.

Cc: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Heiko Stuebner <heiko@sntech.de>
Cc: linux-rockchip@lists.infradead.org
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pcie-rockchip-host.c | 54 +++++++++------------
 drivers/pci/controller/pcie-rockchip.h      |  5 --
 2 files changed, 23 insertions(+), 36 deletions(-)

diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c
index 8d2e6f2e141e..2255ff53e2fb 100644
--- a/drivers/pci/controller/pcie-rockchip-host.c
+++ b/drivers/pci/controller/pcie-rockchip-host.c
@@ -806,19 +806,28 @@ static int rockchip_pcie_prog_ib_atu(struct rockchip_pcie *rockchip,
 static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
 {
 	struct device *dev = rockchip->dev;
+	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rockchip);
+	struct resource_entry *entry;
+	u64 pci_addr, size;
 	int offset;
 	int err;
 	int reg_no;

 	rockchip_pcie_cfg_configuration_accesses(rockchip,
 						 AXI_WRAPPER_TYPE0_CFG);
+	entry = resource_list_get_entry_of_type(&bridge->windows, IORESOURCE_MEM);
+	if (!entry)
+		return -ENODEV;
+
+	size = resource_size(entry->res);
+	pci_addr = entry->res->start - entry->offset;
+	rockchip->msg_bus_addr = pci_addr;

-	for (reg_no = 0; reg_no < (rockchip->mem_size >> 20); reg_no++) {
+	for (reg_no = 0; reg_no < (size >> 20); reg_no++) {
 		err = rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1,
 						AXI_WRAPPER_MEM_WRITE,
 						20 - 1,
-						rockchip->mem_bus_addr +
-						(reg_no << 20),
+						pci_addr + (reg_no << 20),
 						0);
 		if (err) {
 			dev_err(dev, "program RC mem outbound ATU failed\n");
@@ -832,14 +841,20 @@ static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
 		return err;
 	}

-	offset = rockchip->mem_size >> 20;
-	for (reg_no = 0; reg_no < (rockchip->io_size >> 20); reg_no++) {
+	entry = resource_list_get_entry_of_type(&bridge->windows, IORESOURCE_IO);
+	if (!entry)
+		return -ENODEV;
+
+	size = resource_size(entry->res);
+	pci_addr = entry->res->start - entry->offset;
+
+	offset = size >> 20;
+	for (reg_no = 0; reg_no < (size >> 20); reg_no++) {
 		err = rockchip_pcie_prog_ob_atu(rockchip,
 						reg_no + 1 + offset,
 						AXI_WRAPPER_IO_WRITE,
 						20 - 1,
-						rockchip->io_bus_addr +
-						(reg_no << 20),
+						pci_addr + (reg_no << 20),
 						0);
 		if (err) {
 			dev_err(dev, "program RC io outbound ATU failed\n");
@@ -852,8 +867,7 @@ static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
 				  AXI_WRAPPER_NOR_MSG,
 				  20 - 1, 0, 0);

-	rockchip->msg_bus_addr = rockchip->mem_bus_addr +
-					((reg_no + offset) << 20);
+	rockchip->msg_bus_addr += ((reg_no + offset) << 20);
 	return err;
 }

@@ -951,7 +965,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
 	struct pci_bus *bus, *child;
 	struct pci_host_bridge *bridge;
 	struct resource *bus_res;
-	struct resource_entry *win;
 	int err;

 	if (!dev->of_node)
@@ -997,27 +1010,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)

 	rockchip->root_bus_nr = bus_res->start;

-	/* Get the I/O and memory ranges from DT */
-	resource_list_for_each_entry(win, &bridge->windows) {
-		switch (resource_type(win->res)) {
-		case IORESOURCE_IO:
-			io = win->res;
-			io->name = "I/O";
-			rockchip->io_size = resource_size(io);
-			rockchip->io_bus_addr = io->start - win->offset;
-			rockchip->io = io;
-			break;
-		case IORESOURCE_MEM:
-			mem = win->res;
-			mem->name = "MEM";
-			rockchip->mem_size = resource_size(mem);
-			rockchip->mem_bus_addr = mem->start - win->offset;
-			break;
-		default:
-			continue;
-		}
-	}
-
 	err = rockchip_pcie_cfg_atu(rockchip);
 	if (err)
 		goto err_remove_irq_domain;
diff --git a/drivers/pci/controller/pcie-rockchip.h b/drivers/pci/controller/pcie-rockchip.h
index 8e87a059ce73..bef42a803b56 100644
--- a/drivers/pci/controller/pcie-rockchip.h
+++ b/drivers/pci/controller/pcie-rockchip.h
@@ -304,13 +304,8 @@ struct rockchip_pcie {
 	struct	irq_domain *irq_domain;
 	int     offset;
 	struct pci_bus *root_bus;
-	struct resource *io;
-	phys_addr_t io_bus_addr;
-	u32     io_size;
 	void    __iomem *msg_region;
-	u32     mem_size;
 	phys_addr_t msg_bus_addr;
-	phys_addr_t mem_bus_addr;
 	bool is_rc;
 	struct resource *mem_res;
 };
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 12/25] PCI: v3-semi: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (10 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 11/25] PCI: rockchip: Drop storing driver private outbound resource data Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-21  0:38   ` Linus Walleij
  2019-10-16 20:06 ` [PATCH v2 13/25] PCI: xgene: " Rob Herring
                   ` (12 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert V3 host bridge to use the common
pci_parse_request_of_pci_ranges().

Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pci-v3-semi.c | 35 +++++-----------------------
 1 file changed, 6 insertions(+), 29 deletions(-)

diff --git a/drivers/pci/controller/pci-v3-semi.c b/drivers/pci/controller/pci-v3-semi.c
index d219404bad92..96677520f6c1 100644
--- a/drivers/pci/controller/pci-v3-semi.c
+++ b/drivers/pci/controller/pci-v3-semi.c
@@ -241,10 +241,8 @@ struct v3_pci {
 	void __iomem *config_base;
 	struct pci_bus *bus;
 	u32 config_mem;
-	u32 io_mem;
 	u32 non_pre_mem;
 	u32 pre_mem;
-	phys_addr_t io_bus_addr;
 	phys_addr_t non_pre_bus_addr;
 	phys_addr_t pre_bus_addr;
 	struct regmap *map;
@@ -520,35 +518,22 @@ static int v3_integrator_init(struct v3_pci *v3)
 }

 static int v3_pci_setup_resource(struct v3_pci *v3,
-				 resource_size_t io_base,
 				 struct pci_host_bridge *host,
 				 struct resource_entry *win)
 {
 	struct device *dev = v3->dev;
 	struct resource *mem;
 	struct resource *io;
-	int ret;

 	switch (resource_type(win->res)) {
 	case IORESOURCE_IO:
 		io = win->res;
-		io->name = "V3 PCI I/O";
-		v3->io_mem = io_base;
-		v3->io_bus_addr = io->start - win->offset;
-		dev_dbg(dev, "I/O window %pR, bus addr %pap\n",
-			io, &v3->io_bus_addr);
-		ret = devm_pci_remap_iospace(dev, io, io_base);
-		if (ret) {
-			dev_warn(dev,
-				 "error %d: failed to map resource %pR\n",
-				 ret, io);
-			return ret;
-		}
+
 		/* Setup window 2 - PCI I/O */
-		writel(v3_addr_to_lb_base2(v3->io_mem) |
+		writel(v3_addr_to_lb_base2(pci_pio_to_address(io->start)) |
 		       V3_LB_BASE2_ENABLE,
 		       v3->base + V3_LB_BASE2);
-		writew(v3_addr_to_lb_map2(v3->io_bus_addr),
+		writew(v3_addr_to_lb_map2(io->start - win->offset),
 		       v3->base + V3_LB_MAP2);
 		break;
 	case IORESOURCE_MEM:
@@ -732,7 +717,6 @@ static int v3_pci_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct device_node *np = dev->of_node;
-	resource_size_t io_base;
 	struct resource *regs;
 	struct resource_entry *win;
 	struct v3_pci *v3;
@@ -741,7 +725,6 @@ static int v3_pci_probe(struct platform_device *pdev)
 	u16 val;
 	int irq;
 	int ret;
-	LIST_HEAD(res);

 	host = pci_alloc_host_bridge(sizeof(*v3));
 	if (!host)
@@ -793,12 +776,7 @@ static int v3_pci_probe(struct platform_device *pdev)
 	if (IS_ERR(v3->config_base))
 		return PTR_ERR(v3->config_base);

-	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &res,
-						    &io_base);
-	if (ret)
-		return ret;
-
-	ret = devm_request_pci_bus_resources(dev, &res);
+	ret = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL);
 	if (ret)
 		return ret;

@@ -852,8 +830,8 @@ static int v3_pci_probe(struct platform_device *pdev)
 	writew(val, v3->base + V3_PCI_CMD);

 	/* Get the I/O and memory ranges from DT */
-	resource_list_for_each_entry(win, &res) {
-		ret = v3_pci_setup_resource(v3, io_base, host, win);
+	resource_list_for_each_entry(win, &host->windows) {
+		ret = v3_pci_setup_resource(v3, host, win);
 		if (ret) {
 			dev_err(dev, "error setting up resources\n");
 			return ret;
@@ -931,7 +909,6 @@ static int v3_pci_probe(struct platform_device *pdev)
 	val |= V3_SYSTEM_M_LOCK;
 	writew(val, v3->base + V3_SYSTEM);

-	list_splice_init(&res, &host->windows);
 	ret = pci_scan_root_bus_bridge(host);
 	if (ret) {
 		dev_err(dev, "failed to register host: %d\n", ret);
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 13/25] PCI: xgene: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (11 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 12/25] PCI: v3-semi: Use pci_parse_request_of_pci_ranges() Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 14/25] PCI: xilinx: " Rob Herring
                   ` (11 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the xgene host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Toan Le <toan@os.amperecomputing.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pci-xgene.c | 39 +++++++++---------------------
 1 file changed, 11 insertions(+), 28 deletions(-)

diff --git a/drivers/pci/controller/pci-xgene.c b/drivers/pci/controller/pci-xgene.c
index ffda3e8b4742..7d0f0395a479 100644
--- a/drivers/pci/controller/pci-xgene.c
+++ b/drivers/pci/controller/pci-xgene.c
@@ -405,15 +405,13 @@ static void xgene_pcie_setup_cfg_reg(struct xgene_pcie_port *port)
 	xgene_pcie_writel(port, CFGCTL, EN_REG);
 }

-static int xgene_pcie_map_ranges(struct xgene_pcie_port *port,
-				 struct list_head *res,
-				 resource_size_t io_base)
+static int xgene_pcie_map_ranges(struct xgene_pcie_port *port)
 {
+	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port);
 	struct resource_entry *window;
 	struct device *dev = port->dev;
-	int ret;

-	resource_list_for_each_entry(window, res) {
+	resource_list_for_each_entry(window, &bridge->windows) {
 		struct resource *res = window->res;
 		u64 restype = resource_type(res);

@@ -421,11 +419,9 @@ static int xgene_pcie_map_ranges(struct xgene_pcie_port *port,

 		switch (restype) {
 		case IORESOURCE_IO:
-			xgene_pcie_setup_ob_reg(port, res, OMR3BARL, io_base,
+			xgene_pcie_setup_ob_reg(port, res, OMR3BARL,
+						pci_pio_to_address(res->start),
 						res->start - window->offset);
-			ret = devm_pci_remap_iospace(dev, res, io_base);
-			if (ret < 0)
-				return ret;
 			break;
 		case IORESOURCE_MEM:
 			if (res->flags & IORESOURCE_PREFETCH)
@@ -567,8 +563,7 @@ static void xgene_pcie_clear_config(struct xgene_pcie_port *port)
 		xgene_pcie_writel(port, i, 0);
 }

-static int xgene_pcie_setup(struct xgene_pcie_port *port, struct list_head *res,
-			    resource_size_t io_base)
+static int xgene_pcie_setup(struct xgene_pcie_port *port)
 {
 	struct device *dev = port->dev;
 	u32 val, lanes = 0, speed = 0;
@@ -580,7 +575,7 @@ static int xgene_pcie_setup(struct xgene_pcie_port *port, struct list_head *res,
 	val = (XGENE_PCIE_DEVICEID << 16) | XGENE_PCIE_VENDORID;
 	xgene_pcie_writel(port, BRIDGE_CFG_0, val);

-	ret = xgene_pcie_map_ranges(port, res, io_base);
+	ret = xgene_pcie_map_ranges(port);
 	if (ret)
 		return ret;

@@ -607,11 +602,9 @@ static int xgene_pcie_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct device_node *dn = dev->of_node;
 	struct xgene_pcie_port *port;
-	resource_size_t iobase = 0;
 	struct pci_bus *bus, *child;
 	struct pci_host_bridge *bridge;
 	int ret;
-	LIST_HEAD(res);

 	bridge = devm_pci_alloc_host_bridge(dev, sizeof(*port));
 	if (!bridge)
@@ -634,20 +627,14 @@ static int xgene_pcie_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;

-	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &res,
-						    &iobase);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
 	if (ret)
 		return ret;

-	ret = devm_request_pci_bus_resources(dev, &res);
-	if (ret)
-		goto error;
-
-	ret = xgene_pcie_setup(port, &res, iobase);
+	ret = xgene_pcie_setup(port);
 	if (ret)
-		goto error;
+		return ret;

-	list_splice_init(&res, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = port;
 	bridge->busnr = 0;
@@ -657,7 +644,7 @@ static int xgene_pcie_probe(struct platform_device *pdev)

 	ret = pci_scan_root_bus_bridge(bridge);
 	if (ret < 0)
-		goto error;
+		return ret;

 	bus = bridge->bus;

@@ -666,10 +653,6 @@ static int xgene_pcie_probe(struct platform_device *pdev)
 		pcie_bus_configure_settings(child);
 	pci_bus_add_devices(bus);
 	return 0;
-
-error:
-	pci_free_resource_list(&res);
-	return ret;
 }

 static const struct of_device_id xgene_pcie_match_table[] = {
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 14/25] PCI: xilinx: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (12 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 13/25] PCI: xgene: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 15/25] PCI: xilinx-nwl: " Rob Herring
                   ` (10 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the Xilinx host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pcie-xilinx.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/drivers/pci/controller/pcie-xilinx.c b/drivers/pci/controller/pcie-xilinx.c
index 5bf3af3b28e6..257702288787 100644
--- a/drivers/pci/controller/pcie-xilinx.c
+++ b/drivers/pci/controller/pcie-xilinx.c
@@ -619,8 +619,6 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
 	struct pci_bus *bus, *child;
 	struct pci_host_bridge *bridge;
 	int err;
-	resource_size_t iobase = 0;
-	LIST_HEAD(res);

 	if (!dev->of_node)
 		return -ENODEV;
@@ -647,19 +645,12 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
 		return err;
 	}

-	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &res,
-						    &iobase);
+	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
 	if (err) {
 		dev_err(dev, "Getting bridge resources failed\n");
 		return err;
 	}

-	err = devm_request_pci_bus_resources(dev, &res);
-	if (err)
-		goto error;
-
-
-	list_splice_init(&res, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = port;
 	bridge->busnr = 0;
@@ -673,7 +664,7 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
 #endif
 	err = pci_scan_root_bus_bridge(bridge);
 	if (err < 0)
-		goto error;
+		return err;

 	bus = bridge->bus;

@@ -682,10 +673,6 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
 		pcie_bus_configure_settings(child);
 	pci_bus_add_devices(bus);
 	return 0;
-
-error:
-	pci_free_resource_list(&res);
-	return err;
 }

 static const struct of_device_id xilinx_pcie_of_match[] = {
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 15/25] PCI: xilinx-nwl: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (13 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 14/25] PCI: xilinx: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 16/25] PCI: versatile: " Rob Herring
                   ` (9 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert the xilinx-nwl host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch

 drivers/pci/controller/pcie-xilinx-nwl.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/pci/controller/pcie-xilinx-nwl.c b/drivers/pci/controller/pcie-xilinx-nwl.c
index 45c0f344ccd1..e135a4b60489 100644
--- a/drivers/pci/controller/pcie-xilinx-nwl.c
+++ b/drivers/pci/controller/pcie-xilinx-nwl.c
@@ -821,8 +821,6 @@ static int nwl_pcie_probe(struct platform_device *pdev)
 	struct pci_bus *child;
 	struct pci_host_bridge *bridge;
 	int err;
-	resource_size_t iobase = 0;
-	LIST_HEAD(res);

 	bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
 	if (!bridge)
@@ -845,24 +843,18 @@ static int nwl_pcie_probe(struct platform_device *pdev)
 		return err;
 	}

-	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &res,
-						    &iobase);
+	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
 	if (err) {
 		dev_err(dev, "Getting bridge resources failed\n");
 		return err;
 	}

-	err = devm_request_pci_bus_resources(dev, &res);
-	if (err)
-		goto error;
-
 	err = nwl_pcie_init_irq_domain(pcie);
 	if (err) {
 		dev_err(dev, "Failed creating IRQ Domain\n");
-		goto error;
+		return err;
 	}

-	list_splice_init(&res, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = pcie;
 	bridge->busnr = pcie->root_busno;
@@ -874,13 +866,13 @@ static int nwl_pcie_probe(struct platform_device *pdev)
 		err = nwl_pcie_enable_msi(pcie);
 		if (err < 0) {
 			dev_err(dev, "failed to enable MSI support: %d\n", err);
-			goto error;
+			return err;
 		}
 	}

 	err = pci_scan_root_bus_bridge(bridge);
 	if (err)
-		goto error;
+		return err;

 	bus = bridge->bus;

@@ -889,10 +881,6 @@ static int nwl_pcie_probe(struct platform_device *pdev)
 		pcie_bus_configure_settings(child);
 	pci_bus_add_devices(bus);
 	return 0;
-
-error:
-	pci_free_resource_list(&res);
-	return err;
 }

 static struct platform_driver nwl_pcie_driver = {
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 16/25] PCI: versatile: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (14 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 15/25] PCI: xilinx-nwl: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-21  0:39   ` Linus Walleij
  2019-10-16 20:06 ` [PATCH v2 17/25] PCI: versatile: Remove usage of PHYS_OFFSET Rob Herring
                   ` (8 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Convert ARM Versatile host bridge to use the common
pci_parse_request_of_pci_ranges().

There's no need to assign the resources to a temporary list first. Just
use bridge->windows directly and remove all the temporary list handling.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- Fix 'mem' initial value to 1
- Remove temporary resource list
---
 drivers/pci/controller/pci-versatile.c | 64 +++++---------------------
 1 file changed, 11 insertions(+), 53 deletions(-)

diff --git a/drivers/pci/controller/pci-versatile.c b/drivers/pci/controller/pci-versatile.c
index f59ad2728c0b..18697f2ea345 100644
--- a/drivers/pci/controller/pci-versatile.c
+++ b/drivers/pci/controller/pci-versatile.c
@@ -62,65 +62,16 @@ static struct pci_ops pci_versatile_ops = {
 	.write	= pci_generic_config_write,
 };
 
-static int versatile_pci_parse_request_of_pci_ranges(struct device *dev,
-						     struct list_head *res)
-{
-	int err, mem = 1, res_valid = 0;
-	resource_size_t iobase;
-	struct resource_entry *win, *tmp;
-
-	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, res, &iobase);
-	if (err)
-		return err;
-
-	err = devm_request_pci_bus_resources(dev, res);
-	if (err)
-		goto out_release_res;
-
-	resource_list_for_each_entry_safe(win, tmp, res) {
-		struct resource *res = win->res;
-
-		switch (resource_type(res)) {
-		case IORESOURCE_IO:
-			err = devm_pci_remap_iospace(dev, res, iobase);
-			if (err) {
-				dev_warn(dev, "error %d: failed to map resource %pR\n",
-					 err, res);
-				resource_list_destroy_entry(win);
-			}
-			break;
-		case IORESOURCE_MEM:
-			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
-
-			writel(res->start >> 28, PCI_IMAP(mem));
-			writel(PHYS_OFFSET >> 28, PCI_SMAP(mem));
-			mem++;
-
-			break;
-		}
-	}
-
-	if (res_valid)
-		return 0;
-
-	dev_err(dev, "non-prefetchable memory resource required\n");
-	err = -EINVAL;
-
-out_release_res:
-	pci_free_resource_list(res);
-	return err;
-}
-
 static int versatile_pci_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct resource *res;
-	int ret, i, myslot = -1;
+	struct resource_entry *entry;
+	int ret, i, myslot = -1, mem = 1;
 	u32 val;
 	void __iomem *local_pci_cfg_base;
 	struct pci_bus *bus, *child;
 	struct pci_host_bridge *bridge;
-	LIST_HEAD(pci_res);
 
 	bridge = devm_pci_alloc_host_bridge(dev, 0);
 	if (!bridge)
@@ -141,10 +92,18 @@ static int versatile_pci_probe(struct platform_device *pdev)
 	if (IS_ERR(versatile_cfg_base[1]))
 		return PTR_ERR(versatile_cfg_base[1]);
 
-	ret = versatile_pci_parse_request_of_pci_ranges(dev, &pci_res);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
 	if (ret)
 		return ret;
 
+	resource_list_for_each_entry(entry, &bridge->windows) {
+		if (resource_type(entry->res) == IORESOURCE_MEM) {
+			writel(entry->res->start >> 28, PCI_IMAP(mem));
+			writel(PHYS_OFFSET >> 28, PCI_SMAP(mem));
+			mem++;
+		}
+	}
+
 	/*
 	 * We need to discover the PCI core first to configure itself
 	 * before the main PCI probing is performed
@@ -197,7 +156,6 @@ static int versatile_pci_probe(struct platform_device *pdev)
 	pci_add_flags(PCI_ENABLE_PROC_DOMAINS);
 	pci_add_flags(PCI_REASSIGN_ALL_BUS);
 
-	list_splice_init(&pci_res, &bridge->windows);
 	bridge->dev.parent = dev;
 	bridge->sysdata = NULL;
 	bridge->busnr = 0;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 17/25] PCI: versatile: Remove usage of PHYS_OFFSET
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (15 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 16/25] PCI: versatile: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-21  0:40   ` Linus Walleij
  2019-10-16 20:06 ` [PATCH v2 18/25] PCI: versatile: Enable COMPILE_TEST Rob Herring
                   ` (7 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

PHYS_OFFSET is not universally defined on all arches and using it prevents
enabling COMPILE_TEST. PAGE_OFFSET and __pa() are always available, so use
them to get the physical start of memory address.

This should have probably used 'dma-ranges' to get the address, but we
don't want to force a DT update to do that. At least in QEMU, the SMAP
registers have no effect (or perhaps the only value that is handled is 0).

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Andrew Murray <andrew.murray@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
- New patch to fix build failure on some arches.

 drivers/pci/controller/pci-versatile.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/controller/pci-versatile.c b/drivers/pci/controller/pci-versatile.c
index 18697f2ea345..eae1b859990b 100644
--- a/drivers/pci/controller/pci-versatile.c
+++ b/drivers/pci/controller/pci-versatile.c
@@ -99,7 +99,7 @@ static int versatile_pci_probe(struct platform_device *pdev)
 	resource_list_for_each_entry(entry, &bridge->windows) {
 		if (resource_type(entry->res) == IORESOURCE_MEM) {
 			writel(entry->res->start >> 28, PCI_IMAP(mem));
-			writel(PHYS_OFFSET >> 28, PCI_SMAP(mem));
+			writel(__pa(PAGE_OFFSET) >> 28, PCI_SMAP(mem));
 			mem++;
 		}
 	}
@@ -136,9 +136,9 @@ static int versatile_pci_probe(struct platform_device *pdev)
 	/*
 	 * Configure the PCI inbound memory windows to be 1:1 mapped to SDRAM
 	 */
-	writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_0);
-	writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_1);
-	writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_2);
+	writel(__pa(PAGE_OFFSET), local_pci_cfg_base + PCI_BASE_ADDRESS_0);
+	writel(__pa(PAGE_OFFSET), local_pci_cfg_base + PCI_BASE_ADDRESS_1);
+	writel(__pa(PAGE_OFFSET), local_pci_cfg_base + PCI_BASE_ADDRESS_2);

 	/*
 	 * For many years the kernel and QEMU were symbiotically buggy
--
2.20.1

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 18/25] PCI: versatile: Enable COMPILE_TEST
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (16 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 17/25] PCI: versatile: Remove usage of PHYS_OFFSET Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-21  0:41   ` Linus Walleij
  2019-10-16 20:06 ` [PATCH v2 19/25] PCI: of: Add inbound resource parsing to helpers Rob Herring
                   ` (6 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Since commit a574795bc383 ("PCI: generic,versatile: Remove unused
pci_sys_data structures") the build dependency on ARM is gone, so let's
enable COMPILE_TEST for versatile.

Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
 drivers/pci/controller/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
index 70e078238899..f5de9119e8d3 100644
--- a/drivers/pci/controller/Kconfig
+++ b/drivers/pci/controller/Kconfig
@@ -135,7 +135,7 @@ config PCI_V3_SEMI
 
 config PCI_VERSATILE
 	bool "ARM Versatile PB PCI controller"
-	depends on ARCH_VERSATILE
+	depends on ARCH_VERSATILE || COMPILE_TEST
 
 config PCIE_IPROC
 	tristate
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 19/25] PCI: of: Add inbound resource parsing to helpers
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (17 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 18/25] PCI: versatile: Enable COMPILE_TEST Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 20/25] PCI: ftpci100: Use inbound resources for setup Rob Herring
                   ` (5 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Extend devm_of_pci_get_host_bridge_resources() and
pci_parse_request_of_pci_ranges() helpers to also parse the inbound
addresses from DT 'dma-ranges' and populate a resource list with the
translated addresses. This will help ensure 'dma-ranges' is always
parsed in a consistent way.

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: Linus Walleij <linus.walleij@linaro.org>
Cc: Toan Le <toan@os.amperecomputing.com>
Cc: Ley Foon Tan <lftan@altera.com>
Cc: Tom Joseph <tjoseph@cadence.com>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Scott Branden <sbranden@broadcom.com>
Cc: bcm-kernel-feedback-list@broadcom.com
Cc: Ryder Lee <ryder.lee@mediatek.com>
Cc: Karthikeyan Mitran <m.karthikeyan@mobiveil.co.in>
Cc: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
Cc: Simon Horman <horms@verge.net.au>
Cc: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Heiko Stuebner <heiko@sntech.de>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: rfi@lists.rocketboards.org
Cc: linux-mediatek@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-rockchip@lists.infradead.org
Tested-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> # for AArdvark
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
 - Fix crash in INIT_LIST_HEAD when ib_resources is NULL
---
 .../pci/controller/dwc/pcie-designware-host.c |  3 +-
 drivers/pci/controller/pci-aardvark.c         |  2 +-
 drivers/pci/controller/pci-ftpci100.c         |  3 +-
 drivers/pci/controller/pci-host-common.c      |  2 +-
 drivers/pci/controller/pci-v3-semi.c          |  3 +-
 drivers/pci/controller/pci-versatile.c        |  2 +-
 drivers/pci/controller/pci-xgene.c            |  3 +-
 drivers/pci/controller/pcie-altera.c          |  2 +-
 drivers/pci/controller/pcie-cadence-host.c    |  2 +-
 drivers/pci/controller/pcie-iproc-platform.c  |  3 +-
 drivers/pci/controller/pcie-mediatek.c        |  2 +-
 drivers/pci/controller/pcie-mobiveil.c        |  3 +-
 drivers/pci/controller/pcie-rcar.c            |  3 +-
 drivers/pci/controller/pcie-rockchip-host.c   |  3 +-
 drivers/pci/controller/pcie-xilinx-nwl.c      |  3 +-
 drivers/pci/controller/pcie-xilinx.c          |  3 +-
 drivers/pci/of.c                              | 45 ++++++++++++++++++-
 drivers/pci/pci.h                             |  8 +++-
 include/linux/pci.h                           |  2 +
 19 files changed, 77 insertions(+), 20 deletions(-)

diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
index aeec8b65eb97..f7b1d80c4a0a 100644
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
@@ -342,7 +342,8 @@ int dw_pcie_host_init(struct pcie_port *pp)
 	if (!bridge)
 		return -ENOMEM;
 
-	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bridge->dma_ranges, NULL);
 	if (ret)
 		return ret;
 
diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
index 9cbeba507f0c..b34eaa2cd762 100644
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
@@ -939,7 +939,7 @@ static int advk_pcie_probe(struct platform_device *pdev)
 	}
 
 	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
-					      &bus);
+					      &bridge->dma_ranges, &bus);
 	if (ret) {
 		dev_err(dev, "Failed to parse resources\n");
 		return ret;
diff --git a/drivers/pci/controller/pci-ftpci100.c b/drivers/pci/controller/pci-ftpci100.c
index 12bc7daef5b5..5824913e311b 100644
--- a/drivers/pci/controller/pci-ftpci100.c
+++ b/drivers/pci/controller/pci-ftpci100.c
@@ -477,7 +477,8 @@ static int faraday_pci_probe(struct platform_device *pdev)
 	if (IS_ERR(p->base))
 		return PTR_ERR(p->base);
 
-	ret = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL);
+	ret = pci_parse_request_of_pci_ranges(dev, &host->windows,
+					      &host->dma_ranges, NULL);
 	if (ret)
 		return ret;
 
diff --git a/drivers/pci/controller/pci-host-common.c b/drivers/pci/controller/pci-host-common.c
index c8cb9c5188a4..250a3fc80ec6 100644
--- a/drivers/pci/controller/pci-host-common.c
+++ b/drivers/pci/controller/pci-host-common.c
@@ -27,7 +27,7 @@ static struct pci_config_window *gen_pci_init(struct device *dev,
 	struct pci_config_window *cfg;
 
 	/* Parse our PCI ranges and request their resources */
-	err = pci_parse_request_of_pci_ranges(dev, resources, &bus_range);
+	err = pci_parse_request_of_pci_ranges(dev, resources, NULL, &bus_range);
 	if (err)
 		return ERR_PTR(err);
 
diff --git a/drivers/pci/controller/pci-v3-semi.c b/drivers/pci/controller/pci-v3-semi.c
index 96677520f6c1..2209c7671115 100644
--- a/drivers/pci/controller/pci-v3-semi.c
+++ b/drivers/pci/controller/pci-v3-semi.c
@@ -776,7 +776,8 @@ static int v3_pci_probe(struct platform_device *pdev)
 	if (IS_ERR(v3->config_base))
 		return PTR_ERR(v3->config_base);
 
-	ret = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL);
+	ret = pci_parse_request_of_pci_ranges(dev, &host->windows,
+					      &host->dma_ranges, NULL);
 	if (ret)
 		return ret;
 
diff --git a/drivers/pci/controller/pci-versatile.c b/drivers/pci/controller/pci-versatile.c
index eae1b859990b..8f81d2c9296a 100644
--- a/drivers/pci/controller/pci-versatile.c
+++ b/drivers/pci/controller/pci-versatile.c
@@ -92,7 +92,7 @@ static int versatile_pci_probe(struct platform_device *pdev)
 	if (IS_ERR(versatile_cfg_base[1]))
 		return PTR_ERR(versatile_cfg_base[1]);
 
-	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL, NULL);
 	if (ret)
 		return ret;
 
diff --git a/drivers/pci/controller/pci-xgene.c b/drivers/pci/controller/pci-xgene.c
index 7d0f0395a479..9408269d943d 100644
--- a/drivers/pci/controller/pci-xgene.c
+++ b/drivers/pci/controller/pci-xgene.c
@@ -627,7 +627,8 @@ static int xgene_pcie_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bridge->dma_ranges, NULL);
 	if (ret)
 		return ret;
 
diff --git a/drivers/pci/controller/pcie-altera.c b/drivers/pci/controller/pcie-altera.c
index ba025efeae28..b447c3e4abad 100644
--- a/drivers/pci/controller/pcie-altera.c
+++ b/drivers/pci/controller/pcie-altera.c
@@ -800,7 +800,7 @@ static int altera_pcie_probe(struct platform_device *pdev)
 	}
 
 	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
-					      NULL);
+					      &bridge->dma_ranges, NULL);
 	if (ret) {
 		dev_err(dev, "Failed add resources\n");
 		return ret;
diff --git a/drivers/pci/controller/pcie-cadence-host.c b/drivers/pci/controller/pcie-cadence-host.c
index 97e251090b4f..a8f7a6284c3e 100644
--- a/drivers/pci/controller/pcie-cadence-host.c
+++ b/drivers/pci/controller/pcie-cadence-host.c
@@ -211,7 +211,7 @@ static int cdns_pcie_host_init(struct device *dev,
 	int err;
 
 	/* Parse our PCI ranges and request their resources */
-	err = pci_parse_request_of_pci_ranges(dev, resources, &bus_range);
+	err = pci_parse_request_of_pci_ranges(dev, resources, NULL, &bus_range);
 	if (err)
 		return err;
 
diff --git a/drivers/pci/controller/pcie-iproc-platform.c b/drivers/pci/controller/pcie-iproc-platform.c
index 375d815f7301..ff0a81a632a1 100644
--- a/drivers/pci/controller/pcie-iproc-platform.c
+++ b/drivers/pci/controller/pcie-iproc-platform.c
@@ -95,7 +95,8 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
 	if (IS_ERR(pcie->phy))
 		return PTR_ERR(pcie->phy);
 
-	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bridge->dma_ranges, NULL);
 	if (ret) {
 		dev_err(dev, "unable to get PCI host bridge resources\n");
 		return ret;
diff --git a/drivers/pci/controller/pcie-mediatek.c b/drivers/pci/controller/pcie-mediatek.c
index df19beb2b2f1..d334925f19fd 100644
--- a/drivers/pci/controller/pcie-mediatek.c
+++ b/drivers/pci/controller/pcie-mediatek.c
@@ -1034,7 +1034,7 @@ static int mtk_pcie_setup(struct mtk_pcie *pcie)
 	int err;
 
 	err = pci_parse_request_of_pci_ranges(dev, windows,
-					      &bus);
+					      &host->dma_ranges, &bus);
 	if (err)
 		return err;
 
diff --git a/drivers/pci/controller/pcie-mobiveil.c b/drivers/pci/controller/pcie-mobiveil.c
index 4eab8624ce4d..257ba49c177c 100644
--- a/drivers/pci/controller/pcie-mobiveil.c
+++ b/drivers/pci/controller/pcie-mobiveil.c
@@ -875,7 +875,8 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
 	}
 
 	/* parse the host bridge base addresses from the device tree file */
-	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
+	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bridge->dma_ranges, NULL);
 	if (ret) {
 		dev_err(dev, "Getting bridge resources failed\n");
 		return ret;
diff --git a/drivers/pci/controller/pcie-rcar.c b/drivers/pci/controller/pcie-rcar.c
index f6a669a9af41..b8d6e86a5539 100644
--- a/drivers/pci/controller/pcie-rcar.c
+++ b/drivers/pci/controller/pcie-rcar.c
@@ -1138,7 +1138,8 @@ static int rcar_pcie_probe(struct platform_device *pdev)
 	pcie->dev = dev;
 	platform_set_drvdata(pdev, pcie);
 
-	err = pci_parse_request_of_pci_ranges(dev, &pcie->resources, NULL);
+	err = pci_parse_request_of_pci_ranges(dev, &pcie->resources,
+					      &bridge->dma_ranges, NULL);
 	if (err)
 		goto err_free_bridge;
 
diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c
index 2255ff53e2fb..b538b9ad8917 100644
--- a/drivers/pci/controller/pcie-rockchip-host.c
+++ b/drivers/pci/controller/pcie-rockchip-host.c
@@ -1004,7 +1004,8 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_deinit_port;
 
-	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, &bus_res);
+	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bridge->dma_ranges, &bus_res);
 	if (err)
 		goto err_remove_irq_domain;
 
diff --git a/drivers/pci/controller/pcie-xilinx-nwl.c b/drivers/pci/controller/pcie-xilinx-nwl.c
index e135a4b60489..9bd1427f2fd6 100644
--- a/drivers/pci/controller/pcie-xilinx-nwl.c
+++ b/drivers/pci/controller/pcie-xilinx-nwl.c
@@ -843,7 +843,8 @@ static int nwl_pcie_probe(struct platform_device *pdev)
 		return err;
 	}
 
-	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
+	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bridge->dma_ranges, NULL);
 	if (err) {
 		dev_err(dev, "Getting bridge resources failed\n");
 		return err;
diff --git a/drivers/pci/controller/pcie-xilinx.c b/drivers/pci/controller/pcie-xilinx.c
index 257702288787..98e55297815b 100644
--- a/drivers/pci/controller/pcie-xilinx.c
+++ b/drivers/pci/controller/pcie-xilinx.c
@@ -645,7 +645,8 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
 		return err;
 	}
 
-	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
+	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
+					      &bridge->dma_ranges, NULL);
 	if (err) {
 		dev_err(dev, "Getting bridge resources failed\n");
 		return err;
diff --git a/drivers/pci/of.c b/drivers/pci/of.c
index f3da49a31db4..0b1e4623dfcf 100644
--- a/drivers/pci/of.c
+++ b/drivers/pci/of.c
@@ -257,7 +257,9 @@ EXPORT_SYMBOL_GPL(of_pci_check_probe_only);
  */
 int devm_of_pci_get_host_bridge_resources(struct device *dev,
 			unsigned char busno, unsigned char bus_max,
-			struct list_head *resources, resource_size_t *io_base)
+			struct list_head *resources,
+			struct list_head *ib_resources,
+			resource_size_t *io_base)
 {
 	struct device_node *dev_node = dev->of_node;
 	struct resource *res, tmp_res;
@@ -340,6 +342,42 @@ int devm_of_pci_get_host_bridge_resources(struct device *dev,
 		pci_add_resource_offset(resources, res,	res->start - range.pci_addr);
 	}
 
+	/* Check for dma-ranges property */
+	if (!ib_resources)
+		return 0;
+	err = of_pci_dma_range_parser_init(&parser, dev_node);
+	if (err)
+		return 0;
+
+	dev_dbg(dev, "Parsing dma-ranges property...\n");
+	for_each_of_pci_range(&parser, &range) {
+		/*
+		 * If we failed translation or got a zero-sized region
+		 * then skip this range
+		 */
+		if (((range.flags & IORESOURCE_TYPE_BITS) != IORESOURCE_MEM) ||
+		    range.cpu_addr == OF_BAD_ADDR || range.size == 0)
+			continue;
+
+		dev_info(dev, "IB MEM %#010llx..%#010llx -> %#010llx\n",
+			 range.cpu_addr,
+			 range.cpu_addr + range.size - 1, range.pci_addr);
+
+
+		err = of_pci_range_to_resource(&range, dev_node, &tmp_res);
+		if (err)
+			continue;
+
+		res = devm_kmemdup(dev, &tmp_res, sizeof(tmp_res), GFP_KERNEL);
+		if (!res) {
+			err = -ENOMEM;
+			goto failed;
+		}
+
+		pci_add_resource_offset(ib_resources, res,
+					res->start - range.pci_addr);
+	}
+
 	return 0;
 
 failed:
@@ -482,6 +520,7 @@ EXPORT_SYMBOL_GPL(of_irq_parse_and_map_pci);
 
 int pci_parse_request_of_pci_ranges(struct device *dev,
 				    struct list_head *resources,
+				    struct list_head *ib_resources,
 				    struct resource **bus_range)
 {
 	int err, res_valid = 0;
@@ -489,8 +528,10 @@ int pci_parse_request_of_pci_ranges(struct device *dev,
 	struct resource_entry *win, *tmp;
 
 	INIT_LIST_HEAD(resources);
+	if (ib_resources)
+		INIT_LIST_HEAD(ib_resources);
 	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, resources,
-						    &iobase);
+						    ib_resources, &iobase);
 	if (err)
 		return err;
 
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 3f6947ee3324..6692c4fe4290 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -633,11 +633,15 @@ static inline void pci_release_bus_of_node(struct pci_bus *bus) { }
 #if defined(CONFIG_OF_ADDRESS)
 int devm_of_pci_get_host_bridge_resources(struct device *dev,
 			unsigned char busno, unsigned char bus_max,
-			struct list_head *resources, resource_size_t *io_base);
+			struct list_head *resources,
+			struct list_head *ib_resources,
+			resource_size_t *io_base);
 #else
 static inline int devm_of_pci_get_host_bridge_resources(struct device *dev,
 			unsigned char busno, unsigned char bus_max,
-			struct list_head *resources, resource_size_t *io_base)
+			struct list_head *resources,
+			struct list_head *ib_resources,
+			resource_size_t *io_base)
 {
 	return -EINVAL;
 }
diff --git a/include/linux/pci.h b/include/linux/pci.h
index f9088c89a534..df6bafc54080 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -2278,6 +2278,7 @@ struct irq_domain;
 struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus);
 int pci_parse_request_of_pci_ranges(struct device *dev,
 				    struct list_head *resources,
+				    struct list_head *ib_resources,
 				    struct resource **bus_range);
 
 /* Arch may override this (weak) */
@@ -2288,6 +2289,7 @@ static inline struct irq_domain *
 pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; }
 static inline int pci_parse_request_of_pci_ranges(struct device *dev,
 						  struct list_head *resources,
+						  struct list_head *ib_resources,
 						  struct resource **bus_range)
 {
 	return -EINVAL;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 20/25] PCI: ftpci100: Use inbound resources for setup
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (18 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 19/25] PCI: of: Add inbound resource parsing to helpers Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-21  0:41   ` Linus Walleij
  2019-10-16 20:06 ` [PATCH v2 21/25] PCI: v3-semi: " Rob Herring
                   ` (4 subsequent siblings)
  24 siblings, 1 reply; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Now that the helpers provide the inbound resources in the host bridge
'dma_ranges' resource list, convert Faraday ftpci100 host bridge to use
the resource list to setup the inbound addresses.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
 drivers/pci/controller/pci-ftpci100.c | 26 +++++++++-----------------
 1 file changed, 9 insertions(+), 17 deletions(-)

diff --git a/drivers/pci/controller/pci-ftpci100.c b/drivers/pci/controller/pci-ftpci100.c
index 5824913e311b..e6b498de35e1 100644
--- a/drivers/pci/controller/pci-ftpci100.c
+++ b/drivers/pci/controller/pci-ftpci100.c
@@ -375,12 +375,11 @@ static int faraday_pci_setup_cascaded_irq(struct faraday_pci *p)
 	return 0;
 }
 
-static int faraday_pci_parse_map_dma_ranges(struct faraday_pci *p,
-					    struct device_node *np)
+static int faraday_pci_parse_map_dma_ranges(struct faraday_pci *p)
 {
-	struct of_pci_range range;
-	struct of_pci_range_parser parser;
 	struct device *dev = p->dev;
+	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(p);
+	struct resource_entry *entry;
 	u32 confreg[3] = {
 		FARADAY_PCI_MEM1_BASE_SIZE,
 		FARADAY_PCI_MEM2_BASE_SIZE,
@@ -389,19 +388,12 @@ static int faraday_pci_parse_map_dma_ranges(struct faraday_pci *p,
 	int i = 0;
 	u32 val;
 
-	if (of_pci_dma_range_parser_init(&parser, np)) {
-		dev_err(dev, "missing dma-ranges property\n");
-		return -EINVAL;
-	}
-
-	/*
-	 * Get the dma-ranges from the device tree
-	 */
-	for_each_of_pci_range(&parser, &range) {
-		u64 end = range.pci_addr + range.size - 1;
+	resource_list_for_each_entry(entry, &bridge->dma_ranges) {
+		u64 pci_addr = entry->res->start - entry->offset;
+		u64 end = entry->res->end - entry->offset;
 		int ret;
 
-		ret = faraday_res_to_memcfg(range.pci_addr, range.size, &val);
+		ret = faraday_res_to_memcfg(pci_addr, resource_size(entry->res), &val);
 		if (ret) {
 			dev_err(dev,
 				"DMA range %d: illegal MEM resource size\n", i);
@@ -409,7 +401,7 @@ static int faraday_pci_parse_map_dma_ranges(struct faraday_pci *p,
 		}
 
 		dev_info(dev, "DMA MEM%d BASE: 0x%016llx -> 0x%016llx config %08x\n",
-			 i + 1, range.pci_addr, end, val);
+			 i + 1, pci_addr, end, val);
 		if (i <= 2) {
 			faraday_raw_pci_write_config(p, 0, 0, confreg[i],
 						     4, val);
@@ -539,7 +531,7 @@ static int faraday_pci_probe(struct platform_device *pdev)
 			cur_bus_speed = PCI_SPEED_66MHz;
 	}
 
-	ret = faraday_pci_parse_map_dma_ranges(p, dev->of_node);
+	ret = faraday_pci_parse_map_dma_ranges(p);
 	if (ret)
 		return ret;
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 21/25] PCI: v3-semi: Use inbound resources for setup
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (19 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 20/25] PCI: ftpci100: Use inbound resources for setup Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 22/25] PCI: xgene: " Rob Herring
                   ` (3 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Now that the helpers provide the inbound resources in the host bridge
'dma_ranges' resource list, convert the v3-semi host bridge to use
the resource list to setup the inbound addresses.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Rob Herring <robh@kernel.org>
---
 drivers/pci/controller/pci-v3-semi.c | 38 ++++++++++++----------------
 1 file changed, 16 insertions(+), 22 deletions(-)

diff --git a/drivers/pci/controller/pci-v3-semi.c b/drivers/pci/controller/pci-v3-semi.c
index 2209c7671115..bd05221f5a22 100644
--- a/drivers/pci/controller/pci-v3-semi.c
+++ b/drivers/pci/controller/pci-v3-semi.c
@@ -598,28 +598,30 @@ static int v3_pci_setup_resource(struct v3_pci *v3,
 }
 
 static int v3_get_dma_range_config(struct v3_pci *v3,
-				   struct of_pci_range *range,
+				   struct resource_entry *entry,
 				   u32 *pci_base, u32 *pci_map)
 {
 	struct device *dev = v3->dev;
-	u64 cpu_end = range->cpu_addr + range->size - 1;
-	u64 pci_end = range->pci_addr + range->size - 1;
+	u64 cpu_addr = entry->res->start;
+	u64 cpu_end = entry->res->end;
+	u64 pci_end = cpu_end - entry->offset;
+	u64 pci_addr = entry->res->start - entry->offset;
 	u32 val;
 
-	if (range->pci_addr & ~V3_PCI_BASE_M_ADR_BASE) {
+	if (pci_addr & ~V3_PCI_BASE_M_ADR_BASE) {
 		dev_err(dev, "illegal range, only PCI bits 31..20 allowed\n");
 		return -EINVAL;
 	}
-	val = ((u32)range->pci_addr) & V3_PCI_BASE_M_ADR_BASE;
+	val = ((u32)pci_addr) & V3_PCI_BASE_M_ADR_BASE;
 	*pci_base = val;
 
-	if (range->cpu_addr & ~V3_PCI_MAP_M_MAP_ADR) {
+	if (cpu_addr & ~V3_PCI_MAP_M_MAP_ADR) {
 		dev_err(dev, "illegal range, only CPU bits 31..20 allowed\n");
 		return -EINVAL;
 	}
-	val = ((u32)range->cpu_addr) & V3_PCI_MAP_M_MAP_ADR;
+	val = ((u32)cpu_addr) & V3_PCI_MAP_M_MAP_ADR;
 
-	switch (range->size) {
+	switch (resource_size(entry->res)) {
 	case SZ_1M:
 		val |= V3_LB_BASE_ADR_SIZE_1MB;
 		break;
@@ -667,8 +669,8 @@ static int v3_get_dma_range_config(struct v3_pci *v3,
 	dev_dbg(dev,
 		"DMA MEM CPU: 0x%016llx -> 0x%016llx => "
 		"PCI: 0x%016llx -> 0x%016llx base %08x map %08x\n",
-		range->cpu_addr, cpu_end,
-		range->pci_addr, pci_end,
+		cpu_addr, cpu_end,
+		pci_addr, pci_end,
 		*pci_base, *pci_map);
 
 	return 0;
@@ -677,24 +679,16 @@ static int v3_get_dma_range_config(struct v3_pci *v3,
 static int v3_pci_parse_map_dma_ranges(struct v3_pci *v3,
 				       struct device_node *np)
 {
-	struct of_pci_range range;
-	struct of_pci_range_parser parser;
+	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(v3);
 	struct device *dev = v3->dev;
+	struct resource_entry *entry;
 	int i = 0;
 
-	if (of_pci_dma_range_parser_init(&parser, np)) {
-		dev_err(dev, "missing dma-ranges property\n");
-		return -EINVAL;
-	}
-
-	/*
-	 * Get the dma-ranges from the device tree
-	 */
-	for_each_of_pci_range(&parser, &range) {
+	resource_list_for_each_entry(entry, &bridge->dma_ranges) {
 		int ret;
 		u32 pci_base, pci_map;
 
-		ret = v3_get_dma_range_config(v3, &range, &pci_base, &pci_map);
+		ret = v3_get_dma_range_config(v3, entry, &pci_base, &pci_map);
 		if (ret)
 			return ret;
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 22/25] PCI: xgene: Use inbound resources for setup
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (20 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 21/25] PCI: v3-semi: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 23/25] PCI: iproc: " Rob Herring
                   ` (2 subsequent siblings)
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Now that the helpers provide the inbound resources in the host bridge
'dma_ranges' resource list, convert the Xgene host bridge to use the
resource list to setup the inbound addresses.

Cc: Toan Le <toan@os.amperecomputing.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
 drivers/pci/controller/pci-xgene.c | 32 ++++++++++--------------------
 1 file changed, 10 insertions(+), 22 deletions(-)

diff --git a/drivers/pci/controller/pci-xgene.c b/drivers/pci/controller/pci-xgene.c
index 9408269d943d..e808a406dfb0 100644
--- a/drivers/pci/controller/pci-xgene.c
+++ b/drivers/pci/controller/pci-xgene.c
@@ -481,27 +481,27 @@ static int xgene_pcie_select_ib_reg(u8 *ib_reg_mask, u64 size)
 }
 
 static void xgene_pcie_setup_ib_reg(struct xgene_pcie_port *port,
-				    struct of_pci_range *range, u8 *ib_reg_mask)
+				    struct resource_entry *entry, u8 *ib_reg_mask)
 {
 	void __iomem *cfg_base = port->cfg_base;
 	struct device *dev = port->dev;
 	void *bar_addr;
 	u32 pim_reg;
-	u64 cpu_addr = range->cpu_addr;
-	u64 pci_addr = range->pci_addr;
-	u64 size = range->size;
+	u64 cpu_addr = entry->res->start;
+	u64 pci_addr = cpu_addr - entry->offset;
+	u64 size = resource_size(entry->res);
 	u64 mask = ~(size - 1) | EN_REG;
 	u32 flags = PCI_BASE_ADDRESS_MEM_TYPE_64;
 	u32 bar_low;
 	int region;
 
-	region = xgene_pcie_select_ib_reg(ib_reg_mask, range->size);
+	region = xgene_pcie_select_ib_reg(ib_reg_mask, size);
 	if (region < 0) {
 		dev_warn(dev, "invalid pcie dma-range config\n");
 		return;
 	}
 
-	if (range->flags & IORESOURCE_PREFETCH)
+	if (entry->res->flags & IORESOURCE_PREFETCH)
 		flags |= PCI_BASE_ADDRESS_MEM_PREFETCH;
 
 	bar_low = pcie_bar_low_val((u32)cpu_addr, flags);
@@ -532,25 +532,13 @@ static void xgene_pcie_setup_ib_reg(struct xgene_pcie_port *port,
 
 static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie_port *port)
 {
-	struct device_node *np = port->node;
-	struct of_pci_range range;
-	struct of_pci_range_parser parser;
-	struct device *dev = port->dev;
+	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port);
+	struct resource_entry *entry;
 	u8 ib_reg_mask = 0;
 
-	if (of_pci_dma_range_parser_init(&parser, np)) {
-		dev_err(dev, "missing dma-ranges property\n");
-		return -EINVAL;
-	}
-
-	/* Get the dma-ranges from DT */
-	for_each_of_pci_range(&parser, &range) {
-		u64 end = range.cpu_addr + range.size - 1;
+	resource_list_for_each_entry(entry, &bridge->dma_ranges)
+		xgene_pcie_setup_ib_reg(port, entry, &ib_reg_mask);
 
-		dev_dbg(dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n",
-			range.flags, range.cpu_addr, end, range.pci_addr);
-		xgene_pcie_setup_ib_reg(port, &range, &ib_reg_mask);
-	}
 	return 0;
 }
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 23/25] PCI: iproc: Use inbound resources for setup
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (21 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 22/25] PCI: xgene: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 24/25] PCI: rcar: " Rob Herring
  2019-10-16 20:06 ` [PATCH v2 25/25] PCI: Make devm_of_pci_get_host_bridge_resources() static Rob Herring
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Now that the helpers provide the inbound resources in the host bridge
'dma_ranges' resource list, convert Broadcom iProc host bridge to use
the resource list to setup the inbound addresses.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Scott Branden <sbranden@broadcom.com>
Cc: bcm-kernel-feedback-list@broadcom.com
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
v2:
 - Fix iproc_pcie_paxb_v2_msi_steer() to use resource_entry
---
 drivers/pci/controller/pcie-iproc.c | 76 ++++++-----------------------
 1 file changed, 16 insertions(+), 60 deletions(-)

diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
index 223335ee791a..7ba6f7c400f8 100644
--- a/drivers/pci/controller/pcie-iproc.c
+++ b/drivers/pci/controller/pcie-iproc.c
@@ -1122,15 +1122,15 @@ static int iproc_pcie_ib_write(struct iproc_pcie *pcie, int region_idx,
 }
 
 static int iproc_pcie_setup_ib(struct iproc_pcie *pcie,
-			       struct of_pci_range *range,
+			       struct resource_entry *entry,
 			       enum iproc_pcie_ib_map_type type)
 {
 	struct device *dev = pcie->dev;
 	struct iproc_pcie_ib *ib = &pcie->ib;
 	int ret;
 	unsigned int region_idx, size_idx;
-	u64 axi_addr = range->cpu_addr, pci_addr = range->pci_addr;
-	resource_size_t size = range->size;
+	u64 axi_addr = entry->res->start, pci_addr = entry->res->start - entry->offset;
+	resource_size_t size = resource_size(entry->res);
 
 	/* iterate through all IARR mapping regions */
 	for (region_idx = 0; region_idx < ib->nr_regions; region_idx++) {
@@ -1182,66 +1182,19 @@ static int iproc_pcie_setup_ib(struct iproc_pcie *pcie,
 	return ret;
 }
 
-static int iproc_pcie_add_dma_range(struct device *dev,
-				    struct list_head *resources,
-				    struct of_pci_range *range)
-{
-	struct resource *res;
-	struct resource_entry *entry, *tmp;
-	struct list_head *head = resources;
-
-	res = devm_kzalloc(dev, sizeof(struct resource), GFP_KERNEL);
-	if (!res)
-		return -ENOMEM;
-
-	resource_list_for_each_entry(tmp, resources) {
-		if (tmp->res->start < range->cpu_addr)
-			head = &tmp->node;
-	}
-
-	res->start = range->cpu_addr;
-	res->end = res->start + range->size - 1;
-
-	entry = resource_list_create_entry(res, 0);
-	if (!entry)
-		return -ENOMEM;
-
-	entry->offset = res->start - range->cpu_addr;
-	resource_list_add(entry, head);
-
-	return 0;
-}
-
 static int iproc_pcie_map_dma_ranges(struct iproc_pcie *pcie)
 {
 	struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
-	struct of_pci_range range;
-	struct of_pci_range_parser parser;
-	int ret;
-	LIST_HEAD(resources);
-
-	/* Get the dma-ranges from DT */
-	ret = of_pci_dma_range_parser_init(&parser, pcie->dev->of_node);
-	if (ret)
-		return ret;
+	struct resource_entry *entry;
+	int ret = 0;
 
-	for_each_of_pci_range(&parser, &range) {
-		ret = iproc_pcie_add_dma_range(pcie->dev,
-					       &resources,
-					       &range);
-		if (ret)
-			goto out;
+	resource_list_for_each_entry(entry, &host->dma_ranges) {
 		/* Each range entry corresponds to an inbound mapping region */
-		ret = iproc_pcie_setup_ib(pcie, &range, IPROC_PCIE_IB_MAP_MEM);
+		ret = iproc_pcie_setup_ib(pcie, entry, IPROC_PCIE_IB_MAP_MEM);
 		if (ret)
-			goto out;
+			break;
 	}
 
-	list_splice_init(&resources, &host->dma_ranges);
-
-	return 0;
-out:
-	pci_free_resource_list(&resources);
 	return ret;
 }
 
@@ -1276,13 +1229,16 @@ static int iproce_pcie_get_msi(struct iproc_pcie *pcie,
 static int iproc_pcie_paxb_v2_msi_steer(struct iproc_pcie *pcie, u64 msi_addr)
 {
 	int ret;
-	struct of_pci_range range;
+	struct resource_entry entry;
+
+	memset(&entry, 0, sizeof(entry));
+	entry.res = &entry.__res;
 
-	memset(&range, 0, sizeof(range));
-	range.size = SZ_32K;
-	range.pci_addr = range.cpu_addr = msi_addr & ~(range.size - 1);
+	msi_addr &= ~(SZ_32K - 1);
+	entry.res->start = msi_addr;
+	entry.res->end = msi_addr + SZ_32K - 1;
 
-	ret = iproc_pcie_setup_ib(pcie, &range, IPROC_PCIE_IB_MAP_IO);
+	ret = iproc_pcie_setup_ib(pcie, &entry, IPROC_PCIE_IB_MAP_IO);
 	return ret;
 }
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 24/25] PCI: rcar: Use inbound resources for setup
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (22 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 23/25] PCI: iproc: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  2019-10-16 20:06 ` [PATCH v2 25/25] PCI: Make devm_of_pci_get_host_bridge_resources() static Rob Herring
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Now that the helpers provide the inbound resources in the host bridge
'dma_ranges' resource list, convert Renesas R-Car PCIe host bridge to
use the resource list to setup the inbound addresses.

Cc: Simon Horman <horms@verge.net.au>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
 drivers/pci/controller/pcie-rcar.c | 45 +++++++++++-------------------
 1 file changed, 16 insertions(+), 29 deletions(-)

diff --git a/drivers/pci/controller/pcie-rcar.c b/drivers/pci/controller/pcie-rcar.c
index b8d6e86a5539..453c931aaf77 100644
--- a/drivers/pci/controller/pcie-rcar.c
+++ b/drivers/pci/controller/pcie-rcar.c
@@ -1014,16 +1014,16 @@ static int rcar_pcie_get_resources(struct rcar_pcie *pcie)
 }
 
 static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
-				    struct of_pci_range *range,
+				    struct resource_entry *entry,
 				    int *index)
 {
-	u64 restype = range->flags;
-	u64 cpu_addr = range->cpu_addr;
-	u64 cpu_end = range->cpu_addr + range->size;
-	u64 pci_addr = range->pci_addr;
+	u64 restype = entry->res->flags;
+	u64 cpu_addr = entry->res->start;
+	u64 cpu_end = entry->res->end;
+	u64 pci_addr = entry->res->start - entry->offset;
 	u32 flags = LAM_64BIT | LAR_ENABLE;
 	u64 mask;
-	u64 size;
+	u64 size = resource_size(entry->res);
 	int idx = *index;
 
 	if (restype & IORESOURCE_PREFETCH)
@@ -1037,9 +1037,7 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
 		unsigned long nr_zeros = __ffs64(cpu_addr);
 		u64 alignment = 1ULL << nr_zeros;
 
-		size = min(range->size, alignment);
-	} else {
-		size = range->size;
+		size = min(size, alignment);
 	}
 	/* Hardware supports max 4GiB inbound region */
 	size = min(size, 1ULL << 32);
@@ -1078,30 +1076,19 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
 	return 0;
 }
 
-static int rcar_pcie_parse_map_dma_ranges(struct rcar_pcie *pcie,
-					  struct device_node *np)
+static int rcar_pcie_parse_map_dma_ranges(struct rcar_pcie *pcie)
 {
-	struct of_pci_range range;
-	struct of_pci_range_parser parser;
-	int index = 0;
-	int err;
-
-	if (of_pci_dma_range_parser_init(&parser, np))
-		return -EINVAL;
-
-	/* Get the dma-ranges from DT */
-	for_each_of_pci_range(&parser, &range) {
-		u64 end = range.cpu_addr + range.size - 1;
-
-		dev_dbg(pcie->dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n",
-			range.flags, range.cpu_addr, end, range.pci_addr);
+	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
+	struct resource_entry *entry;
+	int index = 0, err = 0;
 
-		err = rcar_pcie_inbound_ranges(pcie, &range, &index);
+	resource_list_for_each_entry(entry, &bridge->dma_ranges) {
+		err = rcar_pcie_inbound_ranges(pcie, entry, &index);
 		if (err)
-			return err;
+			break;
 	}
 
-	return 0;
+	return err;
 }
 
 static const struct of_device_id rcar_pcie_of_match[] = {
@@ -1162,7 +1149,7 @@ static int rcar_pcie_probe(struct platform_device *pdev)
 		goto err_unmap_msi_irqs;
 	}
 
-	err = rcar_pcie_parse_map_dma_ranges(pcie, dev->of_node);
+	err = rcar_pcie_parse_map_dma_ranges(pcie);
 	if (err)
 		goto err_clk_disable;
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* [PATCH v2 25/25] PCI: Make devm_of_pci_get_host_bridge_resources() static
  2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
                   ` (23 preceding siblings ...)
  2019-10-16 20:06 ` [PATCH v2 24/25] PCI: rcar: " Rob Herring
@ 2019-10-16 20:06 ` Rob Herring
  24 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-16 20:06 UTC (permalink / raw)
  To: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi
  Cc: linux-pci, linux-arm-kernel, bcm-kernel-feedback-list,
	Gustavo Pimentel, Heiko Stuebner, Hou Zhiqiang, Jingoo Han,
	Karthikeyan Mitran, Ley Foon Tan, Linus Walleij, linux-mediatek,
	linux-renesas-soc, linux-rockchip, Matthias Brugger,
	Michal Simek, Ray Jui, rfi, Ryder Lee, Scott Branden, Shawn Lin,
	Simon Horman, Srinath Mannam, Thomas Petazzoni, Toan Le,
	Tom Joseph, Will Deacon

Now that all the PCI host drivers are using pci_parse_request_of_pci_ranges(),
make devm_of_pci_get_host_bridge_resources() static.

Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
 drivers/pci/of.c  |  5 +----
 drivers/pci/pci.h | 17 -----------------
 2 files changed, 1 insertion(+), 21 deletions(-)

diff --git a/drivers/pci/of.c b/drivers/pci/of.c
index 0b1e4623dfcf..00e4b9fcb41d 100644
--- a/drivers/pci/of.c
+++ b/drivers/pci/of.c
@@ -236,7 +236,6 @@ void of_pci_check_probe_only(void)
 }
 EXPORT_SYMBOL_GPL(of_pci_check_probe_only);
 
-#if defined(CONFIG_OF_ADDRESS)
 /**
  * devm_of_pci_get_host_bridge_resources() - Resource-managed parsing of PCI
  *                                           host bridge resources from DT
@@ -255,7 +254,7 @@ EXPORT_SYMBOL_GPL(of_pci_check_probe_only);
  * It returns zero if the range parsing has been successful or a standard error
  * value if it failed.
  */
-int devm_of_pci_get_host_bridge_resources(struct device *dev,
+static int devm_of_pci_get_host_bridge_resources(struct device *dev,
 			unsigned char busno, unsigned char bus_max,
 			struct list_head *resources,
 			struct list_head *ib_resources,
@@ -384,8 +383,6 @@ int devm_of_pci_get_host_bridge_resources(struct device *dev,
 	pci_free_resource_list(resources);
 	return err;
 }
-EXPORT_SYMBOL_GPL(devm_of_pci_get_host_bridge_resources);
-#endif /* CONFIG_OF_ADDRESS */
 
 #if IS_ENABLED(CONFIG_OF_IRQ)
 /**
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 6692c4fe4290..118a4974537b 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -630,23 +630,6 @@ static inline void pci_set_bus_of_node(struct pci_bus *bus) { }
 static inline void pci_release_bus_of_node(struct pci_bus *bus) { }
 #endif /* CONFIG_OF */
 
-#if defined(CONFIG_OF_ADDRESS)
-int devm_of_pci_get_host_bridge_resources(struct device *dev,
-			unsigned char busno, unsigned char bus_max,
-			struct list_head *resources,
-			struct list_head *ib_resources,
-			resource_size_t *io_base);
-#else
-static inline int devm_of_pci_get_host_bridge_resources(struct device *dev,
-			unsigned char busno, unsigned char bus_max,
-			struct list_head *resources,
-			struct list_head *ib_resources,
-			resource_size_t *io_base)
-{
-	return -EINVAL;
-}
-#endif
-
 #ifdef CONFIG_PCIEAER
 void pci_no_aer(void);
 void pci_aer_init(struct pci_dev *dev);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper
  2019-10-16 20:06 ` [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper Rob Herring
@ 2019-10-17  7:25   ` Christoph Hellwig
  2019-10-18 12:14     ` Andrew Murray
  0 siblings, 1 reply; 44+ messages in thread
From: Christoph Hellwig @ 2019-10-17  7:25 UTC (permalink / raw)
  To: Rob Herring
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	linux-arm-kernel, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, Linus Walleij, linux-mediatek, linux-renesas-soc,
	linux-rockchip, Matthias Brugger, Michal Simek, Ray Jui, rfi,
	Ryder Lee, Scott Branden, Shawn Lin, Simon Horman,
	Srinath Mannam, Thomas Petazzoni, Toan Le, Tom Joseph,
	Will Deacon

On Wed, Oct 16, 2019 at 03:06:23PM -0500, Rob Herring wrote:
> +static inline struct resource_entry *resource_list_get_entry_of_type(struct list_head *list,
> +							      unsigned long type)

This adds a way too long line.

Part of that is that the name just seems way too long as well, any
good shorter name?  resourse_list_first_type?

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 11/25] PCI: rockchip: Drop storing driver private outbound resource data
  2019-10-16 20:06 ` [PATCH v2 11/25] PCI: rockchip: Drop storing driver private outbound resource data Rob Herring
@ 2019-10-17  7:26   ` Christoph Hellwig
  2019-10-17 12:24     ` Rob Herring
  0 siblings, 1 reply; 44+ messages in thread
From: Christoph Hellwig @ 2019-10-17  7:26 UTC (permalink / raw)
  To: Rob Herring
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	linux-arm-kernel, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, Linus Walleij, linux-mediatek, linux-renesas-soc,
	linux-rockchip, Matthias Brugger, Michal Simek, Ray Jui, rfi,
	Ryder Lee, Scott Branden, Shawn Lin, Simon Horman,
	Srinath Mannam, Thomas Petazzoni, Toan Le, Tom Joseph,
	Will Deacon

On Wed, Oct 16, 2019 at 03:06:33PM -0500, Rob Herring wrote:
> +	entry = resource_list_get_entry_of_type(&bridge->windows, IORESOURCE_MEM);

This add another too long line.  Please audit the whole series for that.

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 11/25] PCI: rockchip: Drop storing driver private outbound resource data
  2019-10-17  7:26   ` Christoph Hellwig
@ 2019-10-17 12:24     ` Rob Herring
  0 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-17 12:24 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, PCI,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, Linus Walleij,
	moderated list:ARM/Mediatek SoC support,
	open list:MEDIA DRIVERS FOR RENESAS - FCP,
	open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Thu, Oct 17, 2019 at 2:26 AM Christoph Hellwig <hch@infradead.org> wrote:
>
> On Wed, Oct 16, 2019 at 03:06:33PM -0500, Rob Herring wrote:
> > +     entry = resource_list_get_entry_of_type(&bridge->windows, IORESOURCE_MEM);
>
> This add another too long line.  Please audit the whole series for that.

82 characters didn't seem worth a line break...

Rob

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 02/25] PCI: Export pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 02/25] PCI: Export pci_parse_request_of_pci_ranges() Rob Herring
@ 2019-10-18 12:06   ` Andrew Murray
  0 siblings, 0 replies; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 12:06 UTC (permalink / raw)
  To: Rob Herring
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, linux-pci, linux-arm-kernel,
	bcm-kernel-feedback-list, Gustavo Pimentel, Heiko Stuebner,
	Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran, Ley Foon Tan,
	Linus Walleij, linux-mediatek, linux-renesas-soc, linux-rockchip,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 03:06:24PM -0500, Rob Herring wrote:
> pci_parse_request_of_pci_ranges() is missing a module export, so add it.
> 
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - New patch
> 
>  drivers/pci/of.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
> index 36891e7deee3..f3da49a31db4 100644
> --- a/drivers/pci/of.c
> +++ b/drivers/pci/of.c
> @@ -530,6 +530,7 @@ int pci_parse_request_of_pci_ranges(struct device *dev,
>  	pci_free_resource_list(resources);
>  	return err;
>  }
> +EXPORT_SYMBOL_GPL(pci_parse_request_of_pci_ranges);
> 

Reviewed-by: Andrew Murray <andrew.murray@arm.com>

>  #endif /* CONFIG_PCI */
> 
> --
> 2.20.1

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 04/25] PCI: altera: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 04/25] PCI: altera: " Rob Herring
@ 2019-10-18 12:09   ` Andrew Murray
  0 siblings, 0 replies; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 12:09 UTC (permalink / raw)
  To: Rob Herring
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, linux-pci, linux-arm-kernel,
	bcm-kernel-feedback-list, Gustavo Pimentel, Heiko Stuebner,
	Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran, Ley Foon Tan,
	Linus Walleij, linux-mediatek, linux-renesas-soc, linux-rockchip,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 03:06:26PM -0500, Rob Herring wrote:
> Convert altera host bridge to use the common
> pci_parse_request_of_pci_ranges().
> 
> There's no need to assign the resources to a temporary list first. Just
> use bridge->windows directly and remove all the temporary list handling.
> 
> If an I/O range is present, then it will now be mapped. It's expected
> that h/w which doesn't support I/O range will not define one.
> 
> Cc: Ley Foon Tan <lftan@altera.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: rfi@lists.rocketboards.org
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---

Reviewed-by: Andrew Murray <andrew.murray@arm.com>

> v2:
> - Remove temporary resource list
> ---
>  drivers/pci/controller/pcie-altera.c | 41 ++--------------------------
>  1 file changed, 2 insertions(+), 39 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-altera.c b/drivers/pci/controller/pcie-altera.c
> index d2497ca43828..ba025efeae28 100644
> --- a/drivers/pci/controller/pcie-altera.c
> +++ b/drivers/pci/controller/pcie-altera.c
> @@ -92,7 +92,6 @@ struct altera_pcie {
>  	u8			root_bus_nr;
>  	struct irq_domain	*irq_domain;
>  	struct resource		bus_range;
> -	struct list_head	resources;
>  	const struct altera_pcie_data	*pcie_data;
>  };
>  
> @@ -670,39 +669,6 @@ static void altera_pcie_isr(struct irq_desc *desc)
>  	chained_irq_exit(chip, desc);
>  }
>  
> -static int altera_pcie_parse_request_of_pci_ranges(struct altera_pcie *pcie)
> -{
> -	int err, res_valid = 0;
> -	struct device *dev = &pcie->pdev->dev;
> -	struct resource_entry *win;
> -
> -	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
> -						    &pcie->resources, NULL);
> -	if (err)
> -		return err;
> -
> -	err = devm_request_pci_bus_resources(dev, &pcie->resources);
> -	if (err)
> -		goto out_release_res;
> -
> -	resource_list_for_each_entry(win, &pcie->resources) {
> -		struct resource *res = win->res;
> -
> -		if (resource_type(res) == IORESOURCE_MEM)
> -			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
> -	}
> -
> -	if (res_valid)
> -		return 0;
> -
> -	dev_err(dev, "non-prefetchable memory resource required\n");
> -	err = -EINVAL;
> -
> -out_release_res:
> -	pci_free_resource_list(&pcie->resources);
> -	return err;
> -}
> -
>  static int altera_pcie_init_irq_domain(struct altera_pcie *pcie)
>  {
>  	struct device *dev = &pcie->pdev->dev;
> @@ -833,9 +799,8 @@ static int altera_pcie_probe(struct platform_device *pdev)
>  		return ret;
>  	}
>  
> -	INIT_LIST_HEAD(&pcie->resources);
> -
> -	ret = altera_pcie_parse_request_of_pci_ranges(pcie);
> +	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows,
> +					      NULL);
>  	if (ret) {
>  		dev_err(dev, "Failed add resources\n");
>  		return ret;
> @@ -853,7 +818,6 @@ static int altera_pcie_probe(struct platform_device *pdev)
>  	cra_writel(pcie, P2A_INT_ENA_ALL, P2A_INT_ENABLE);
>  	altera_pcie_host_init(pcie);
>  
> -	list_splice_init(&pcie->resources, &bridge->windows);
>  	bridge->dev.parent = dev;
>  	bridge->sysdata = pcie;
>  	bridge->busnr = pcie->root_bus_nr;
> @@ -884,7 +848,6 @@ static int altera_pcie_remove(struct platform_device *pdev)
>  
>  	pci_stop_root_bus(bridge->bus);
>  	pci_remove_root_bus(bridge->bus);
> -	pci_free_resource_list(&pcie->resources);
>  	altera_pcie_irq_teardown(pcie);
>  
>  	return 0;
> -- 
> 2.20.1
> 

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper
  2019-10-17  7:25   ` Christoph Hellwig
@ 2019-10-18 12:14     ` Andrew Murray
  0 siblings, 0 replies; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 12:14 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Rob Herring, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	linux-arm-kernel, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, Linus Walleij, linux-mediatek, linux-renesas-soc,
	linux-rockchip, Matthias Brugger, Michal Simek, Ray Jui, rfi,
	Ryder Lee, Scott Branden, Shawn Lin, Simon Horman,
	Srinath Mannam, Thomas Petazzoni, Toan Le, Tom Joseph,
	Will Deacon

On Thu, Oct 17, 2019 at 12:25:19AM -0700, Christoph Hellwig wrote:
> On Wed, Oct 16, 2019 at 03:06:23PM -0500, Rob Herring wrote:
> > +static inline struct resource_entry *resource_list_get_entry_of_type(struct list_head *list,
> > +							      unsigned long type)
> 
> This adds a way too long line.
> 
> Part of that is that the name just seems way too long as well, any
> good shorter name?  resourse_list_first_type?

I think it's really helpful to use the word 'first' in there somewhere,
it makes it a little clearer on what happens if there are multiple of
the same type of resource.

Thanks,

Andrew Murray

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 05/25] PCI: dwc: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 05/25] PCI: dwc: " Rob Herring
@ 2019-10-18 12:35   ` Andrew Murray
  2019-10-20 21:39     ` Rob Herring
  0 siblings, 1 reply; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 12:35 UTC (permalink / raw)
  To: Rob Herring
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, linux-pci, linux-arm-kernel,
	bcm-kernel-feedback-list, Gustavo Pimentel, Heiko Stuebner,
	Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran, Ley Foon Tan,
	Linus Walleij, linux-mediatek, linux-renesas-soc, linux-rockchip,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 03:06:27PM -0500, Rob Herring wrote:
> Convert the Designware host bridge to use the common
> pci_parse_request_of_pci_ranges().
> 
> Cc: Jingoo Han <jingoohan1@gmail.com>
> Cc: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Andrew Murray <andrew.murray@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - New patch
> 
>  .../pci/controller/dwc/pcie-designware-host.c | 28 ++++++-------------
>  1 file changed, 8 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
> index 0f36a926059a..aeec8b65eb97 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-host.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
> @@ -319,7 +319,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
>  	struct device *dev = pci->dev;
>  	struct device_node *np = dev->of_node;
>  	struct platform_device *pdev = to_platform_device(dev);
> -	struct resource_entry *win, *tmp;
> +	struct resource_entry *win;
>  	struct pci_bus *child;
>  	struct pci_host_bridge *bridge;
>  	struct resource *cfg_res;
> @@ -342,31 +342,19 @@ int dw_pcie_host_init(struct pcie_port *pp)
>  	if (!bridge)
>  		return -ENOMEM;
> 
> -	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
> -					&bridge->windows, &pp->io_base);
> -	if (ret)
> -		return ret;
> -
> -	ret = devm_request_pci_bus_resources(dev, &bridge->windows);
> +	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
>  	if (ret)
>  		return ret;
> 
>  	/* Get the I/O and memory ranges from DT */
> -	resource_list_for_each_entry_safe(win, tmp, &bridge->windows) {
> +	resource_list_for_each_entry(win, &bridge->windows) {
>  		switch (resource_type(win->res)) {
>  		case IORESOURCE_IO:
> -			ret = devm_pci_remap_iospace(dev, win->res,
> -						     pp->io_base);
> -			if (ret) {
> -				dev_warn(dev, "Error %d: failed to map resource %pR\n",
> -					 ret, win->res);
> -				resource_list_destroy_entry(win);
> -			} else {
> -				pp->io = win->res;
> -				pp->io->name = "I/O";
> -				pp->io_size = resource_size(pp->io);
> -				pp->io_bus_addr = pp->io->start - win->offset;
> -			}
> +			pp->io = win->res;
> +			pp->io->name = "I/O";
> +			pp->io_size = resource_size(pp->io);
> +			pp->io_bus_addr = pp->io->start - win->offset;
> +			pp->io_base = pci_pio_to_address(pp->io->start);

Where did io_base come from? This wasn't here before, so why are we setting it
now?

Does this fix any issue?

Thanks,

Andrew Murray

>  			break;
>  		case IORESOURCE_MEM:
>  			pp->mem = win->res;
> --
> 2.20.1

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 06/25] PCI: faraday: Use pci_parse_request_of_pci_ranges
  2019-10-16 20:06 ` [PATCH v2 06/25] PCI: faraday: Use pci_parse_request_of_pci_ranges Rob Herring
@ 2019-10-18 12:57   ` Andrew Murray
  0 siblings, 0 replies; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 12:57 UTC (permalink / raw)
  To: Rob Herring
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, linux-pci, linux-arm-kernel,
	bcm-kernel-feedback-list, Gustavo Pimentel, Heiko Stuebner,
	Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran, Ley Foon Tan,
	Linus Walleij, linux-mediatek, linux-renesas-soc, linux-rockchip,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 03:06:28PM -0500, Rob Herring wrote:
> Convert the Faraday host bridge to use the common
> pci_parse_request_of_pci_ranges().
> 
> There's no need to assign the resources to a temporary list first. Just
> use bridge->windows directly and remove all the temporary list handling.
> 
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Andrew Murray <andrew.murray@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - New patch
> 

Reviewed-by: Andrew Murray <andrew.murray@arm.com>

>  drivers/pci/controller/pci-ftpci100.c | 51 ++++++---------------------
>  1 file changed, 11 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/pci/controller/pci-ftpci100.c b/drivers/pci/controller/pci-ftpci100.c
> index bf5ece5d9291..12bc7daef5b5 100644
> --- a/drivers/pci/controller/pci-ftpci100.c
> +++ b/drivers/pci/controller/pci-ftpci100.c
> @@ -430,10 +430,8 @@ static int faraday_pci_probe(struct platform_device *pdev)
>  	const struct faraday_pci_variant *variant =
>  		of_device_get_match_data(dev);
>  	struct resource *regs;
> -	resource_size_t io_base;
>  	struct resource_entry *win;
>  	struct faraday_pci *p;
> -	struct resource *mem;
>  	struct resource *io;
>  	struct pci_host_bridge *host;
>  	struct clk *clk;
> @@ -441,7 +439,6 @@ static int faraday_pci_probe(struct platform_device *pdev)
>  	unsigned char cur_bus_speed = PCI_SPEED_33MHz;
>  	int ret;
>  	u32 val;
> -	LIST_HEAD(res);
> 
>  	host = devm_pci_alloc_host_bridge(dev, sizeof(*p));
>  	if (!host)
> @@ -480,44 +477,20 @@ static int faraday_pci_probe(struct platform_device *pdev)
>  	if (IS_ERR(p->base))
>  		return PTR_ERR(p->base);
> 
> -	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
> -						    &res, &io_base);
> +	ret = pci_parse_request_of_pci_ranges(dev, &host->windows, NULL);
>  	if (ret)
>  		return ret;
> 
> -	ret = devm_request_pci_bus_resources(dev, &res);
> -	if (ret)
> -		return ret;
> -
> -	/* Get the I/O and memory ranges from DT */
> -	resource_list_for_each_entry(win, &res) {
> -		switch (resource_type(win->res)) {
> -		case IORESOURCE_IO:
> -			io = win->res;
> -			io->name = "Gemini PCI I/O";
> -			if (!faraday_res_to_memcfg(io->start - win->offset,
> -						   resource_size(io), &val)) {
> -				/* setup I/O space size */
> -				writel(val, p->base + PCI_IOSIZE);
> -			} else {
> -				dev_err(dev, "illegal IO mem size\n");
> -				return -EINVAL;
> -			}
> -			ret = devm_pci_remap_iospace(dev, io, io_base);
> -			if (ret) {
> -				dev_warn(dev, "error %d: failed to map resource %pR\n",
> -					 ret, io);
> -				continue;
> -			}
> -			break;
> -		case IORESOURCE_MEM:
> -			mem = win->res;
> -			mem->name = "Gemini PCI MEM";
> -			break;
> -		case IORESOURCE_BUS:
> -			break;
> -		default:
> -			break;
> +	win = resource_list_get_entry_of_type(&host->windows, IORESOURCE_IO);
> +	if (win) {
> +		io = win->res;
> +		if (!faraday_res_to_memcfg(io->start - win->offset,
> +					   resource_size(io), &val)) {
> +			/* setup I/O space size */
> +			writel(val, p->base + PCI_IOSIZE);
> +		} else {
> +			dev_err(dev, "illegal IO mem size\n");
> +			return -EINVAL;
>  		}
>  	}
> 
> @@ -569,7 +542,6 @@ static int faraday_pci_probe(struct platform_device *pdev)
>  	if (ret)
>  		return ret;
> 
> -	list_splice_init(&res, &host->windows);
>  	ret = pci_scan_root_bus_bridge(host);
>  	if (ret) {
>  		dev_err(dev, "failed to scan host: %d\n", ret);
> @@ -581,7 +553,6 @@ static int faraday_pci_probe(struct platform_device *pdev)
> 
>  	pci_bus_assign_resources(p->bus);
>  	pci_bus_add_devices(p->bus);
> -	pci_free_resource_list(&res);
> 
>  	return 0;
>  }
> --
> 2.20.1

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 07/25] PCI: iproc: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 07/25] PCI: iproc: Use pci_parse_request_of_pci_ranges() Rob Herring
@ 2019-10-18 13:00   ` Andrew Murray
  0 siblings, 0 replies; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 13:00 UTC (permalink / raw)
  To: Rob Herring
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, linux-pci, linux-arm-kernel,
	bcm-kernel-feedback-list, Gustavo Pimentel, Heiko Stuebner,
	Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran, Ley Foon Tan,
	Linus Walleij, linux-mediatek, linux-renesas-soc, linux-rockchip,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 03:06:29PM -0500, Rob Herring wrote:
> Convert the iProc host bridge to use the common
> pci_parse_request_of_pci_ranges().
> 
> There's no need to assign the resources to a temporary list, so just use
> bridge->windows directly.
> 
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Andrew Murray <andrew.murray@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Ray Jui <rjui@broadcom.com>
> Cc: Scott Branden <sbranden@broadcom.com>
> Cc: bcm-kernel-feedback-list@broadcom.com
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - New patch

Reviewed-by: Andrew Murray <andrew.murray@arm.com>

> 
>  drivers/pci/controller/pcie-iproc-platform.c | 8 ++------
>  drivers/pci/controller/pcie-iproc.c          | 5 -----
>  2 files changed, 2 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-iproc-platform.c b/drivers/pci/controller/pcie-iproc-platform.c
> index 9ee6200a66f4..375d815f7301 100644
> --- a/drivers/pci/controller/pcie-iproc-platform.c
> +++ b/drivers/pci/controller/pcie-iproc-platform.c
> @@ -43,8 +43,6 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
>  	struct iproc_pcie *pcie;
>  	struct device_node *np = dev->of_node;
>  	struct resource reg;
> -	resource_size_t iobase = 0;
> -	LIST_HEAD(resources);
>  	struct pci_host_bridge *bridge;
>  	int ret;
> 
> @@ -97,8 +95,7 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
>  	if (IS_ERR(pcie->phy))
>  		return PTR_ERR(pcie->phy);
> 
> -	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &resources,
> -						    &iobase);
> +	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
>  	if (ret) {
>  		dev_err(dev, "unable to get PCI host bridge resources\n");
>  		return ret;
> @@ -113,10 +110,9 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
>  		pcie->map_irq = of_irq_parse_and_map_pci;
>  	}
> 
> -	ret = iproc_pcie_setup(pcie, &resources);
> +	ret = iproc_pcie_setup(pcie, &bridge->windows);
>  	if (ret) {
>  		dev_err(dev, "PCIe controller setup failed\n");
> -		pci_free_resource_list(&resources);
>  		return ret;
>  	}
> 
> diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
> index 2d457bfdaf66..223335ee791a 100644
> --- a/drivers/pci/controller/pcie-iproc.c
> +++ b/drivers/pci/controller/pcie-iproc.c
> @@ -1498,10 +1498,6 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
>  		return ret;
>  	}
> 
> -	ret = devm_request_pci_bus_resources(dev, res);
> -	if (ret)
> -		return ret;
> -
>  	ret = phy_init(pcie->phy);
>  	if (ret) {
>  		dev_err(dev, "unable to initialize PCIe PHY\n");
> @@ -1543,7 +1539,6 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
>  		if (iproc_pcie_msi_enable(pcie))
>  			dev_info(dev, "not using iProc MSI\n");
> 
> -	list_splice_init(res, &host->windows);
>  	host->busnr = 0;
>  	host->dev.parent = dev;
>  	host->ops = &iproc_pcie_ops;
> --
> 2.20.1

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 09/25] PCI: mobiveil: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 09/25] PCI: mobiveil: " Rob Herring
@ 2019-10-18 15:41   ` Andrew Murray
  0 siblings, 0 replies; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 15:41 UTC (permalink / raw)
  To: Rob Herring
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, linux-pci, linux-arm-kernel,
	bcm-kernel-feedback-list, Gustavo Pimentel, Heiko Stuebner,
	Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran, Ley Foon Tan,
	Linus Walleij, linux-mediatek, linux-renesas-soc, linux-rockchip,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 03:06:31PM -0500, Rob Herring wrote:
> Convert the Mobiveil host bridge to use the common
> pci_parse_request_of_pci_ranges().
> 
> There's no need to assign the resources to a temporary list first. Just
> use bridge->windows directly and remove all the temporary list handling.
> 
> Cc: Karthikeyan Mitran <m.karthikeyan@mobiveil.co.in>
> Cc: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Andrew Murray <andrew.murray@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---

Reviewed-by: Andrew Murray <andrew.murray@arm.com>

> v2:
> - New patch
> 
>  drivers/pci/controller/pcie-mobiveil.c | 26 +++++++-------------------
>  1 file changed, 7 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-mobiveil.c b/drivers/pci/controller/pcie-mobiveil.c
> index a45a6447b01d..4eab8624ce4d 100644
> --- a/drivers/pci/controller/pcie-mobiveil.c
> +++ b/drivers/pci/controller/pcie-mobiveil.c
> @@ -140,7 +140,6 @@ struct mobiveil_msi {			/* MSI information */
> 
>  struct mobiveil_pcie {
>  	struct platform_device *pdev;
> -	struct list_head resources;
>  	void __iomem *config_axi_slave_base;	/* endpoint config base */
>  	void __iomem *csr_axi_slave_base;	/* root port config base */
>  	void __iomem *apb_csr_base;	/* MSI register base */
> @@ -575,6 +574,7 @@ static void mobiveil_pcie_enable_msi(struct mobiveil_pcie *pcie)
> 
>  static int mobiveil_host_init(struct mobiveil_pcie *pcie)
>  {
> +	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
>  	u32 value, pab_ctrl, type;
>  	struct resource_entry *win;
> 
> @@ -631,7 +631,7 @@ static int mobiveil_host_init(struct mobiveil_pcie *pcie)
>  	program_ib_windows(pcie, WIN_NUM_0, 0, 0, MEM_WINDOW_TYPE, IB_WIN_SIZE);
> 
>  	/* Get the I/O and memory ranges from DT */
> -	resource_list_for_each_entry(win, &pcie->resources) {
> +	resource_list_for_each_entry(win, &bridge->windows) {
>  		if (resource_type(win->res) == IORESOURCE_MEM)
>  			type = MEM_WINDOW_TYPE;
>  		else if (resource_type(win->res) == IORESOURCE_IO)
> @@ -857,7 +857,6 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
>  	struct pci_bus *child;
>  	struct pci_host_bridge *bridge;
>  	struct device *dev = &pdev->dev;
> -	resource_size_t iobase;
>  	int ret;
> 
>  	/* allocate the PCIe port */
> @@ -875,11 +874,8 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
>  		return ret;
>  	}
> 
> -	INIT_LIST_HEAD(&pcie->resources);
> -
>  	/* parse the host bridge base addresses from the device tree file */
> -	ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
> -						    &pcie->resources, &iobase);
> +	ret = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL);
>  	if (ret) {
>  		dev_err(dev, "Getting bridge resources failed\n");
>  		return ret;
> @@ -892,24 +888,19 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
>  	ret = mobiveil_host_init(pcie);
>  	if (ret) {
>  		dev_err(dev, "Failed to initialize host\n");
> -		goto error;
> +		return ret;
>  	}
> 
>  	/* initialize the IRQ domains */
>  	ret = mobiveil_pcie_init_irq_domain(pcie);
>  	if (ret) {
>  		dev_err(dev, "Failed creating IRQ Domain\n");
> -		goto error;
> +		return ret;
>  	}
> 
>  	irq_set_chained_handler_and_data(pcie->irq, mobiveil_pcie_isr, pcie);
> 
> -	ret = devm_request_pci_bus_resources(dev, &pcie->resources);
> -	if (ret)
> -		goto error;
> -
>  	/* Initialize bridge */
> -	list_splice_init(&pcie->resources, &bridge->windows);
>  	bridge->dev.parent = dev;
>  	bridge->sysdata = pcie;
>  	bridge->busnr = pcie->root_bus_nr;
> @@ -920,13 +911,13 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
>  	ret = mobiveil_bringup_link(pcie);
>  	if (ret) {
>  		dev_info(dev, "link bring-up failed\n");
> -		goto error;
> +		return ret;
>  	}
> 
>  	/* setup the kernel resources for the newly added PCIe root bus */
>  	ret = pci_scan_root_bus_bridge(bridge);
>  	if (ret)
> -		goto error;
> +		return ret;
> 
>  	bus = bridge->bus;
> 
> @@ -936,9 +927,6 @@ static int mobiveil_pcie_probe(struct platform_device *pdev)
>  	pci_bus_add_devices(bus);
> 
>  	return 0;
> -error:
> -	pci_free_resource_list(&pcie->resources);
> -	return ret;
>  }
> 
>  static const struct of_device_id mobiveil_pcie_of_match[] = {
> --
> 2.20.1

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 10/25] PCI: rockchip: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 10/25] PCI: rockchip: " Rob Herring
@ 2019-10-18 15:51   ` Andrew Murray
  2019-10-20 21:36     ` Rob Herring
  0 siblings, 1 reply; 44+ messages in thread
From: Andrew Murray @ 2019-10-18 15:51 UTC (permalink / raw)
  To: Rob Herring
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, linux-pci, linux-arm-kernel,
	bcm-kernel-feedback-list, Gustavo Pimentel, Heiko Stuebner,
	Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran, Ley Foon Tan,
	Linus Walleij, linux-mediatek, linux-renesas-soc, linux-rockchip,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 03:06:32PM -0500, Rob Herring wrote:
> Convert the Rockchip host bridge to use the common
> pci_parse_request_of_pci_ranges().
> 
> There's no need to assign the resources to a temporary list first. Just
> use bridge->windows directly and remove all the temporary list handling.
> 
> Cc: Shawn Lin <shawn.lin@rock-chips.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Andrew Murray <andrew.murray@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Heiko Stuebner <heiko@sntech.de>
> Cc: linux-rockchip@lists.infradead.org
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - New patch
> 
>  drivers/pci/controller/pcie-rockchip-host.c | 36 ++++-----------------
>  1 file changed, 7 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c
> index ef8e677ce9d1..8d2e6f2e141e 100644
> --- a/drivers/pci/controller/pcie-rockchip-host.c
> +++ b/drivers/pci/controller/pcie-rockchip-host.c
> @@ -950,14 +950,10 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
>  	struct device *dev = &pdev->dev;
>  	struct pci_bus *bus, *child;
>  	struct pci_host_bridge *bridge;
> +	struct resource *bus_res;
>  	struct resource_entry *win;
> -	resource_size_t io_base;
> -	struct resource	*mem;
> -	struct resource	*io;
>  	int err;
> 
> -	LIST_HEAD(res);
> -
>  	if (!dev->of_node)
>  		return -ENODEV;
> 
> @@ -995,29 +991,20 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
>  	if (err < 0)
>  		goto err_deinit_port;
> 
> -	err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
> -						    &res, &io_base);
> +	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, &bus_res);
>  	if (err)
>  		goto err_remove_irq_domain;
> 
> -	err = devm_request_pci_bus_resources(dev, &res);
> -	if (err)
> -		goto err_free_res;
> +	rockchip->root_bus_nr = bus_res->start;
> 
>  	/* Get the I/O and memory ranges from DT */
> -	resource_list_for_each_entry(win, &res) {
> +	resource_list_for_each_entry(win, &bridge->windows) {
>  		switch (resource_type(win->res)) {
>  		case IORESOURCE_IO:
>  			io = win->res;
>  			io->name = "I/O";

In some patches of this series we drop the custom naming of memory resources,
yet in others, like this one, we preserve the custom naming.

Should we be consistent in preserving the existing naming?

Thanks,

Andrew Murray

>  			rockchip->io_size = resource_size(io);
>  			rockchip->io_bus_addr = io->start - win->offset;
> -			err = pci_remap_iospace(io, io_base);
> -			if (err) {
> -				dev_warn(dev, "error %d: failed to map resource %pR\n",
> -					 err, io);
> -				continue;
> -			}
>  			rockchip->io = io;
>  			break;
>  		case IORESOURCE_MEM:
> @@ -1026,9 +1013,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
>  			rockchip->mem_size = resource_size(mem);
>  			rockchip->mem_bus_addr = mem->start - win->offset;
>  			break;
> -		case IORESOURCE_BUS:
> -			rockchip->root_bus_nr = win->res->start;
> -			break;
>  		default:
>  			continue;
>  		}
> @@ -1036,15 +1020,14 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
> 
>  	err = rockchip_pcie_cfg_atu(rockchip);
>  	if (err)
> -		goto err_unmap_iospace;
> +		goto err_remove_irq_domain;
> 
>  	rockchip->msg_region = devm_ioremap(dev, rockchip->msg_bus_addr, SZ_1M);
>  	if (!rockchip->msg_region) {
>  		err = -ENOMEM;
> -		goto err_unmap_iospace;
> +		goto err_remove_irq_domain;
>  	}
> 
> -	list_splice_init(&res, &bridge->windows);
>  	bridge->dev.parent = dev;
>  	bridge->sysdata = rockchip;
>  	bridge->busnr = 0;
> @@ -1054,7 +1037,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
> 
>  	err = pci_scan_root_bus_bridge(bridge);
>  	if (err < 0)
> -		goto err_unmap_iospace;
> +		goto err_remove_irq_domain;
> 
>  	bus = bridge->bus;
> 
> @@ -1068,10 +1051,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
>  	pci_bus_add_devices(bus);
>  	return 0;
> 
> -err_unmap_iospace:
> -	pci_unmap_iospace(rockchip->io);
> -err_free_res:
> -	pci_free_resource_list(&res);
>  err_remove_irq_domain:
>  	irq_domain_remove(rockchip->irq_domain);
>  err_deinit_port:
> @@ -1097,7 +1076,6 @@ static int rockchip_pcie_remove(struct platform_device *pdev)
> 
>  	pci_stop_root_bus(rockchip->root_bus);
>  	pci_remove_root_bus(rockchip->root_bus);
> -	pci_unmap_iospace(rockchip->io);
>  	irq_domain_remove(rockchip->irq_domain);
> 
>  	rockchip_pcie_deinit_phys(rockchip);
> --
> 2.20.1

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 10/25] PCI: rockchip: Use pci_parse_request_of_pci_ranges()
  2019-10-18 15:51   ` Andrew Murray
@ 2019-10-20 21:36     ` Rob Herring
  0 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-20 21:36 UTC (permalink / raw)
  To: Andrew Murray
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, PCI,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, Linus Walleij,
	moderated list:ARM/Mediatek SoC support,
	open list:MEDIA DRIVERS FOR RENESAS - FCP,
	open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Fri, Oct 18, 2019 at 10:52 AM Andrew Murray <andrew.murray@arm.com> wrote:
>
> On Wed, Oct 16, 2019 at 03:06:32PM -0500, Rob Herring wrote:
> > Convert the Rockchip host bridge to use the common
> > pci_parse_request_of_pci_ranges().
> >
> > There's no need to assign the resources to a temporary list first. Just
> > use bridge->windows directly and remove all the temporary list handling.
> >
> > Cc: Shawn Lin <shawn.lin@rock-chips.com>
> > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> > Cc: Andrew Murray <andrew.murray@arm.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>
> > Cc: Heiko Stuebner <heiko@sntech.de>
> > Cc: linux-rockchip@lists.infradead.org
> > Signed-off-by: Rob Herring <robh@kernel.org>
> > ---
> > v2:
> > - New patch
> >
> >  drivers/pci/controller/pcie-rockchip-host.c | 36 ++++-----------------
> >  1 file changed, 7 insertions(+), 29 deletions(-)
> >
> > diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c
> > index ef8e677ce9d1..8d2e6f2e141e 100644
> > --- a/drivers/pci/controller/pcie-rockchip-host.c
> > +++ b/drivers/pci/controller/pcie-rockchip-host.c
> > @@ -950,14 +950,10 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
> >       struct device *dev = &pdev->dev;
> >       struct pci_bus *bus, *child;
> >       struct pci_host_bridge *bridge;
> > +     struct resource *bus_res;
> >       struct resource_entry *win;
> > -     resource_size_t io_base;
> > -     struct resource *mem;
> > -     struct resource *io;
> >       int err;
> >
> > -     LIST_HEAD(res);
> > -
> >       if (!dev->of_node)
> >               return -ENODEV;
> >
> > @@ -995,29 +991,20 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
> >       if (err < 0)
> >               goto err_deinit_port;
> >
> > -     err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
> > -                                                 &res, &io_base);
> > +     err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, &bus_res);
> >       if (err)
> >               goto err_remove_irq_domain;
> >
> > -     err = devm_request_pci_bus_resources(dev, &res);
> > -     if (err)
> > -             goto err_free_res;
> > +     rockchip->root_bus_nr = bus_res->start;
> >
> >       /* Get the I/O and memory ranges from DT */
> > -     resource_list_for_each_entry(win, &res) {
> > +     resource_list_for_each_entry(win, &bridge->windows) {
> >               switch (resource_type(win->res)) {
> >               case IORESOURCE_IO:
> >                       io = win->res;
> >                       io->name = "I/O";
>
> In some patches of this series we drop the custom naming of memory resources,
> yet in others, like this one, we preserve the custom naming.

Actually, patch #11 drops it for rockchip.

> Should we be consistent in preserving the existing naming?

The custom naming seems a bit pointless IMO and something mindlessly
copied and pasted around, so I'd rather see removing the remaining
cases. The only ones left AFAICT are designware and V3.

Rob

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 05/25] PCI: dwc: Use pci_parse_request_of_pci_ranges()
  2019-10-18 12:35   ` Andrew Murray
@ 2019-10-20 21:39     ` Rob Herring
  0 siblings, 0 replies; 44+ messages in thread
From: Rob Herring @ 2019-10-20 21:39 UTC (permalink / raw)
  To: Andrew Murray
  Cc: Bjorn Helgaas, Lorenzo Pieralisi, PCI,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, Linus Walleij,
	moderated list:ARM/Mediatek SoC support,
	open list:MEDIA DRIVERS FOR RENESAS - FCP,
	open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Fri, Oct 18, 2019 at 7:35 AM Andrew Murray <andrew.murray@arm.com> wrote:
>
> On Wed, Oct 16, 2019 at 03:06:27PM -0500, Rob Herring wrote:
> > Convert the Designware host bridge to use the common
> > pci_parse_request_of_pci_ranges().
> >
> > Cc: Jingoo Han <jingoohan1@gmail.com>
> > Cc: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
> > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> > Cc: Andrew Murray <andrew.murray@arm.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>
> > Signed-off-by: Rob Herring <robh@kernel.org>
> > ---
> > v2:
> > - New patch
> >
> >  .../pci/controller/dwc/pcie-designware-host.c | 28 ++++++-------------
> >  1 file changed, 8 insertions(+), 20 deletions(-)
> >
> > diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
> > index 0f36a926059a..aeec8b65eb97 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware-host.c
> > +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
> > @@ -319,7 +319,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
> >       struct device *dev = pci->dev;
> >       struct device_node *np = dev->of_node;
> >       struct platform_device *pdev = to_platform_device(dev);
> > -     struct resource_entry *win, *tmp;
> > +     struct resource_entry *win;
> >       struct pci_bus *child;
> >       struct pci_host_bridge *bridge;
> >       struct resource *cfg_res;
> > @@ -342,31 +342,19 @@ int dw_pcie_host_init(struct pcie_port *pp)
> >       if (!bridge)
> >               return -ENOMEM;
> >
> > -     ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff,
> > -                                     &bridge->windows, &pp->io_base);

[...]

> > +                     pp->io_bus_addr = pp->io->start - win->offset;
> > +                     pp->io_base = pci_pio_to_address(pp->io->start);
>
> Where did io_base come from? This wasn't here before, so why are we setting it
> now?

It was set in the removed devm_of_pci_get_host_bridge_resources().

Rob

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 12/25] PCI: v3-semi: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 12/25] PCI: v3-semi: Use pci_parse_request_of_pci_ranges() Rob Herring
@ 2019-10-21  0:38   ` Linus Walleij
  0 siblings, 0 replies; 44+ messages in thread
From: Linus Walleij @ 2019-10-21  0:38 UTC (permalink / raw)
  To: Rob Herring
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	Linux ARM, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, moderated list:ARM/Mediatek SoC support,
	Linux-Renesas, open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 10:07 PM Rob Herring <robh@kernel.org> wrote:

> Convert V3 host bridge to use the common
> pci_parse_request_of_pci_ranges().
>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Andrew Murray <andrew.murray@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - New patch

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 16/25] PCI: versatile: Use pci_parse_request_of_pci_ranges()
  2019-10-16 20:06 ` [PATCH v2 16/25] PCI: versatile: " Rob Herring
@ 2019-10-21  0:39   ` Linus Walleij
  0 siblings, 0 replies; 44+ messages in thread
From: Linus Walleij @ 2019-10-21  0:39 UTC (permalink / raw)
  To: Rob Herring
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	Linux ARM, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, moderated list:ARM/Mediatek SoC support,
	Linux-Renesas, open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 10:07 PM Rob Herring <robh@kernel.org> wrote:

> Convert ARM Versatile host bridge to use the common
> pci_parse_request_of_pci_ranges().
>
> There's no need to assign the resources to a temporary list first. Just
> use bridge->windows directly and remove all the temporary list handling.
>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - Fix 'mem' initial value to 1
> - Remove temporary resource list

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 17/25] PCI: versatile: Remove usage of PHYS_OFFSET
  2019-10-16 20:06 ` [PATCH v2 17/25] PCI: versatile: Remove usage of PHYS_OFFSET Rob Herring
@ 2019-10-21  0:40   ` Linus Walleij
  0 siblings, 0 replies; 44+ messages in thread
From: Linus Walleij @ 2019-10-21  0:40 UTC (permalink / raw)
  To: Rob Herring
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	Linux ARM, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, moderated list:ARM/Mediatek SoC support,
	Linux-Renesas, open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 10:07 PM Rob Herring <robh@kernel.org> wrote:

> PHYS_OFFSET is not universally defined on all arches and using it prevents
> enabling COMPILE_TEST. PAGE_OFFSET and __pa() are always available, so use
> them to get the physical start of memory address.
>
> This should have probably used 'dma-ranges' to get the address, but we
> don't want to force a DT update to do that. At least in QEMU, the SMAP
> registers have no effect (or perhaps the only value that is handled is 0).
>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Andrew Murray <andrew.murray@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> v2:
> - New patch to fix build failure on some arches.

Always wondered how to do this right, now I can fix other stuff!
Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 18/25] PCI: versatile: Enable COMPILE_TEST
  2019-10-16 20:06 ` [PATCH v2 18/25] PCI: versatile: Enable COMPILE_TEST Rob Herring
@ 2019-10-21  0:41   ` Linus Walleij
  0 siblings, 0 replies; 44+ messages in thread
From: Linus Walleij @ 2019-10-21  0:41 UTC (permalink / raw)
  To: Rob Herring
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	Linux ARM, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, moderated list:ARM/Mediatek SoC support,
	Linux-Renesas, open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 10:07 PM Rob Herring <robh@kernel.org> wrote:

> Since commit a574795bc383 ("PCI: generic,versatile: Remove unused
> pci_sys_data structures") the build dependency on ARM is gone, so let's
> enable COMPILE_TEST for versatile.
>
> Reviewed-by: Andrew Murray <andrew.murray@arm.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Rob Herring <robh@kernel.org>

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH v2 20/25] PCI: ftpci100: Use inbound resources for setup
  2019-10-16 20:06 ` [PATCH v2 20/25] PCI: ftpci100: Use inbound resources for setup Rob Herring
@ 2019-10-21  0:41   ` Linus Walleij
  0 siblings, 0 replies; 44+ messages in thread
From: Linus Walleij @ 2019-10-21  0:41 UTC (permalink / raw)
  To: Rob Herring
  Cc: Andrew Murray, Bjorn Helgaas, Lorenzo Pieralisi, linux-pci,
	Linux ARM, bcm-kernel-feedback-list, Gustavo Pimentel,
	Heiko Stuebner, Hou Zhiqiang, Jingoo Han, Karthikeyan Mitran,
	Ley Foon Tan, moderated list:ARM/Mediatek SoC support,
	Linux-Renesas, open list:ARM/Rockchip SoC...,
	Matthias Brugger, Michal Simek, Ray Jui, rfi, Ryder Lee,
	Scott Branden, Shawn Lin, Simon Horman, Srinath Mannam,
	Thomas Petazzoni, Toan Le, Tom Joseph, Will Deacon

On Wed, Oct 16, 2019 at 10:07 PM Rob Herring <robh@kernel.org> wrote:

> Now that the helpers provide the inbound resources in the host bridge
> 'dma_ranges' resource list, convert Faraday ftpci100 host bridge to use
> the resource list to setup the inbound addresses.
>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Reviewed-by: Andrew Murray <andrew.murray@arm.com>
> Signed-off-by: Rob Herring <robh@kernel.org>

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 44+ messages in thread

end of thread, other threads:[~2019-10-21  0:42 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-16 20:06 [PATCH v2 00/25] PCI host resource consolidation Rob Herring
2019-10-16 20:06 ` [PATCH v2 01/25] resource: Add a resource_list_get_entry_of_type helper Rob Herring
2019-10-17  7:25   ` Christoph Hellwig
2019-10-18 12:14     ` Andrew Murray
2019-10-16 20:06 ` [PATCH v2 02/25] PCI: Export pci_parse_request_of_pci_ranges() Rob Herring
2019-10-18 12:06   ` Andrew Murray
2019-10-16 20:06 ` [PATCH v2 03/25] PCI: aardvark: Use pci_parse_request_of_pci_ranges() Rob Herring
2019-10-16 20:06 ` [PATCH v2 04/25] PCI: altera: " Rob Herring
2019-10-18 12:09   ` Andrew Murray
2019-10-16 20:06 ` [PATCH v2 05/25] PCI: dwc: " Rob Herring
2019-10-18 12:35   ` Andrew Murray
2019-10-20 21:39     ` Rob Herring
2019-10-16 20:06 ` [PATCH v2 06/25] PCI: faraday: Use pci_parse_request_of_pci_ranges Rob Herring
2019-10-18 12:57   ` Andrew Murray
2019-10-16 20:06 ` [PATCH v2 07/25] PCI: iproc: Use pci_parse_request_of_pci_ranges() Rob Herring
2019-10-18 13:00   ` Andrew Murray
2019-10-16 20:06 ` [PATCH v2 08/25] PCI: mediatek: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 09/25] PCI: mobiveil: " Rob Herring
2019-10-18 15:41   ` Andrew Murray
2019-10-16 20:06 ` [PATCH v2 10/25] PCI: rockchip: " Rob Herring
2019-10-18 15:51   ` Andrew Murray
2019-10-20 21:36     ` Rob Herring
2019-10-16 20:06 ` [PATCH v2 11/25] PCI: rockchip: Drop storing driver private outbound resource data Rob Herring
2019-10-17  7:26   ` Christoph Hellwig
2019-10-17 12:24     ` Rob Herring
2019-10-16 20:06 ` [PATCH v2 12/25] PCI: v3-semi: Use pci_parse_request_of_pci_ranges() Rob Herring
2019-10-21  0:38   ` Linus Walleij
2019-10-16 20:06 ` [PATCH v2 13/25] PCI: xgene: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 14/25] PCI: xilinx: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 15/25] PCI: xilinx-nwl: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 16/25] PCI: versatile: " Rob Herring
2019-10-21  0:39   ` Linus Walleij
2019-10-16 20:06 ` [PATCH v2 17/25] PCI: versatile: Remove usage of PHYS_OFFSET Rob Herring
2019-10-21  0:40   ` Linus Walleij
2019-10-16 20:06 ` [PATCH v2 18/25] PCI: versatile: Enable COMPILE_TEST Rob Herring
2019-10-21  0:41   ` Linus Walleij
2019-10-16 20:06 ` [PATCH v2 19/25] PCI: of: Add inbound resource parsing to helpers Rob Herring
2019-10-16 20:06 ` [PATCH v2 20/25] PCI: ftpci100: Use inbound resources for setup Rob Herring
2019-10-21  0:41   ` Linus Walleij
2019-10-16 20:06 ` [PATCH v2 21/25] PCI: v3-semi: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 22/25] PCI: xgene: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 23/25] PCI: iproc: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 24/25] PCI: rcar: " Rob Herring
2019-10-16 20:06 ` [PATCH v2 25/25] PCI: Make devm_of_pci_get_host_bridge_resources() static Rob Herring

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).