devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups
@ 2025-10-21 12:40 Lorenzo Pieralisi
  2025-10-21 12:40 ` [PATCH v4 1/5] of/irq: Add msi-parent check to of_msi_xlate() Lorenzo Pieralisi
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Lorenzo Pieralisi @ 2025-10-21 12:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-arm-kernel, devicetree, linux-pci, Sascha Bischoff,
	Scott Branden, Thomas Gleixner, Bjorn Helgaas, Rob Herring,
	Ray Jui, Frank Li, Manivannan Sadhasivam,
	Krzysztof Wilczyński, Marc Zyngier

This is series is a follow up to [1] - with additional patches that are
addressing Rob's feedback (pcie-layerscape-gen4 was removed from the
kernel, Yay !) and other bits and bobs I noticed while staring at the code.

Patch (1) is a fix and technically we would like to get it in v6.18 please.

Patch (4) is compile-tested only, I can not run it on HW, I do not have it,
Scott, Ray please test it if you can.

v3 -> v4:
	- Addressed Rob's review
	- Added trailers
	- Rebased against v6.18-rc2

v2 -> v3:
	- Added additional patch to export of_msi_xlate()
	- Addressed review feedback

v3: https://lore.kernel.org/lkml/20251017084752.1590264-1-lpieralisi@kernel.org/
v2: https://lore.kernel.org/lkml/20251014095845.1310624-1-lpieralisi@kernel.org/
v1: https://lore.kernel.org/lkml/20250916091858.257868-1-lpieralisi@kernel.org/

[1] https://lore.kernel.org/lkml/20250916091858.257868-1-lpieralisi@kernel.org/

Cc: Sascha Bischoff <sascha.bischoff@arm.com>
Cc: Scott Branden <sbranden@broadcom.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Frank Li <Frank.Li@nxp.com>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>

Lorenzo Pieralisi (5):
  of/irq: Add msi-parent check to of_msi_xlate()
  of/irq: Fix OF node refcount in of_msi_get_domain()
  of/irq: Export of_msi_xlate() for module usage
  PCI: iproc: Implement MSI controller node detection with
    of_msi_xlate()
  irqchip/gic-its: Rework platform MSI deviceID detection

 drivers/irqchip/irq-gic-its-msi-parent.c | 91 ++++++------------------
 drivers/of/irq.c                         | 44 ++++++++++--
 drivers/pci/controller/pcie-iproc.c      | 22 ++----
 3 files changed, 68 insertions(+), 89 deletions(-)

-- 
2.50.1


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

* [PATCH v4 1/5] of/irq: Add msi-parent check to of_msi_xlate()
  2025-10-21 12:40 [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Lorenzo Pieralisi
@ 2025-10-21 12:40 ` Lorenzo Pieralisi
  2025-10-21 12:41 ` [PATCH v4 2/5] of/irq: Fix OF node refcount in of_msi_get_domain() Lorenzo Pieralisi
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Lorenzo Pieralisi @ 2025-10-21 12:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-arm-kernel, devicetree, linux-pci, Frank Li,
	Sascha Bischoff, Rob Herring, Marc Zyngier, Scott Branden,
	Thomas Gleixner, Bjorn Helgaas, Ray Jui, Manivannan Sadhasivam,
	Krzysztof Wilczyński

In some legacy platforms the MSI controller for a PCI host bridge is
identified by an msi-parent property whose phandle points at an MSI
controller node with no #msi-cells property, that implicitly
means #msi-cells == 0.

For such platforms, mapping a device ID and retrieving the MSI controller
node becomes simply a matter of checking whether in the device hierarchy
there is an msi-parent property pointing at an MSI controller node with
such characteristics.

Add a helper function to of_msi_xlate() to check the msi-parent property in
addition to msi-map and retrieve the MSI controller node (with a 1:1 ID
deviceID-IN<->deviceID-OUT  mapping) to provide support for deviceID
mapping and MSI controller node retrieval for such platforms.

Fixes: 57d72196dfc8 ("irqchip/gic-v5: Add GICv5 ITS support")
Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Cc: Sascha Bischoff <sascha.bischoff@arm.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>
---
 drivers/of/irq.c | 39 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index 65c3c23255b7..321d40ec229b 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -671,6 +671,36 @@ void __init of_irq_init(const struct of_device_id *matches)
 	}
 }
 
+static int of_check_msi_parent(struct device_node *dev_node, struct device_node **msi_node)
+{
+	struct of_phandle_args msi_spec;
+	int ret;
+
+	/*
+	 * An msi-parent phandle with a missing or == 0 #msi-cells
+	 * property identifies a 1:1 ID translation mapping.
+	 *
+	 * Set the msi controller node if the firmware matches this
+	 * condition.
+	 */
+	ret = of_parse_phandle_with_optional_args(dev_node, "msi-parent", "#msi-cells",
+						  0, &msi_spec);
+	if (ret)
+		return ret;
+
+	if ((*msi_node && *msi_node != msi_spec.np) || msi_spec.args_count != 0)
+		ret = -EINVAL;
+
+	if (!ret) {
+		/* Return with a node reference held */
+		*msi_node = msi_spec.np;
+		return 0;
+	}
+	of_node_put(msi_spec.np);
+
+	return ret;
+}
+
 /**
  * of_msi_xlate - map a MSI ID and find relevant MSI controller node
  * @dev: device for which the mapping is to be done.
@@ -678,7 +708,7 @@ void __init of_irq_init(const struct of_device_id *matches)
  * @id_in: Device ID.
  *
  * Walk up the device hierarchy looking for devices with a "msi-map"
- * property. If found, apply the mapping to @id_in.
+ * or "msi-parent" property. If found, apply the mapping to @id_in.
  * If @msi_np points to a non-NULL device node pointer, only entries targeting
  * that node will be matched; if it points to a NULL value, it will receive the
  * device node of the first matching target phandle, with a reference held.
@@ -692,12 +722,15 @@ u32 of_msi_xlate(struct device *dev, struct device_node **msi_np, u32 id_in)
 
 	/*
 	 * Walk up the device parent links looking for one with a
-	 * "msi-map" property.
+	 * "msi-map" or an "msi-parent" property.
 	 */
-	for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent)
+	for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) {
 		if (!of_map_id(parent_dev->of_node, id_in, "msi-map",
 				"msi-map-mask", msi_np, &id_out))
 			break;
+		if (!of_check_msi_parent(parent_dev->of_node, msi_np))
+			break;
+	}
 	return id_out;
 }
 
-- 
2.50.1


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

* [PATCH v4 2/5] of/irq: Fix OF node refcount in of_msi_get_domain()
  2025-10-21 12:40 [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Lorenzo Pieralisi
  2025-10-21 12:40 ` [PATCH v4 1/5] of/irq: Add msi-parent check to of_msi_xlate() Lorenzo Pieralisi
@ 2025-10-21 12:41 ` Lorenzo Pieralisi
  2025-10-21 12:41 ` [PATCH v4 3/5] of/irq: Export of_msi_xlate() for module usage Lorenzo Pieralisi
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Lorenzo Pieralisi @ 2025-10-21 12:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-arm-kernel, devicetree, linux-pci, Frank Li, Rob Herring,
	Sascha Bischoff, Scott Branden, Thomas Gleixner, Bjorn Helgaas,
	Ray Jui, Manivannan Sadhasivam, Krzysztof Wilczyński,
	Marc Zyngier

In of_msi_get_domain() if the iterator loop stops early because an
irq_domain match is detected, an of_node_put() on the iterator node is
needed to keep the OF node refcount in sync.

Add it.

Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Cc: Rob Herring <robh@kernel.org>
---
 drivers/of/irq.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index 321d40ec229b..ee7d5f0842e8 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -774,8 +774,10 @@ struct irq_domain *of_msi_get_domain(struct device *dev,
 
 	of_for_each_phandle(&it, err, np, "msi-parent", "#msi-cells", 0) {
 		d = irq_find_matching_host(it.node, token);
-		if (d)
+		if (d) {
+			of_node_put(it.node);
 			return d;
+		}
 	}
 
 	return NULL;
-- 
2.50.1


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

* [PATCH v4 3/5] of/irq: Export of_msi_xlate() for module usage
  2025-10-21 12:40 [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Lorenzo Pieralisi
  2025-10-21 12:40 ` [PATCH v4 1/5] of/irq: Add msi-parent check to of_msi_xlate() Lorenzo Pieralisi
  2025-10-21 12:41 ` [PATCH v4 2/5] of/irq: Fix OF node refcount in of_msi_get_domain() Lorenzo Pieralisi
@ 2025-10-21 12:41 ` Lorenzo Pieralisi
  2025-10-22 14:05   ` Rob Herring
  2025-10-21 12:41 ` [PATCH v4 4/5] PCI: iproc: Implement MSI controller node detection with of_msi_xlate() Lorenzo Pieralisi
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Lorenzo Pieralisi @ 2025-10-21 12:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-arm-kernel, devicetree, linux-pci, Frank Li, Rob Herring,
	Sascha Bischoff, Scott Branden, Thomas Gleixner, Bjorn Helgaas,
	Ray Jui, Manivannan Sadhasivam, Krzysztof Wilczyński,
	Marc Zyngier

of_msi_xlate() is required by drivers that can be configured
as modular, export the symbol.

Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Cc: Rob Herring <robh@kernel.org>
---
 drivers/of/irq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index ee7d5f0842e8..1cd93549d093 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -733,6 +733,7 @@ u32 of_msi_xlate(struct device *dev, struct device_node **msi_np, u32 id_in)
 	}
 	return id_out;
 }
+EXPORT_SYMBOL_GPL(of_msi_xlate);
 
 /**
  * of_msi_map_get_device_domain - Use msi-map to find the relevant MSI domain
-- 
2.50.1


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

* [PATCH v4 4/5] PCI: iproc: Implement MSI controller node detection with of_msi_xlate()
  2025-10-21 12:40 [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Lorenzo Pieralisi
                   ` (2 preceding siblings ...)
  2025-10-21 12:41 ` [PATCH v4 3/5] of/irq: Export of_msi_xlate() for module usage Lorenzo Pieralisi
@ 2025-10-21 12:41 ` Lorenzo Pieralisi
  2025-10-21 15:45   ` Bjorn Helgaas
  2025-10-21 12:41 ` [PATCH v4 5/5] irqchip/gic-its: Rework platform MSI deviceID detection Lorenzo Pieralisi
  2025-10-22 14:05 ` [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Rob Herring
  5 siblings, 1 reply; 13+ messages in thread
From: Lorenzo Pieralisi @ 2025-10-21 12:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-arm-kernel, devicetree, linux-pci, Frank Li, Scott Branden,
	Bjorn Helgaas, Rob Herring, Ray Jui, Manivannan Sadhasivam,
	Krzysztof Wilczyński, Sascha Bischoff, Thomas Gleixner,
	Marc Zyngier

The functionality implemented in the iproc driver in order to detect an
OF MSI controller node is now fully implemented in of_msi_xlate().

Replace the current msi-map/msi-parent parsing code with of_msi_xlate().

Since of_msi_xlate() is also a deviceID mapping API, pass in a fictitious
0 as deviceID - the driver only requires detecting the OF MSI controller
node not the deviceID mapping per-se (of_msi_xlate() return value is
ignored for the same reason).

Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Cc: Scott Branden <sbranden@broadcom.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
---
 drivers/pci/controller/pcie-iproc.c | 22 +++++-----------------
 1 file changed, 5 insertions(+), 17 deletions(-)

diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
index 22134e95574b..ccf71993ea35 100644
--- a/drivers/pci/controller/pcie-iproc.c
+++ b/drivers/pci/controller/pcie-iproc.c
@@ -17,6 +17,7 @@
 #include <linux/irqchip/arm-gic-v3.h>
 #include <linux/platform_device.h>
 #include <linux/of_address.h>
+#include <linux/of_irq.h>
 #include <linux/of_pci.h>
 #include <linux/of_platform.h>
 #include <linux/phy/phy.h>
@@ -1337,29 +1338,16 @@ static int iproc_pcie_msi_steer(struct iproc_pcie *pcie,
 
 static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
 {
-	struct device_node *msi_node;
+	struct device_node *msi_node = NULL;
 	int ret;
 
 	/*
 	 * Either the "msi-parent" or the "msi-map" phandle needs to exist
 	 * for us to obtain the MSI node.
 	 */
-
-	msi_node = of_parse_phandle(pcie->dev->of_node, "msi-parent", 0);
-	if (!msi_node) {
-		const __be32 *msi_map = NULL;
-		int len;
-		u32 phandle;
-
-		msi_map = of_get_property(pcie->dev->of_node, "msi-map", &len);
-		if (!msi_map)
-			return -ENODEV;
-
-		phandle = be32_to_cpup(msi_map + 1);
-		msi_node = of_find_node_by_phandle(phandle);
-		if (!msi_node)
-			return -ENODEV;
-	}
+	of_msi_xlate(pcie->dev, &msi_node, 0);
+	if (!msi_node)
+		return -ENODEV;
 
 	/*
 	 * Certain revisions of the iProc PCIe controller require additional
-- 
2.50.1


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

* [PATCH v4 5/5] irqchip/gic-its: Rework platform MSI deviceID detection
  2025-10-21 12:40 [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Lorenzo Pieralisi
                   ` (3 preceding siblings ...)
  2025-10-21 12:41 ` [PATCH v4 4/5] PCI: iproc: Implement MSI controller node detection with of_msi_xlate() Lorenzo Pieralisi
@ 2025-10-21 12:41 ` Lorenzo Pieralisi
  2025-10-21 15:15   ` Marc Zyngier
  2025-10-22 14:05 ` [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Rob Herring
  5 siblings, 1 reply; 13+ messages in thread
From: Lorenzo Pieralisi @ 2025-10-21 12:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-arm-kernel, devicetree, linux-pci, Frank Li,
	Sascha Bischoff, Thomas Gleixner, Rob Herring, Marc Zyngier,
	Scott Branden, Bjorn Helgaas, Ray Jui, Manivannan Sadhasivam,
	Krzysztof Wilczyński

Current code retrieving platform devices MSI devID in the GIC ITS MSI
parent helpers suffers from some minor issues:

- It leaks a struct device_node reference
- It is duplicated between GICv3 and GICv5 for no good reason
- It does not use the OF phandle iterator code that simplifies
  the msi-parent property parsing

Consolidate GIC v3 and v5 deviceID retrieval in a function that addresses
the full set of issues in one go by merging GIC v3 and v5 code and
converting the msi-parent parsing loop to the more modern OF phandle
iterator API, fixing the struct device_node reference leak in the process.

Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Cc: Sascha Bischoff <sascha.bischoff@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Rob Herring <robh@kernel.org>
Cc: Frank Li <Frank.Li@nxp.com>
Cc: Marc Zyngier <maz@kernel.org>
---
 drivers/irqchip/irq-gic-its-msi-parent.c | 91 ++++++------------------
 1 file changed, 23 insertions(+), 68 deletions(-)

diff --git a/drivers/irqchip/irq-gic-its-msi-parent.c b/drivers/irqchip/irq-gic-its-msi-parent.c
index eb1473f1448a..12f45228c867 100644
--- a/drivers/irqchip/irq-gic-its-msi-parent.c
+++ b/drivers/irqchip/irq-gic-its-msi-parent.c
@@ -142,83 +142,38 @@ static int its_v5_pci_msi_prepare(struct irq_domain *domain, struct device *dev,
 #define its_v5_pci_msi_prepare	NULL
 #endif /* !CONFIG_PCI_MSI */
 
-static int of_pmsi_get_dev_id(struct irq_domain *domain, struct device *dev,
-				  u32 *dev_id)
+static int of_pmsi_get_msi_info(struct irq_domain *domain, struct device *dev, u32 *dev_id,
+				phys_addr_t *pa)
 {
-	int ret, index = 0;
+	struct of_phandle_iterator it;
+	int ret;
 
 	/* Suck the DeviceID out of the msi-parent property */
-	do {
-		struct of_phandle_args args;
+	of_for_each_phandle(&it, ret, dev->of_node, "msi-parent", "#msi-cells", -1) {
+		/* GICv5 ITS domain matches the MSI controller node parent */
+		struct device_node *np __free(device_node) = pa ? of_get_parent(it.node)
+								: of_node_get(it.node);
 
-		ret = of_parse_phandle_with_args(dev->of_node,
-						 "msi-parent", "#msi-cells",
-						 index, &args);
-		if (args.np == irq_domain_get_of_node(domain)) {
-			if (WARN_ON(args.args_count != 1))
-				return -EINVAL;
-			*dev_id = args.args[0];
-			break;
-		}
-		index++;
-	} while (!ret);
+		if (np == irq_domain_get_of_node(domain)) {
+			u32 args;
 
-	if (ret) {
-		struct device_node *np = NULL;
+			if (WARN_ON(of_phandle_iterator_args(&it, &args, 1) != 1))
+				ret = -EINVAL;
 
-		ret = of_map_id(dev->of_node, dev->id, "msi-map", "msi-map-mask", &np, dev_id);
-		if (np)
-			of_node_put(np);
-	}
+			if (!ret && pa)
+				ret = its_translate_frame_address(it.node, pa);
 
-	return ret;
-}
+			if (!ret)
+				*dev_id = args;
 
-static int of_v5_pmsi_get_msi_info(struct irq_domain *domain, struct device *dev,
-				   u32 *dev_id, phys_addr_t *pa)
-{
-	int ret, index = 0;
-	/*
-	 * Retrieve the DeviceID and the ITS translate frame node pointer
-	 * out of the msi-parent property.
-	 */
-	do {
-		struct of_phandle_args args;
-
-		ret = of_parse_phandle_with_args(dev->of_node,
-						 "msi-parent", "#msi-cells",
-						 index, &args);
-		if (ret)
-			break;
-		/*
-		 * The IRQ domain fwnode is the msi controller parent
-		 * in GICv5 (where the msi controller nodes are the
-		 * ITS translate frames).
-		 */
-		if (args.np->parent == irq_domain_get_of_node(domain)) {
-			if (WARN_ON(args.args_count != 1))
-				return -EINVAL;
-			*dev_id = args.args[0];
-
-			ret = its_translate_frame_address(args.np, pa);
-			if (ret)
-				return -ENODEV;
-			break;
-		}
-		index++;
-	} while (!ret);
-
-	if (ret) {
-		struct device_node *np = NULL;
-
-		ret = of_map_id(dev->of_node, dev->id, "msi-map", "msi-map-mask", &np, dev_id);
-		if (np) {
-			ret = its_translate_frame_address(np, pa);
-			of_node_put(np);
+			of_node_put(it.node);
+			return ret;
 		}
 	}
 
-	return ret;
+	struct device_node *msi_ctrl __free(device_node) = NULL;
+
+	return of_map_id(dev->of_node, dev->id, "msi-map", "msi-map-mask", &msi_ctrl, dev_id);
 }
 
 int __weak iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id)
@@ -234,7 +189,7 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
 	int ret;
 
 	if (dev->of_node)
-		ret = of_pmsi_get_dev_id(domain->parent, dev, &dev_id);
+		ret = of_pmsi_get_msi_info(domain->parent, dev, &dev_id, NULL);
 	else
 		ret = iort_pmsi_get_dev_id(dev, &dev_id);
 	if (ret)
@@ -262,7 +217,7 @@ static int its_v5_pmsi_prepare(struct irq_domain *domain, struct device *dev,
 	if (!dev->of_node)
 		return -ENODEV;
 
-	ret = of_v5_pmsi_get_msi_info(domain->parent, dev, &dev_id, &pa);
+	ret = of_pmsi_get_msi_info(domain->parent, dev, &dev_id, &pa);
 	if (ret)
 		return ret;
 
-- 
2.50.1


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

* Re: [PATCH v4 5/5] irqchip/gic-its: Rework platform MSI deviceID detection
  2025-10-21 12:41 ` [PATCH v4 5/5] irqchip/gic-its: Rework platform MSI deviceID detection Lorenzo Pieralisi
@ 2025-10-21 15:15   ` Marc Zyngier
  0 siblings, 0 replies; 13+ messages in thread
From: Marc Zyngier @ 2025-10-21 15:15 UTC (permalink / raw)
  To: Lorenzo Pieralisi
  Cc: linux-kernel, linux-arm-kernel, devicetree, linux-pci, Frank Li,
	Sascha Bischoff, Thomas Gleixner, Rob Herring, Scott Branden,
	Bjorn Helgaas, Ray Jui, Manivannan Sadhasivam,
	Krzysztof Wilczyński

On Tue, 21 Oct 2025 13:41:03 +0100,
Lorenzo Pieralisi <lpieralisi@kernel.org> wrote:
> 
> Current code retrieving platform devices MSI devID in the GIC ITS MSI
> parent helpers suffers from some minor issues:
> 
> - It leaks a struct device_node reference
> - It is duplicated between GICv3 and GICv5 for no good reason
> - It does not use the OF phandle iterator code that simplifies
>   the msi-parent property parsing
> 
> Consolidate GIC v3 and v5 deviceID retrieval in a function that addresses
> the full set of issues in one go by merging GIC v3 and v5 code and
> converting the msi-parent parsing loop to the more modern OF phandle
> iterator API, fixing the struct device_node reference leak in the process.
> 
> Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
> Cc: Sascha Bischoff <sascha.bischoff@arm.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Rob Herring <robh@kernel.org>
> Cc: Frank Li <Frank.Li@nxp.com>
> Cc: Marc Zyngier <maz@kernel.org>
> ---
>  drivers/irqchip/irq-gic-its-msi-parent.c | 91 ++++++------------------
>  1 file changed, 23 insertions(+), 68 deletions(-)

Reviewed-by: Marc Zyngier <maz@kernel.org>

	M.

-- 
Without deviation from the norm, progress is not possible.

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

* Re: [PATCH v4 4/5] PCI: iproc: Implement MSI controller node detection with of_msi_xlate()
  2025-10-21 12:41 ` [PATCH v4 4/5] PCI: iproc: Implement MSI controller node detection with of_msi_xlate() Lorenzo Pieralisi
@ 2025-10-21 15:45   ` Bjorn Helgaas
  0 siblings, 0 replies; 13+ messages in thread
From: Bjorn Helgaas @ 2025-10-21 15:45 UTC (permalink / raw)
  To: Lorenzo Pieralisi
  Cc: linux-kernel, linux-arm-kernel, devicetree, linux-pci, Frank Li,
	Scott Branden, Bjorn Helgaas, Rob Herring, Ray Jui,
	Manivannan Sadhasivam, Krzysztof Wilczyński, Sascha Bischoff,
	Thomas Gleixner, Marc Zyngier

On Tue, Oct 21, 2025 at 02:41:02PM +0200, Lorenzo Pieralisi wrote:
> The functionality implemented in the iproc driver in order to detect an
> OF MSI controller node is now fully implemented in of_msi_xlate().
> 
> Replace the current msi-map/msi-parent parsing code with of_msi_xlate().
> 
> Since of_msi_xlate() is also a deviceID mapping API, pass in a fictitious
> 0 as deviceID - the driver only requires detecting the OF MSI controller
> node not the deviceID mapping per-se (of_msi_xlate() return value is
> ignored for the same reason).
> 
> Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
> Cc: Scott Branden <sbranden@broadcom.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Rob Herring <robh@kernel.org>
> Cc: Ray Jui <rjui@broadcom.com>
> Cc: Manivannan Sadhasivam <mani@kernel.org>
> Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>

Acked-by: Bjorn Helgaas <bhelgaas@google.com>

I assume this is material for Rob or Thomas?

> ---
>  drivers/pci/controller/pcie-iproc.c | 22 +++++-----------------
>  1 file changed, 5 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
> index 22134e95574b..ccf71993ea35 100644
> --- a/drivers/pci/controller/pcie-iproc.c
> +++ b/drivers/pci/controller/pcie-iproc.c
> @@ -17,6 +17,7 @@
>  #include <linux/irqchip/arm-gic-v3.h>
>  #include <linux/platform_device.h>
>  #include <linux/of_address.h>
> +#include <linux/of_irq.h>
>  #include <linux/of_pci.h>
>  #include <linux/of_platform.h>
>  #include <linux/phy/phy.h>
> @@ -1337,29 +1338,16 @@ static int iproc_pcie_msi_steer(struct iproc_pcie *pcie,
>  
>  static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
>  {
> -	struct device_node *msi_node;
> +	struct device_node *msi_node = NULL;
>  	int ret;
>  
>  	/*
>  	 * Either the "msi-parent" or the "msi-map" phandle needs to exist
>  	 * for us to obtain the MSI node.
>  	 */
> -
> -	msi_node = of_parse_phandle(pcie->dev->of_node, "msi-parent", 0);
> -	if (!msi_node) {
> -		const __be32 *msi_map = NULL;
> -		int len;
> -		u32 phandle;
> -
> -		msi_map = of_get_property(pcie->dev->of_node, "msi-map", &len);
> -		if (!msi_map)
> -			return -ENODEV;
> -
> -		phandle = be32_to_cpup(msi_map + 1);
> -		msi_node = of_find_node_by_phandle(phandle);
> -		if (!msi_node)
> -			return -ENODEV;
> -	}
> +	of_msi_xlate(pcie->dev, &msi_node, 0);
> +	if (!msi_node)
> +		return -ENODEV;
>  
>  	/*
>  	 * Certain revisions of the iProc PCIe controller require additional
> -- 
> 2.50.1
> 

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

* Re: [PATCH v4 3/5] of/irq: Export of_msi_xlate() for module usage
  2025-10-21 12:41 ` [PATCH v4 3/5] of/irq: Export of_msi_xlate() for module usage Lorenzo Pieralisi
@ 2025-10-22 14:05   ` Rob Herring
  0 siblings, 0 replies; 13+ messages in thread
From: Rob Herring @ 2025-10-22 14:05 UTC (permalink / raw)
  To: Lorenzo Pieralisi
  Cc: linux-kernel, linux-arm-kernel, devicetree, linux-pci, Frank Li,
	Sascha Bischoff, Scott Branden, Thomas Gleixner, Bjorn Helgaas,
	Ray Jui, Manivannan Sadhasivam, Krzysztof Wilczyński,
	Marc Zyngier

On Tue, Oct 21, 2025 at 02:41:01PM +0200, Lorenzo Pieralisi wrote:
> of_msi_xlate() is required by drivers that can be configured
> as modular, export the symbol.
> 
> Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
> Cc: Rob Herring <robh@kernel.org>
> ---
>  drivers/of/irq.c | 1 +
>  1 file changed, 1 insertion(+)

I guess just iproc needs this, so:

Acked-by: Rob Herring (Arm) <robh@kernel.org>

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

* Re: [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups
  2025-10-21 12:40 [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Lorenzo Pieralisi
                   ` (4 preceding siblings ...)
  2025-10-21 12:41 ` [PATCH v4 5/5] irqchip/gic-its: Rework platform MSI deviceID detection Lorenzo Pieralisi
@ 2025-10-22 14:05 ` Rob Herring
  2025-10-24  9:44   ` Thomas Gleixner
  5 siblings, 1 reply; 13+ messages in thread
From: Rob Herring @ 2025-10-22 14:05 UTC (permalink / raw)
  To: Lorenzo Pieralisi
  Cc: linux-kernel, linux-arm-kernel, devicetree, linux-pci,
	Sascha Bischoff, Scott Branden, Thomas Gleixner, Bjorn Helgaas,
	Ray Jui, Frank Li, Manivannan Sadhasivam,
	Krzysztof Wilczyński, Marc Zyngier

On Tue, Oct 21, 2025 at 02:40:58PM +0200, Lorenzo Pieralisi wrote:
> This is series is a follow up to [1] - with additional patches that are
> addressing Rob's feedback (pcie-layerscape-gen4 was removed from the
> kernel, Yay !) and other bits and bobs I noticed while staring at the code.
> 
> Patch (1) is a fix and technically we would like to get it in v6.18 please.
> 
> Patch (4) is compile-tested only, I can not run it on HW, I do not have it,
> Scott, Ray please test it if you can.
> 
> v3 -> v4:
> 	- Addressed Rob's review
> 	- Added trailers
> 	- Rebased against v6.18-rc2
> 
> v2 -> v3:
> 	- Added additional patch to export of_msi_xlate()
> 	- Addressed review feedback
> 
> v3: https://lore.kernel.org/lkml/20251017084752.1590264-1-lpieralisi@kernel.org/
> v2: https://lore.kernel.org/lkml/20251014095845.1310624-1-lpieralisi@kernel.org/
> v1: https://lore.kernel.org/lkml/20250916091858.257868-1-lpieralisi@kernel.org/
> 
> [1] https://lore.kernel.org/lkml/20250916091858.257868-1-lpieralisi@kernel.org/
> 
> Cc: Sascha Bischoff <sascha.bischoff@arm.com>
> Cc: Scott Branden <sbranden@broadcom.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Rob Herring <robh@kernel.org>
> Cc: Ray Jui <rjui@broadcom.com>
> Cc: Frank Li <Frank.Li@nxp.com>
> Cc: Manivannan Sadhasivam <mani@kernel.org>
> Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
> Cc: Marc Zyngier <maz@kernel.org>
> 
> Lorenzo Pieralisi (5):
>   of/irq: Add msi-parent check to of_msi_xlate()
>   of/irq: Fix OF node refcount in of_msi_get_domain()

I've applied these 2 for 6.18.

>   of/irq: Export of_msi_xlate() for module usage
>   PCI: iproc: Implement MSI controller node detection with
>     of_msi_xlate()
>   irqchip/gic-its: Rework platform MSI deviceID detection
> 
>  drivers/irqchip/irq-gic-its-msi-parent.c | 91 ++++++------------------
>  drivers/of/irq.c                         | 44 ++++++++++--
>  drivers/pci/controller/pcie-iproc.c      | 22 ++----
>  3 files changed, 68 insertions(+), 89 deletions(-)
> 
> -- 
> 2.50.1
> 

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

* Re: [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups
  2025-10-22 14:05 ` [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Rob Herring
@ 2025-10-24  9:44   ` Thomas Gleixner
  2025-10-24 12:43     ` Rob Herring
  0 siblings, 1 reply; 13+ messages in thread
From: Thomas Gleixner @ 2025-10-24  9:44 UTC (permalink / raw)
  To: Rob Herring, Lorenzo Pieralisi
  Cc: linux-kernel, linux-arm-kernel, devicetree, linux-pci,
	Sascha Bischoff, Scott Branden, Bjorn Helgaas, Ray Jui, Frank Li,
	Manivannan Sadhasivam, Krzysztof Wilczyński, Marc Zyngier

Rob!

On Wed, Oct 22 2025 at 09:05, Rob Herring wrote:
> On Tue, Oct 21, 2025 at 02:40:58PM +0200, Lorenzo Pieralisi wrote:
>> Lorenzo Pieralisi (5):
>>   of/irq: Add msi-parent check to of_msi_xlate()
>>   of/irq: Fix OF node refcount in of_msi_get_domain()
>
> I've applied these 2 for 6.18.

The rest of this depends on those two.

>>   of/irq: Export of_msi_xlate() for module usage

Can you pick the three of/irq ones up and put them into a seperate
branch based on rc1 so that I can pull that and apply the rest:

>>   PCI: iproc: Implement MSI controller node detection with
>>     of_msi_xlate()
>>   irqchip/gic-its: Rework platform MSI deviceID detection

Thanks,

        tglx

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

* Re: [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups
  2025-10-24  9:44   ` Thomas Gleixner
@ 2025-10-24 12:43     ` Rob Herring
  2025-10-24 15:55       ` Thomas Gleixner
  0 siblings, 1 reply; 13+ messages in thread
From: Rob Herring @ 2025-10-24 12:43 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: Lorenzo Pieralisi, linux-kernel, linux-arm-kernel, devicetree,
	linux-pci, Sascha Bischoff, Scott Branden, Bjorn Helgaas, Ray Jui,
	Frank Li, Manivannan Sadhasivam, Krzysztof Wilczyński,
	Marc Zyngier

On Fri, Oct 24, 2025 at 4:44 AM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> Rob!
>
> On Wed, Oct 22 2025 at 09:05, Rob Herring wrote:
> > On Tue, Oct 21, 2025 at 02:40:58PM +0200, Lorenzo Pieralisi wrote:
> >> Lorenzo Pieralisi (5):
> >>   of/irq: Add msi-parent check to of_msi_xlate()
> >>   of/irq: Fix OF node refcount in of_msi_get_domain()
> >
> > I've applied these 2 for 6.18.
>
> The rest of this depends on those two.
>
> >>   of/irq: Export of_msi_xlate() for module usage
>
> Can you pick the three of/irq ones up and put them into a seperate
> branch based on rc1 so that I can pull that and apply the rest:

Yes. This series is the only thing I have queued for 6.18 fixes so
far, so I'll add the 3rd patch and Cc you on my PR to Linus.

Rob

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

* Re: [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups
  2025-10-24 12:43     ` Rob Herring
@ 2025-10-24 15:55       ` Thomas Gleixner
  0 siblings, 0 replies; 13+ messages in thread
From: Thomas Gleixner @ 2025-10-24 15:55 UTC (permalink / raw)
  To: Rob Herring
  Cc: Lorenzo Pieralisi, linux-kernel, linux-arm-kernel, devicetree,
	linux-pci, Sascha Bischoff, Scott Branden, Bjorn Helgaas, Ray Jui,
	Frank Li, Manivannan Sadhasivam, Krzysztof Wilczyński,
	Marc Zyngier

On Fri, Oct 24 2025 at 07:43, Rob Herring wrote:
> On Fri, Oct 24, 2025 at 4:44 AM Thomas Gleixner <tglx@linutronix.de> wrote:
>> On Wed, Oct 22 2025 at 09:05, Rob Herring wrote:
>> > On Tue, Oct 21, 2025 at 02:40:58PM +0200, Lorenzo Pieralisi wrote:
>> >> Lorenzo Pieralisi (5):
>> >>   of/irq: Add msi-parent check to of_msi_xlate()
>> >>   of/irq: Fix OF node refcount in of_msi_get_domain()
>> >
>> > I've applied these 2 for 6.18.
>>
>> The rest of this depends on those two.
>>
>> >>   of/irq: Export of_msi_xlate() for module usage
>>
>> Can you pick the three of/irq ones up and put them into a seperate
>> branch based on rc1 so that I can pull that and apply the rest:
>
> Yes. This series is the only thing I have queued for 6.18 fixes so
> far, so I'll add the 3rd patch and Cc you on my PR to Linus.

Thanks!

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

end of thread, other threads:[~2025-10-24 15:55 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-21 12:40 [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Lorenzo Pieralisi
2025-10-21 12:40 ` [PATCH v4 1/5] of/irq: Add msi-parent check to of_msi_xlate() Lorenzo Pieralisi
2025-10-21 12:41 ` [PATCH v4 2/5] of/irq: Fix OF node refcount in of_msi_get_domain() Lorenzo Pieralisi
2025-10-21 12:41 ` [PATCH v4 3/5] of/irq: Export of_msi_xlate() for module usage Lorenzo Pieralisi
2025-10-22 14:05   ` Rob Herring
2025-10-21 12:41 ` [PATCH v4 4/5] PCI: iproc: Implement MSI controller node detection with of_msi_xlate() Lorenzo Pieralisi
2025-10-21 15:45   ` Bjorn Helgaas
2025-10-21 12:41 ` [PATCH v4 5/5] irqchip/gic-its: Rework platform MSI deviceID detection Lorenzo Pieralisi
2025-10-21 15:15   ` Marc Zyngier
2025-10-22 14:05 ` [PATCH v4 0/5] of/irq: Misc msi-parent handling fixes/clean-ups Rob Herring
2025-10-24  9:44   ` Thomas Gleixner
2025-10-24 12:43     ` Rob Herring
2025-10-24 15:55       ` Thomas Gleixner

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).