All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Fix rcar-pcie for arm64
@ 2015-11-02 16:36 ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Phil Edworthy

The first patches fixes the build problem, and the second patch reverts the
patch that removed the driver from arm64 builds. The final patch add a compat
string for the r8a7795 (arm64) device.

Tested on arm Koelsch board, all ok.

Tested on arm64 Salvator-X board using renesas-drivers-2015-10-27-v4.3-rc7 from
git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git with PCI
next merged. 
Apart from patches to add the PCIe clock and DT nodes, I had to revert these
patches to get it to work on arm64:
 f075915ac0b1 ("PCI/MSI: Drop domain field from msi_controller")
 d8a1cb757550 ("PCI/MSI: Let pci_msi_get_domain use struct device::msi_domain")
I'll look into this, but it doesn't stop us from applying these patches.

Harunobu Kurokawa (1):
  PCI: pcie-rcar: Add support for R-Car H3.

Phil Edworthy (2):
  PCI: pcie-rcar: Convert to DT resource parsing API
  Revert "PCI: rcar: Build pcie-rcar.c only on ARM"

 Documentation/devicetree/bindings/pci/rcar-pci.txt |   3 +-
 drivers/pci/host/Kconfig                           |   3 +-
 drivers/pci/host/pcie-rcar.c                       | 118 +++++++++++++--------
 3 files changed, 78 insertions(+), 46 deletions(-)

-- 
1.9.1


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

* [PATCH 0/3] Fix rcar-pcie for arm64
@ 2015-11-02 16:36 ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Phil Edworthy

The first patches fixes the build problem, and the second patch reverts the
patch that removed the driver from arm64 builds. The final patch add a compat
string for the r8a7795 (arm64) device.

Tested on arm Koelsch board, all ok.

Tested on arm64 Salvator-X board using renesas-drivers-2015-10-27-v4.3-rc7 from
git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git with PCI
next merged. 
Apart from patches to add the PCIe clock and DT nodes, I had to revert these
patches to get it to work on arm64:
 f075915ac0b1 ("PCI/MSI: Drop domain field from msi_controller")
 d8a1cb757550 ("PCI/MSI: Let pci_msi_get_domain use struct device::msi_domain")
I'll look into this, but it doesn't stop us from applying these patches.

Harunobu Kurokawa (1):
  PCI: pcie-rcar: Add support for R-Car H3.

Phil Edworthy (2):
  PCI: pcie-rcar: Convert to DT resource parsing API
  Revert "PCI: rcar: Build pcie-rcar.c only on ARM"

 Documentation/devicetree/bindings/pci/rcar-pci.txt |   3 +-
 drivers/pci/host/Kconfig                           |   3 +-
 drivers/pci/host/pcie-rcar.c                       | 118 +++++++++++++--------
 3 files changed, 78 insertions(+), 46 deletions(-)

-- 
1.9.1


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

* [PATCH 1/3] PCI: pcie-rcar: Convert to DT resource parsing API
  2015-11-02 16:36 ` Phil Edworthy
@ 2015-11-02 16:36   ` Phil Edworthy
  -1 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Phil Edworthy

The main purpose of this change is to avoid calling pci_ioremap_io() as
this is not available on arm64. However, instead of doing the range passing
in this driver we can utilise of_pci_get_host_bridge_resources().

This is similar to changes made to the generic PCI host driver in commit
dbf9826d "PCI: generic: Convert to DT resource parsing API".

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
---
 drivers/pci/host/pcie-rcar.c | 117 +++++++++++++++++++++++++++----------------
 1 file changed, 74 insertions(+), 43 deletions(-)

diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index f4fa6c5..27c0521 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -108,8 +108,6 @@
 #define RCAR_PCI_MAX_RESOURCES 4
 #define MAX_NR_INBOUND_MAPS 6
 
-static unsigned long global_io_offset;
-
 struct rcar_msi {
 	DECLARE_BITMAP(used, INT_PCI_MSI_NR);
 	struct irq_domain *domain;
@@ -138,8 +136,7 @@ struct rcar_pcie {
 #endif
 	struct device		*dev;
 	void __iomem		*base;
-	struct resource		res[RCAR_PCI_MAX_RESOURCES];
-	struct resource		busn;
+	struct list_head	resources;
 	int			root_bus_nr;
 	struct clk		*clk;
 	struct clk		*bus_clk;
@@ -323,10 +320,9 @@ static struct pci_ops rcar_pcie_ops = {
 	.write	= rcar_pcie_write_conf,
 };
 
-static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie)
+static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie,
+				   struct resource *res)
 {
-	struct resource *res = &pcie->res[win];
-
 	/* Setup PCIe address space mappings for each resource */
 	resource_size_t size;
 	resource_size_t res_start;
@@ -359,31 +355,33 @@ static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie)
 	rcar_pci_write_reg(pcie, mask, PCIEPTCTLR(win));
 }
 
-static int rcar_pcie_setup(struct list_head *resource, struct rcar_pcie *pcie)
+static int rcar_pcie_setup(struct list_head *resource, struct rcar_pcie *pci)
 {
-	struct resource *res;
-	int i;
-
-	pcie->root_bus_nr = pcie->busn.start;
+	struct resource_entry *win;
+	int i = 0;
 
 	/* Setup PCI resources */
-	for (i = 0; i < RCAR_PCI_MAX_RESOURCES; i++) {
+	resource_list_for_each_entry(win, &pci->resources) {
+		struct resource *res = win->res;
 
-		res = &pcie->res[i];
 		if (!res->flags)
 			continue;
 
-		rcar_pcie_setup_window(i, pcie);
-
-		if (res->flags & IORESOURCE_IO) {
-			phys_addr_t io_start = pci_pio_to_address(res->start);
-			pci_ioremap_io(global_io_offset, io_start);
-			global_io_offset += SZ_64K;
+		switch (resource_type(res)) {
+		case IORESOURCE_IO:
+		case IORESOURCE_MEM:
+			rcar_pcie_setup_window(i, pci, res);
+			i++;
+			break;
+		case IORESOURCE_BUS:
+			pci->root_bus_nr = res->start;
+			break;
+		default:
+			continue;
 		}
 
 		pci_add_resource(resource, res);
 	}
-	pci_add_resource(resource, &pcie->busn);
 
 	return 1;
 }
@@ -923,14 +921,64 @@ static const struct of_device_id rcar_pcie_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, rcar_pcie_of_match);
 
+static void rcar_pcie_release_of_pci_ranges(struct rcar_pcie *pci)
+{
+	pci_free_resource_list(&pci->resources);
+}
+
+static int rcar_pcie_parse_request_of_pci_ranges(struct rcar_pcie *pci)
+{
+	int err, res_valid = 0;
+	struct device *dev = pci->dev;
+	struct device_node *np = dev->of_node;
+	resource_size_t iobase;
+	struct resource_entry *win;
+
+	err = of_pci_get_host_bridge_resources(np, 0, 0xff, &pci->resources, &iobase);
+	if (err)
+		return err;
+
+	resource_list_for_each_entry(win, &pci->resources) {
+		struct resource *parent, *res = win->res;
+
+		switch (resource_type(res)) {
+		case IORESOURCE_IO:
+			parent = &ioport_resource;
+			err = pci_remap_iospace(res, iobase);
+			if (err) {
+				dev_warn(dev, "error %d: failed to map resource %pR\n",
+					 err, res);
+				continue;
+			}
+			break;
+		case IORESOURCE_MEM:
+			parent = &iomem_resource;
+			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
+			break;
+
+		case IORESOURCE_BUS:
+		default:
+			continue;
+		}
+
+		err = devm_request_resource(dev, parent, res);
+		if (err)
+			goto out_release_res;
+	}
+
+	return 0;
+
+out_release_res:
+	rcar_pcie_release_of_pci_ranges(pci);
+	return err;
+}
+
 static int rcar_pcie_probe(struct platform_device *pdev)
 {
 	struct rcar_pcie *pcie;
 	unsigned int data;
-	struct of_pci_range range;
-	struct of_pci_range_parser parser;
 	const struct of_device_id *of_id;
-	int err, win = 0;
+	int err;
 	int (*hw_init_fn)(struct rcar_pcie *);
 
 	pcie = devm_kzalloc(&pdev->dev, sizeof(*pcie), GFP_KERNEL);
@@ -940,16 +988,9 @@ static int rcar_pcie_probe(struct platform_device *pdev)
 	pcie->dev = &pdev->dev;
 	platform_set_drvdata(pdev, pcie);
 
-	/* Get the bus range */
-	if (of_pci_parse_bus_range(pdev->dev.of_node, &pcie->busn)) {
-		dev_err(&pdev->dev, "failed to parse bus-range property\n");
-		return -EINVAL;
-	}
+	INIT_LIST_HEAD(&pcie->resources);
 
-	if (of_pci_range_parser_init(&parser, pdev->dev.of_node)) {
-		dev_err(&pdev->dev, "missing ranges property\n");
-		return -EINVAL;
-	}
+	rcar_pcie_parse_request_of_pci_ranges(pcie);
 
 	err = rcar_pcie_get_resources(pdev, pcie);
 	if (err < 0) {
@@ -957,16 +998,6 @@ static int rcar_pcie_probe(struct platform_device *pdev)
 		return err;
 	}
 
-	for_each_of_pci_range(&parser, &range) {
-		err = of_pci_range_to_resource(&range, pdev->dev.of_node,
-						&pcie->res[win++]);
-		if (err < 0)
-			return err;
-
-		if (win > RCAR_PCI_MAX_RESOURCES)
-			break;
-	}
-
 	 err = rcar_pcie_parse_map_dma_ranges(pcie, pdev->dev.of_node);
 	 if (err)
 		return err;
-- 
1.9.1


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

* [PATCH 1/3] PCI: pcie-rcar: Convert to DT resource parsing API
@ 2015-11-02 16:36   ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Phil Edworthy

The main purpose of this change is to avoid calling pci_ioremap_io() as
this is not available on arm64. However, instead of doing the range passing
in this driver we can utilise of_pci_get_host_bridge_resources().

This is similar to changes made to the generic PCI host driver in commit
dbf9826d "PCI: generic: Convert to DT resource parsing API".

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
---
 drivers/pci/host/pcie-rcar.c | 117 +++++++++++++++++++++++++++----------------
 1 file changed, 74 insertions(+), 43 deletions(-)

diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index f4fa6c5..27c0521 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -108,8 +108,6 @@
 #define RCAR_PCI_MAX_RESOURCES 4
 #define MAX_NR_INBOUND_MAPS 6
 
-static unsigned long global_io_offset;
-
 struct rcar_msi {
 	DECLARE_BITMAP(used, INT_PCI_MSI_NR);
 	struct irq_domain *domain;
@@ -138,8 +136,7 @@ struct rcar_pcie {
 #endif
 	struct device		*dev;
 	void __iomem		*base;
-	struct resource		res[RCAR_PCI_MAX_RESOURCES];
-	struct resource		busn;
+	struct list_head	resources;
 	int			root_bus_nr;
 	struct clk		*clk;
 	struct clk		*bus_clk;
@@ -323,10 +320,9 @@ static struct pci_ops rcar_pcie_ops = {
 	.write	= rcar_pcie_write_conf,
 };
 
-static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie)
+static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie,
+				   struct resource *res)
 {
-	struct resource *res = &pcie->res[win];
-
 	/* Setup PCIe address space mappings for each resource */
 	resource_size_t size;
 	resource_size_t res_start;
@@ -359,31 +355,33 @@ static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie)
 	rcar_pci_write_reg(pcie, mask, PCIEPTCTLR(win));
 }
 
-static int rcar_pcie_setup(struct list_head *resource, struct rcar_pcie *pcie)
+static int rcar_pcie_setup(struct list_head *resource, struct rcar_pcie *pci)
 {
-	struct resource *res;
-	int i;
-
-	pcie->root_bus_nr = pcie->busn.start;
+	struct resource_entry *win;
+	int i = 0;
 
 	/* Setup PCI resources */
-	for (i = 0; i < RCAR_PCI_MAX_RESOURCES; i++) {
+	resource_list_for_each_entry(win, &pci->resources) {
+		struct resource *res = win->res;
 
-		res = &pcie->res[i];
 		if (!res->flags)
 			continue;
 
-		rcar_pcie_setup_window(i, pcie);
-
-		if (res->flags & IORESOURCE_IO) {
-			phys_addr_t io_start = pci_pio_to_address(res->start);
-			pci_ioremap_io(global_io_offset, io_start);
-			global_io_offset += SZ_64K;
+		switch (resource_type(res)) {
+		case IORESOURCE_IO:
+		case IORESOURCE_MEM:
+			rcar_pcie_setup_window(i, pci, res);
+			i++;
+			break;
+		case IORESOURCE_BUS:
+			pci->root_bus_nr = res->start;
+			break;
+		default:
+			continue;
 		}
 
 		pci_add_resource(resource, res);
 	}
-	pci_add_resource(resource, &pcie->busn);
 
 	return 1;
 }
@@ -923,14 +921,64 @@ static const struct of_device_id rcar_pcie_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, rcar_pcie_of_match);
 
+static void rcar_pcie_release_of_pci_ranges(struct rcar_pcie *pci)
+{
+	pci_free_resource_list(&pci->resources);
+}
+
+static int rcar_pcie_parse_request_of_pci_ranges(struct rcar_pcie *pci)
+{
+	int err, res_valid = 0;
+	struct device *dev = pci->dev;
+	struct device_node *np = dev->of_node;
+	resource_size_t iobase;
+	struct resource_entry *win;
+
+	err = of_pci_get_host_bridge_resources(np, 0, 0xff, &pci->resources, &iobase);
+	if (err)
+		return err;
+
+	resource_list_for_each_entry(win, &pci->resources) {
+		struct resource *parent, *res = win->res;
+
+		switch (resource_type(res)) {
+		case IORESOURCE_IO:
+			parent = &ioport_resource;
+			err = pci_remap_iospace(res, iobase);
+			if (err) {
+				dev_warn(dev, "error %d: failed to map resource %pR\n",
+					 err, res);
+				continue;
+			}
+			break;
+		case IORESOURCE_MEM:
+			parent = &iomem_resource;
+			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
+			break;
+
+		case IORESOURCE_BUS:
+		default:
+			continue;
+		}
+
+		err = devm_request_resource(dev, parent, res);
+		if (err)
+			goto out_release_res;
+	}
+
+	return 0;
+
+out_release_res:
+	rcar_pcie_release_of_pci_ranges(pci);
+	return err;
+}
+
 static int rcar_pcie_probe(struct platform_device *pdev)
 {
 	struct rcar_pcie *pcie;
 	unsigned int data;
-	struct of_pci_range range;
-	struct of_pci_range_parser parser;
 	const struct of_device_id *of_id;
-	int err, win = 0;
+	int err;
 	int (*hw_init_fn)(struct rcar_pcie *);
 
 	pcie = devm_kzalloc(&pdev->dev, sizeof(*pcie), GFP_KERNEL);
@@ -940,16 +988,9 @@ static int rcar_pcie_probe(struct platform_device *pdev)
 	pcie->dev = &pdev->dev;
 	platform_set_drvdata(pdev, pcie);
 
-	/* Get the bus range */
-	if (of_pci_parse_bus_range(pdev->dev.of_node, &pcie->busn)) {
-		dev_err(&pdev->dev, "failed to parse bus-range property\n");
-		return -EINVAL;
-	}
+	INIT_LIST_HEAD(&pcie->resources);
 
-	if (of_pci_range_parser_init(&parser, pdev->dev.of_node)) {
-		dev_err(&pdev->dev, "missing ranges property\n");
-		return -EINVAL;
-	}
+	rcar_pcie_parse_request_of_pci_ranges(pcie);
 
 	err = rcar_pcie_get_resources(pdev, pcie);
 	if (err < 0) {
@@ -957,16 +998,6 @@ static int rcar_pcie_probe(struct platform_device *pdev)
 		return err;
 	}
 
-	for_each_of_pci_range(&parser, &range) {
-		err = of_pci_range_to_resource(&range, pdev->dev.of_node,
-						&pcie->res[win++]);
-		if (err < 0)
-			return err;
-
-		if (win > RCAR_PCI_MAX_RESOURCES)
-			break;
-	}
-
 	 err = rcar_pcie_parse_map_dma_ranges(pcie, pdev->dev.of_node);
 	 if (err)
 		return err;
-- 
1.9.1


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

* [PATCH 2/3] Revert "PCI: rcar: Build pcie-rcar.c only on ARM"
  2015-11-02 16:36 ` Phil Edworthy
@ 2015-11-02 16:36   ` Phil Edworthy
  -1 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Phil Edworthy

Now that we can build on arm64, revert commit 7c537c67d2e4
("PCI: rcar: Build pcie-rcar.c only on ARM").

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
---
 drivers/pci/host/Kconfig | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/pci/host/Kconfig b/drivers/pci/host/Kconfig
index 2af0571..ad27664 100644
--- a/drivers/pci/host/Kconfig
+++ b/drivers/pci/host/Kconfig
@@ -48,8 +48,7 @@ config PCI_RCAR_GEN2
 
 config PCI_RCAR_GEN2_PCIE
 	bool "Renesas R-Car PCIe controller"
-	depends on ARM
-	depends on ARCH_SHMOBILE || COMPILE_TEST
+	depends on ARCH_SHMOBILE || (ARM && COMPILE_TEST)
 	help
 	  Say Y here if you want PCIe controller support on R-Car Gen2 SoCs.
 
-- 
1.9.1


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

* [PATCH 2/3] Revert "PCI: rcar: Build pcie-rcar.c only on ARM"
@ 2015-11-02 16:36   ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Phil Edworthy

Now that we can build on arm64, revert commit 7c537c67d2e4
("PCI: rcar: Build pcie-rcar.c only on ARM").

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
---
 drivers/pci/host/Kconfig | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/pci/host/Kconfig b/drivers/pci/host/Kconfig
index 2af0571..ad27664 100644
--- a/drivers/pci/host/Kconfig
+++ b/drivers/pci/host/Kconfig
@@ -48,8 +48,7 @@ config PCI_RCAR_GEN2
 
 config PCI_RCAR_GEN2_PCIE
 	bool "Renesas R-Car PCIe controller"
-	depends on ARM
-	depends on ARCH_SHMOBILE || COMPILE_TEST
+	depends on ARCH_SHMOBILE || (ARM && COMPILE_TEST)
 	help
 	  Say Y here if you want PCIe controller support on R-Car Gen2 SoCs.
 
-- 
1.9.1


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

* [PATCH 3/3] PCI: pcie-rcar: Add support for R-Car H3.
  2015-11-02 16:36 ` Phil Edworthy
  (?)
@ 2015-11-02 16:36     ` Phil Edworthy
  -1 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman,
	linux-pci-u79uwXL29TY76Z2rM5mHXA,
	linux-sh-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Harunobu Kurokawa,
	Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree-u79uwXL29TY76Z2rM5mHXA

From: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>

R-Car H3 device is r8a7795

Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
---
 Documentation/devicetree/bindings/pci/rcar-pci.txt | 3 ++-
 drivers/pci/host/pcie-rcar.c                       | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/pci/rcar-pci.txt b/Documentation/devicetree/bindings/pci/rcar-pci.txt
index 29d3b98..ab2e75f 100644
--- a/Documentation/devicetree/bindings/pci/rcar-pci.txt
+++ b/Documentation/devicetree/bindings/pci/rcar-pci.txt
@@ -2,7 +2,8 @@
 
 Required properties:
 - compatible: should contain one of the following
-	"renesas,pcie-r8a7779", "renesas,pcie-r8a7790", "renesas,pcie-r8a7791"
+	"renesas,pcie-r8a7779", "renesas,pcie-r8a7790", "renesas,pcie-r8a7791",
+	"renesas,pcie-r8a7795"
 - reg: base address and length of the pcie controller registers.
 - #address-cells: set to <3>
 - #size-cells: set to <2>
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index 27c0521..2377bf0 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -917,6 +917,7 @@ static const struct of_device_id rcar_pcie_of_match[] = {
 	{ .compatible = "renesas,pcie-r8a7779", .data = rcar_pcie_hw_init_h1 },
 	{ .compatible = "renesas,pcie-r8a7790", .data = rcar_pcie_hw_init },
 	{ .compatible = "renesas,pcie-r8a7791", .data = rcar_pcie_hw_init },
+	{ .compatible = "renesas,pcie-r8a7795", .data = rcar_pcie_hw_init },
 	{},
 };
 MODULE_DEVICE_TABLE(of, rcar_pcie_of_match);
-- 
1.9.1


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

* [PATCH 3/3] PCI: pcie-rcar: Add support for R-Car H3.
@ 2015-11-02 16:36     ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Harunobu Kurokawa, Rob Herring,
	Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, devicetree

From: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>

R-Car H3 device is r8a7795

Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
---
 Documentation/devicetree/bindings/pci/rcar-pci.txt | 3 ++-
 drivers/pci/host/pcie-rcar.c                       | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/pci/rcar-pci.txt b/Documentation/devicetree/bindings/pci/rcar-pci.txt
index 29d3b98..ab2e75f 100644
--- a/Documentation/devicetree/bindings/pci/rcar-pci.txt
+++ b/Documentation/devicetree/bindings/pci/rcar-pci.txt
@@ -2,7 +2,8 @@
 
 Required properties:
 - compatible: should contain one of the following
-	"renesas,pcie-r8a7779", "renesas,pcie-r8a7790", "renesas,pcie-r8a7791"
+	"renesas,pcie-r8a7779", "renesas,pcie-r8a7790", "renesas,pcie-r8a7791",
+	"renesas,pcie-r8a7795"
 - reg: base address and length of the pcie controller registers.
 - #address-cells: set to <3>
 - #size-cells: set to <2>
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index 27c0521..2377bf0 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -917,6 +917,7 @@ static const struct of_device_id rcar_pcie_of_match[] = {
 	{ .compatible = "renesas,pcie-r8a7779", .data = rcar_pcie_hw_init_h1 },
 	{ .compatible = "renesas,pcie-r8a7790", .data = rcar_pcie_hw_init },
 	{ .compatible = "renesas,pcie-r8a7791", .data = rcar_pcie_hw_init },
+	{ .compatible = "renesas,pcie-r8a7795", .data = rcar_pcie_hw_init },
 	{},
 };
 MODULE_DEVICE_TABLE(of, rcar_pcie_of_match);
-- 
1.9.1


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

* [PATCH 3/3] PCI: pcie-rcar: Add support for R-Car H3.
@ 2015-11-02 16:36     ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-02 16:36 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Wolfram Sang, Geert Uytterhoeven, Simon Horman,
	linux-pci-u79uwXL29TY76Z2rM5mHXA,
	linux-sh-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Harunobu Kurokawa,
	Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree-u79uwXL29TY76Z2rM5mHXA

From: Harunobu Kurokawa <harunobu.kurokawa.dn-zM6kxYcvzFBBDgjK7y7TUQ@public.gmane.org>

R-Car H3 device is r8a7795

Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn-zM6kxYcvzFBBDgjK7y7TUQ@public.gmane.org>
---
 Documentation/devicetree/bindings/pci/rcar-pci.txt | 3 ++-
 drivers/pci/host/pcie-rcar.c                       | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/pci/rcar-pci.txt b/Documentation/devicetree/bindings/pci/rcar-pci.txt
index 29d3b98..ab2e75f 100644
--- a/Documentation/devicetree/bindings/pci/rcar-pci.txt
+++ b/Documentation/devicetree/bindings/pci/rcar-pci.txt
@@ -2,7 +2,8 @@
 
 Required properties:
 - compatible: should contain one of the following
-	"renesas,pcie-r8a7779", "renesas,pcie-r8a7790", "renesas,pcie-r8a7791"
+	"renesas,pcie-r8a7779", "renesas,pcie-r8a7790", "renesas,pcie-r8a7791",
+	"renesas,pcie-r8a7795"
 - reg: base address and length of the pcie controller registers.
 - #address-cells: set to <3>
 - #size-cells: set to <2>
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index 27c0521..2377bf0 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -917,6 +917,7 @@ static const struct of_device_id rcar_pcie_of_match[] = {
 	{ .compatible = "renesas,pcie-r8a7779", .data = rcar_pcie_hw_init_h1 },
 	{ .compatible = "renesas,pcie-r8a7790", .data = rcar_pcie_hw_init },
 	{ .compatible = "renesas,pcie-r8a7791", .data = rcar_pcie_hw_init },
+	{ .compatible = "renesas,pcie-r8a7795", .data = rcar_pcie_hw_init },
 	{},
 };
 MODULE_DEVICE_TABLE(of, rcar_pcie_of_match);
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH 0/3] Fix rcar-pcie for arm64
  2015-11-02 16:36 ` Phil Edworthy
@ 2015-11-02 21:33   ` Wolfram Sang
  -1 siblings, 0 replies; 19+ messages in thread
From: Wolfram Sang @ 2015-11-02 21:33 UTC (permalink / raw)
  To: Phil Edworthy
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 613 bytes --]


> The first patches fixes the build problem, and the second patch reverts the
> patch that removed the driver from arm64 builds. The final patch add a compat
> string for the r8a7795 (arm64) device.

Thanks. I will test them next week when I have access to my board again.

> Apart from patches to add the PCIe clock and DT nodes, I had to revert these
> patches to get it to work on arm64:
>  f075915ac0b1 ("PCI/MSI: Drop domain field from msi_controller")
>  d8a1cb757550 ("PCI/MSI: Let pci_msi_get_domain use struct device::msi_domain")

Does that solve the MSI problems you mentioned?

Regards,

   Wolfram


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* Re: [PATCH 0/3] Fix rcar-pcie for arm64
@ 2015-11-02 21:33   ` Wolfram Sang
  0 siblings, 0 replies; 19+ messages in thread
From: Wolfram Sang @ 2015-11-02 21:33 UTC (permalink / raw)
  To: Phil Edworthy
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 613 bytes --]


> The first patches fixes the build problem, and the second patch reverts the
> patch that removed the driver from arm64 builds. The final patch add a compat
> string for the r8a7795 (arm64) device.

Thanks. I will test them next week when I have access to my board again.

> Apart from patches to add the PCIe clock and DT nodes, I had to revert these
> patches to get it to work on arm64:
>  f075915ac0b1 ("PCI/MSI: Drop domain field from msi_controller")
>  d8a1cb757550 ("PCI/MSI: Let pci_msi_get_domain use struct device::msi_domain")

Does that solve the MSI problems you mentioned?

Regards,

   Wolfram


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* RE: [PATCH 0/3] Fix rcar-pcie for arm64
  2015-11-02 21:33   ` Wolfram Sang
@ 2015-11-03  9:00     ` Phil Edworthy
  -1 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-03  9:00 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

Hi Wolfram,

On 02 November 2015 21:33, Wolfram wrote:
> > The first patches fixes the build problem, and the second patch reverts the
> > patch that removed the driver from arm64 builds. The final patch add a compat
> > string for the r8a7795 (arm64) device.
> 
> Thanks. I will test them next week when I have access to my board again.
It's worth mentioning that I had some troubles on my Salvator-X board
with some cards not being able to link up. Since my board has a socketed chip
and the board was designed for it not to be via a socket, and this is such a low
level functionality, I think this is HW related. My Intel Gigabit CT Desktop card
always works.
Also note that this PCIe controller only supports a 32-bit AXI address range,
so you need to limit memory to within the 4GiB address space. As far as I am
aware, there is no way to limit the dma mask that card drivers use via the
controller. The plan is to add support this via IOMMU.
 
> > Apart from patches to add the PCIe clock and DT nodes, I had to revert these
> > patches to get it to work on arm64:
> >  f075915ac0b1 ("PCI/MSI: Drop domain field from msi_controller")
> >  d8a1cb757550 ("PCI/MSI: Let pci_msi_get_domain use struct
> device::msi_domain")
> 
> Does that solve the MSI problems you mentioned?
It avoids the problem, but I have a proper fix in the pipeline which just needs
more testing.

Thanks
Phil


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

* RE: [PATCH 0/3] Fix rcar-pcie for arm64
@ 2015-11-03  9:00     ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-03  9:00 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

Hi Wolfram,

On 02 November 2015 21:33, Wolfram wrote:
> > The first patches fixes the build problem, and the second patch reverts the
> > patch that removed the driver from arm64 builds. The final patch add a compat
> > string for the r8a7795 (arm64) device.
> 
> Thanks. I will test them next week when I have access to my board again.
It's worth mentioning that I had some troubles on my Salvator-X board
with some cards not being able to link up. Since my board has a socketed chip
and the board was designed for it not to be via a socket, and this is such a low
level functionality, I think this is HW related. My Intel Gigabit CT Desktop card
always works.
Also note that this PCIe controller only supports a 32-bit AXI address range,
so you need to limit memory to within the 4GiB address space. As far as I am
aware, there is no way to limit the dma mask that card drivers use via the
controller. The plan is to add support this via IOMMU.
 
> > Apart from patches to add the PCIe clock and DT nodes, I had to revert these
> > patches to get it to work on arm64:
> >  f075915ac0b1 ("PCI/MSI: Drop domain field from msi_controller")
> >  d8a1cb757550 ("PCI/MSI: Let pci_msi_get_domain use struct
> device::msi_domain")
> 
> Does that solve the MSI problems you mentioned?
It avoids the problem, but I have a proper fix in the pipeline which just needs
more testing.

Thanks
Phil


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

* Re: [PATCH 1/3] PCI: pcie-rcar: Convert to DT resource parsing API
  2015-11-02 16:36   ` Phil Edworthy
@ 2015-11-07 13:29     ` Wolfram Sang
  -1 siblings, 0 replies; 19+ messages in thread
From: Wolfram Sang @ 2015-11-07 13:29 UTC (permalink / raw)
  To: Phil Edworthy
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 953 bytes --]

On Mon, Nov 02, 2015 at 04:36:13PM +0000, Phil Edworthy wrote:
> The main purpose of this change is to avoid calling pci_ioremap_io() as
> this is not available on arm64. However, instead of doing the range passing
> in this driver we can utilise of_pci_get_host_bridge_resources().
> 
> This is similar to changes made to the generic PCI host driver in commit
> dbf9826d "PCI: generic: Convert to DT resource parsing API".
> 
> Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>

Reported-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>

Works for me and my USB3 card. I also like going the global io_offset
variable away and the code readability improved, too, IMO.

One question:


> +		case IORESOURCE_MEM:
> +			parent = &iomem_resource;
> +			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
> +			break;

res_valid doesn't seem to be actually used?


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* Re: [PATCH 1/3] PCI: pcie-rcar: Convert to DT resource parsing API
@ 2015-11-07 13:29     ` Wolfram Sang
  0 siblings, 0 replies; 19+ messages in thread
From: Wolfram Sang @ 2015-11-07 13:29 UTC (permalink / raw)
  To: Phil Edworthy
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 953 bytes --]

On Mon, Nov 02, 2015 at 04:36:13PM +0000, Phil Edworthy wrote:
> The main purpose of this change is to avoid calling pci_ioremap_io() as
> this is not available on arm64. However, instead of doing the range passing
> in this driver we can utilise of_pci_get_host_bridge_resources().
> 
> This is similar to changes made to the generic PCI host driver in commit
> dbf9826d "PCI: generic: Convert to DT resource parsing API".
> 
> Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>

Reported-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>

Works for me and my USB3 card. I also like going the global io_offset
variable away and the code readability improved, too, IMO.

One question:


> +		case IORESOURCE_MEM:
> +			parent = &iomem_resource;
> +			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
> +			break;

res_valid doesn't seem to be actually used?


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* Re: [PATCH 3/3] PCI: pcie-rcar: Add support for R-Car H3.
  2015-11-02 16:36     ` Phil Edworthy
@ 2015-11-07 13:29       ` Wolfram Sang
  -1 siblings, 0 replies; 19+ messages in thread
From: Wolfram Sang @ 2015-11-07 13:29 UTC (permalink / raw)
  To: Phil Edworthy
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Harunobu Kurokawa, Rob Herring,
	Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, devicetree

[-- Attachment #1: Type: text/plain, Size: 358 bytes --]

On Mon, Nov 02, 2015 at 04:36:15PM +0000, Phil Edworthy wrote:
> From: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
> 
> R-Car H3 device is r8a7795
> 
> Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>

Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* Re: [PATCH 3/3] PCI: pcie-rcar: Add support for R-Car H3.
@ 2015-11-07 13:29       ` Wolfram Sang
  0 siblings, 0 replies; 19+ messages in thread
From: Wolfram Sang @ 2015-11-07 13:29 UTC (permalink / raw)
  To: Phil Edworthy
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel, Harunobu Kurokawa, Rob Herring,
	Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, devicetree

[-- Attachment #1: Type: text/plain, Size: 358 bytes --]

On Mon, Nov 02, 2015 at 04:36:15PM +0000, Phil Edworthy wrote:
> From: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
> 
> R-Car H3 device is r8a7795
> 
> Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>

Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* RE: [PATCH 1/3] PCI: pcie-rcar: Convert to DT resource parsing API
  2015-11-07 13:29     ` Wolfram Sang
@ 2015-11-09  9:31       ` Phil Edworthy
  -1 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-09  9:31 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

Hi Wolfram,

On 07 November 2015 13:29, Wolfram wrote:
> On Mon, Nov 02, 2015 at 04:36:13PM +0000, Phil Edworthy wrote:
> > The main purpose of this change is to avoid calling pci_ioremap_io() as
> > this is not available on arm64. However, instead of doing the range passing
> > in this driver we can utilise of_pci_get_host_bridge_resources().
> >
> > This is similar to changes made to the generic PCI host driver in commit
> > dbf9826d "PCI: generic: Convert to DT resource parsing API".
> >
> > Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
> 
> Reported-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> 
> Works for me and my USB3 card. I also like going the global io_offset
> variable away and the code readability improved, too, IMO.
> 
> One question:
> 
> 
> > +		case IORESOURCE_MEM:
> > +			parent = &iomem_resource;
> > +			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
> > +			break;
> 
> res_valid doesn't seem to be actually used?
Ah, you are right. I'll remove this & send a v2

Thanks
Phil

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

* RE: [PATCH 1/3] PCI: pcie-rcar: Convert to DT resource parsing API
@ 2015-11-09  9:31       ` Phil Edworthy
  0 siblings, 0 replies; 19+ messages in thread
From: Phil Edworthy @ 2015-11-09  9:31 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: Bjorn Helgaas, Geert Uytterhoeven, Simon Horman, linux-pci,
	linux-sh, linux-kernel

Hi Wolfram,

On 07 November 2015 13:29, Wolfram wrote:
> On Mon, Nov 02, 2015 at 04:36:13PM +0000, Phil Edworthy wrote:
> > The main purpose of this change is to avoid calling pci_ioremap_io() as
> > this is not available on arm64. However, instead of doing the range passing
> > in this driver we can utilise of_pci_get_host_bridge_resources().
> >
> > This is similar to changes made to the generic PCI host driver in commit
> > dbf9826d "PCI: generic: Convert to DT resource parsing API".
> >
> > Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
> 
> Reported-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> 
> Works for me and my USB3 card. I also like going the global io_offset
> variable away and the code readability improved, too, IMO.
> 
> One question:
> 
> 
> > +		case IORESOURCE_MEM:
> > +			parent = &iomem_resource;
> > +			res_valid |= !(res->flags & IORESOURCE_PREFETCH);
> > +			break;
> 
> res_valid doesn't seem to be actually used?
Ah, you are right. I'll remove this & send a v2

Thanks
Phil

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

end of thread, other threads:[~2015-11-09  9:31 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-02 16:36 [PATCH 0/3] Fix rcar-pcie for arm64 Phil Edworthy
2015-11-02 16:36 ` Phil Edworthy
2015-11-02 16:36 ` [PATCH 1/3] PCI: pcie-rcar: Convert to DT resource parsing API Phil Edworthy
2015-11-02 16:36   ` Phil Edworthy
2015-11-07 13:29   ` Wolfram Sang
2015-11-07 13:29     ` Wolfram Sang
2015-11-09  9:31     ` Phil Edworthy
2015-11-09  9:31       ` Phil Edworthy
2015-11-02 16:36 ` [PATCH 2/3] Revert "PCI: rcar: Build pcie-rcar.c only on ARM" Phil Edworthy
2015-11-02 16:36   ` Phil Edworthy
     [not found] ` <1446482175-26507-1-git-send-email-phil.edworthy-zM6kxYcvzFBBDgjK7y7TUQ@public.gmane.org>
2015-11-02 16:36   ` [PATCH 3/3] PCI: pcie-rcar: Add support for R-Car H3 Phil Edworthy
2015-11-02 16:36     ` Phil Edworthy
2015-11-02 16:36     ` Phil Edworthy
2015-11-07 13:29     ` Wolfram Sang
2015-11-07 13:29       ` Wolfram Sang
2015-11-02 21:33 ` [PATCH 0/3] Fix rcar-pcie for arm64 Wolfram Sang
2015-11-02 21:33   ` Wolfram Sang
2015-11-03  9:00   ` Phil Edworthy
2015-11-03  9:00     ` Phil Edworthy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.