[PATCH 0/6] fsl-mc: Move fsl_over to device MSI

STALE196d

18 messages, 5 authors, 2026-02-24 · open the first message on its own page

[PATCH 0/6] fsl-mc: Move fsl_over to device MSI

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-18 13:52:08

Over the past few years, I have become increasingly annoyed by this
sort of messages in my boot log:

[    0.067861] fsl-mc MSI: ITS@0x100100040000 domain created
[    0.073352] fsl-mc MSI: ITS@0x100100060000 domain created
[    0.078841] fsl-mc MSI: ITS@0x100100080000 domain created
[    0.084328] fsl-mc MSI: ITS@0x1001000a0000 domain created
[    0.089815] fsl-mc MSI: ITS@0x1001000c0000 domain created
[    0.095303] fsl-mc MSI: ITS@0x1001000e0000 domain created
[    0.100792] fsl-mc MSI: ITS@0x100100100000 domain created
[    0.106281] fsl-mc MSI: ITS@0x100100120000 domain created

While this is useful on fsl-mc systems, this is completely irrelevant
on 99.99999% of the arm64 machines, which know nothing about the
Freescale stuff. Including all of my machine -- bar *one*.

Global MSI domains such as the above have been obsoleted for the past
two years, but nobody at NXP seems to have got the message.

The obvious solution is to delete some code! While my first port of
call would be to just 'git rm -r drivers/bus/fsl-mc' (only kidding!),
a less invasive solution is to drag that code into the present times.
Which is what this series is doing by converting the whole thing to
device MSI, reusing the platform MSI infrastructure instead of
duplicating it.

This results in the expected cleanup, and kills the last user of the
non-device-MSI stuff on arm64. You're welcome.

Marc Zyngier (6):
  fsl-mc: Remove MSI domain propagation to sub-devices
  fsl_mc: Add minimal infrastructure to use platform MSI
  irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent
    handling
  fsl_mc: Switch over to per-device platform MSI
  fsl_mc: Remove legacy MSI implementation
  platform-msi: Remove stale comment

 drivers/base/platform-msi.c                 |   4 -
 drivers/bus/fsl-mc/dprc-driver.c            |  14 +-
 drivers/bus/fsl-mc/fsl-mc-bus.c             |   4 +-
 drivers/bus/fsl-mc/fsl-mc-msi.c             | 142 +++--------------
 drivers/bus/fsl-mc/fsl-mc-private.h         |   2 +-
 drivers/irqchip/Kconfig                     |   6 -
 drivers/irqchip/Makefile                    |   1 -
 drivers/irqchip/irq-gic-its-msi-parent.c    |   7 +-
 drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c | 168 --------------------
 include/linux/fsl/mc.h                      |   6 +-
 10 files changed, 33 insertions(+), 321 deletions(-)
 delete mode 100644 drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c

-- 
2.47.3

[PATCH 1/6] fsl-mc: Remove MSI domain propagation to sub-devices

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-18 13:52:08

Only the root device generates MSIs (it is the only one talking to
the ITS), so propagating the domain is pretty pointless. Remove it.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/bus/fsl-mc/fsl-mc-bus.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
index 25845c04e5620..b4a47e6956bf2 100644
--- a/drivers/bus/fsl-mc/fsl-mc-bus.c
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
@@ -865,14 +865,12 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
 	} else {
 		/*
 		 * A non-DPRC object has to be a child of a DPRC, use the
-		 * parent's ICID and interrupt domain.
+		 * parent's ICID.
 		 */
 		mc_dev->icid = parent_mc_dev->icid;
 		mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK;
 		mc_dev->dev.dma_mask = &mc_dev->dma_mask;
 		mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask;
-		dev_set_msi_domain(&mc_dev->dev,
-				   dev_get_msi_domain(&parent_mc_dev->dev));
 	}
 
 	/*
-- 
2.47.3

[PATCH 4/6] fsl_mc: Switch over to per-device platform MSI

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-18 13:52:09

Obtain the msi-parent irqdomain instead of the fsl_mc domain,
which magically engages the per-device infrastructure.

Additionally, simplify the overly complicated error handling.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/bus/fsl-mc/dprc-driver.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index c63a7e688db6a..8ee5fb3c2d416 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -620,9 +620,8 @@ int dprc_setup(struct fsl_mc_device *mc_dev)
 {
 	struct device *parent_dev = mc_dev->dev.parent;
 	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev);
-	struct irq_domain *mc_msi_domain;
+	struct irq_domain *mc_msi_domain = NULL;
 	bool mc_io_created = false;
-	bool msi_domain_set = false;
 	bool uapi_created = false;
 	u16 major_ver, minor_ver;
 	size_t region_size;
@@ -663,14 +662,12 @@ int dprc_setup(struct fsl_mc_device *mc_dev)
 		uapi_created = true;
 	}
 
-	mc_msi_domain = fsl_mc_find_msi_domain(&mc_dev->dev);
-	if (!mc_msi_domain) {
+	mc_msi_domain = fsl_mc_get_msi_parent(&mc_dev->dev);
+	if (!mc_msi_domain)
 		dev_warn(&mc_dev->dev,
 			 "WARNING: MC bus without interrupt support\n");
-	} else {
+	else
 		dev_set_msi_domain(&mc_dev->dev, mc_msi_domain);
-		msi_domain_set = true;
-	}
 
 	error = dprc_open(mc_dev->mc_io, 0, mc_dev->obj_desc.id,
 			  &mc_dev->mc_handle);
@@ -710,8 +707,7 @@ int dprc_setup(struct fsl_mc_device *mc_dev)
 	(void)dprc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
 
 error_cleanup_msi_domain:
-	if (msi_domain_set)
-		dev_set_msi_domain(&mc_dev->dev, NULL);
+	dev_set_msi_domain(&mc_dev->dev, NULL);
 
 	if (mc_io_created) {
 		fsl_destroy_mc_io(mc_dev->mc_io);
-- 
2.47.3

[PATCH 3/6] irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent handling

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-18 13:52:09

Make the ITS code aware of fsl_mc devices by plumbing the devid
retrieval primitive.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/irqchip/irq-gic-its-msi-parent.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/irqchip/irq-gic-its-msi-parent.c b/drivers/irqchip/irq-gic-its-msi-parent.c
index 12f45228c8674..532c0d626ca04 100644
--- a/drivers/irqchip/irq-gic-its-msi-parent.c
+++ b/drivers/irqchip/irq-gic-its-msi-parent.c
@@ -7,6 +7,7 @@
 #include <linux/acpi_iort.h>
 #include <linux/of_address.h>
 #include <linux/pci.h>
+#include <linux/fsl/mc.h>
 
 #include "irq-gic-its-msi-parent.h"
 #include <linux/irqchip/irq-msi-lib.h>
@@ -186,9 +187,11 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
 {
 	struct msi_domain_info *msi_info;
 	u32 dev_id;
-	int ret;
+	int ret = 0;
 
-	if (dev->of_node)
+	if (dev_is_fsl_mc(dev))
+		dev_id = fsl_mc_get_msi_id(dev);
+	else if (dev->of_node)
 		ret = of_pmsi_get_msi_info(domain->parent, dev, &dev_id, NULL);
 	else
 		ret = iort_pmsi_get_dev_id(dev, &dev_id);
-- 
2.47.3

[PATCH 6/6] platform-msi: Remove stale comment

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-18 13:52:09

The backward compatibility code for the previous incarnation of
platform MSI was removed in e9894248994ca ("genirq/msi: Remove
platform MSI leftovers"), but the comment about that removal is
still present.  Remove it.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/base/platform-msi.c | 4 ----
 1 file changed, 4 deletions(-)
diff --git a/drivers/base/platform-msi.c b/drivers/base/platform-msi.c
index 70db08f3ac6fa..69eed058eb208 100644
--- a/drivers/base/platform-msi.c
+++ b/drivers/base/platform-msi.c
@@ -61,10 +61,6 @@ static const struct msi_domain_template platform_msi_template = {
  * parent. The parent domain sets up the new domain. The domain has
  * a fixed size of @nvec. The domain is managed by devres and will
  * be removed when the device is removed.
- *
- * Note: For migration purposes this falls back to the original platform_msi code
- *	 up to the point where all platforms have been converted to the MSI
- *	 parent model.
  */
 int platform_device_msi_init_and_alloc_irqs(struct device *dev, unsigned int nvec,
 					    irq_write_msi_msg_t write_msi_msg)
-- 
2.47.3

[PATCH 2/6] fsl_mc: Add minimal infrastructure to use platform MSI

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-18 13:52:09

Add the tiny bit of infrastructure to be able to use platform MSI
instead of the current hack. This means providing a write_msi_msg
callback, as well as irq domain and devid retrieval helpers.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/bus/fsl-mc/fsl-mc-msi.c     | 50 ++++++++++++++++++++++++-----
 drivers/bus/fsl-mc/fsl-mc-private.h |  1 +
 include/linux/fsl/mc.h              |  2 ++
 3 files changed, 45 insertions(+), 8 deletions(-)
diff --git a/drivers/bus/fsl-mc/fsl-mc-msi.c b/drivers/bus/fsl-mc/fsl-mc-msi.c
index 82cd69f7884c6..c9f50969e88ce 100644
--- a/drivers/bus/fsl-mc/fsl-mc-msi.c
+++ b/drivers/bus/fsl-mc/fsl-mc-msi.c
@@ -110,13 +110,8 @@ static void __fsl_mc_msi_write_msg(struct fsl_mc_device *mc_bus_dev,
 	}
 }
 
-/*
- * NOTE: This function is invoked with interrupts disabled
- */
-static void fsl_mc_msi_write_msg(struct irq_data *irq_data,
-				 struct msi_msg *msg)
+static void fsl_mc_write_msi_msg(struct msi_desc *msi_desc, struct msi_msg *msg)
 {
-	struct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);
 	struct fsl_mc_device *mc_bus_dev = to_fsl_mc_device(msi_desc->dev);
 	struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
 	struct fsl_mc_device_irq *mc_dev_irq =
@@ -130,6 +125,17 @@ static void fsl_mc_msi_write_msg(struct irq_data *irq_data,
 	__fsl_mc_msi_write_msg(mc_bus_dev, mc_dev_irq, msi_desc);
 }
 
+/*
+ * NOTE: This function is invoked with interrupts disabled
+ */
+static void fsl_mc_msi_write_msg(struct irq_data *irq_data,
+				 struct msi_msg *msg)
+{
+	struct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);
+
+	fsl_mc_write_msi_msg(msi_desc, msg);
+}
+
 static void fsl_mc_msi_update_chip_ops(struct msi_domain_info *info)
 {
 	struct irq_chip *chip = info->chip;
@@ -209,6 +215,20 @@ struct irq_domain *fsl_mc_find_msi_domain(struct device *dev)
 	return msi_domain;
 }
 
+struct irq_domain *fsl_mc_get_msi_parent(struct device *dev)
+{
+	struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+	struct device *root_dprc_dev;
+	struct device *bus_dev;
+
+	fsl_mc_get_root_dprc(dev, &root_dprc_dev);
+	bus_dev = root_dprc_dev->parent;
+
+	return (bus_dev->of_node ?
+		of_msi_get_domain(bus_dev, bus_dev->of_node, DOMAIN_BUS_NEXUS) :
+		iort_get_device_domain(bus_dev, mc_dev->icid, DOMAIN_BUS_NEXUS));
+}
+
 int fsl_mc_msi_domain_alloc_irqs(struct device *dev,  unsigned int irq_count)
 {
 	int error = msi_setup_device_data(dev);
@@ -220,8 +240,10 @@ int fsl_mc_msi_domain_alloc_irqs(struct device *dev,  unsigned int irq_count)
 	 * NOTE: Calling this function will trigger the invocation of the
 	 * its_fsl_mc_msi_prepare() callback
 	 */
-	error = msi_domain_alloc_irqs_range(dev, MSI_DEFAULT_DOMAIN, 0, irq_count - 1);
-
+	if (!irq_domain_is_msi_parent(dev_get_msi_domain(dev)))
+		error = msi_domain_alloc_irqs_range(dev, MSI_DEFAULT_DOMAIN, 0, irq_count - 1);
+	else
+		error = platform_device_msi_init_and_alloc_irqs(dev, irq_count, fsl_mc_write_msi_msg);
 	if (error)
 		dev_err(dev, "Failed to allocate IRQs\n");
 	return error;
@@ -231,3 +253,15 @@ void fsl_mc_msi_domain_free_irqs(struct device *dev)
 {
 	msi_domain_free_irqs_all(dev, MSI_DEFAULT_DOMAIN);
 }
+
+u32 fsl_mc_get_msi_id(struct device *dev)
+{
+	struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+	struct device *root_dprc_dev;
+
+	fsl_mc_get_root_dprc(dev, &root_dprc_dev);
+
+	return (root_dprc_dev->parent->of_node ?
+		of_msi_xlate(dev, NULL, mc_dev->icid) :
+		iort_msi_map_id(dev, mc_dev->icid));
+}
diff --git a/drivers/bus/fsl-mc/fsl-mc-private.h b/drivers/bus/fsl-mc/fsl-mc-private.h
index beed4c53533d8..44868f874fd66 100644
--- a/drivers/bus/fsl-mc/fsl-mc-private.h
+++ b/drivers/bus/fsl-mc/fsl-mc-private.h
@@ -642,6 +642,7 @@ int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
 void fsl_mc_msi_domain_free_irqs(struct device *dev);
 
 struct irq_domain *fsl_mc_find_msi_domain(struct device *dev);
+struct irq_domain *fsl_mc_get_msi_parent(struct device *dev);
 
 int __must_check fsl_create_mc_io(struct device *dev,
 				  phys_addr_t mc_portal_phys_addr,
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index 897d6211c1635..bcc38c0fc230a 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -361,9 +361,11 @@ int mc_send_command(struct fsl_mc_io *mc_io, struct fsl_mc_command *cmd);
 
 #ifdef CONFIG_FSL_MC_BUS
 #define dev_is_fsl_mc(_dev) ((_dev)->bus == &fsl_mc_bus_type)
+u32 fsl_mc_get_msi_id(struct device *dev);
 #else
 /* If fsl-mc bus is not present device cannot belong to fsl-mc bus */
 #define dev_is_fsl_mc(_dev) (0)
+#define fsl_mc_get_msi_id(_dev)	(0)
 #endif
 
 /* Macro to check if a device is a container device */
-- 
2.47.3

[PATCH 5/6] fsl_mc: Remove legacy MSI implementation

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-18 13:52:09

Get rid of the most of the fsl_mc MSI infrastructure, which is
now totally unused.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/bus/fsl-mc/fsl-mc-msi.c             | 140 +---------------
 drivers/bus/fsl-mc/fsl-mc-private.h         |   1 -
 drivers/irqchip/Kconfig                     |   6 -
 drivers/irqchip/Makefile                    |   1 -
 drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c | 168 --------------------
 include/linux/fsl/mc.h                      |   4 -
 6 files changed, 1 insertion(+), 319 deletions(-)
 delete mode 100644 drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c
diff --git a/drivers/bus/fsl-mc/fsl-mc-msi.c b/drivers/bus/fsl-mc/fsl-mc-msi.c
index c9f50969e88ce..8ee4796040a8d 100644
--- a/drivers/bus/fsl-mc/fsl-mc-msi.c
+++ b/drivers/bus/fsl-mc/fsl-mc-msi.c
@@ -15,46 +15,6 @@
 
 #include "fsl-mc-private.h"
 
-#ifdef GENERIC_MSI_DOMAIN_OPS
-/*
- * Generate a unique ID identifying the interrupt (only used within the MSI
- * irqdomain.  Combine the icid with the interrupt index.
- */
-static irq_hw_number_t fsl_mc_domain_calc_hwirq(struct fsl_mc_device *dev,
-						struct msi_desc *desc)
-{
-	/*
-	 * Make the base hwirq value for ICID*10000 so it is readable
-	 * as a decimal value in /proc/interrupts.
-	 */
-	return (irq_hw_number_t)(desc->msi_index + (dev->icid * 10000));
-}
-
-static void fsl_mc_msi_set_desc(msi_alloc_info_t *arg,
-				struct msi_desc *desc)
-{
-	arg->desc = desc;
-	arg->hwirq = fsl_mc_domain_calc_hwirq(to_fsl_mc_device(desc->dev),
-					      desc);
-}
-#else
-#define fsl_mc_msi_set_desc NULL
-#endif
-
-static void fsl_mc_msi_update_dom_ops(struct msi_domain_info *info)
-{
-	struct msi_domain_ops *ops = info->ops;
-
-	if (!ops)
-		return;
-
-	/*
-	 * set_desc should not be set by the caller
-	 */
-	if (!ops->set_desc)
-		ops->set_desc = fsl_mc_msi_set_desc;
-}
-
 static void __fsl_mc_msi_write_msg(struct fsl_mc_device *mc_bus_dev,
 				   struct fsl_mc_device_irq *mc_dev_irq,
 				   struct msi_desc *msi_desc)
@@ -125,96 +85,6 @@ static void fsl_mc_write_msi_msg(struct msi_desc *msi_desc, struct msi_msg *msg)
 	__fsl_mc_msi_write_msg(mc_bus_dev, mc_dev_irq, msi_desc);
 }
 
-/*
- * NOTE: This function is invoked with interrupts disabled
- */
-static void fsl_mc_msi_write_msg(struct irq_data *irq_data,
-				 struct msi_msg *msg)
-{
-	struct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);
-
-	fsl_mc_write_msi_msg(msi_desc, msg);
-}
-
-static void fsl_mc_msi_update_chip_ops(struct msi_domain_info *info)
-{
-	struct irq_chip *chip = info->chip;
-
-	if (!chip)
-		return;
-
-	/*
-	 * irq_write_msi_msg should not be set by the caller
-	 */
-	if (!chip->irq_write_msi_msg)
-		chip->irq_write_msi_msg = fsl_mc_msi_write_msg;
-}
-
-/**
- * fsl_mc_msi_create_irq_domain - Create a fsl-mc MSI interrupt domain
- * @fwnode:	Optional firmware node of the interrupt controller
- * @info:	MSI domain info
- * @parent:	Parent irq domain
- *
- * Updates the domain and chip ops and creates a fsl-mc MSI
- * interrupt domain.
- *
- * Returns:
- * A domain pointer or NULL in case of failure.
- */
-struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
-						struct msi_domain_info *info,
-						struct irq_domain *parent)
-{
-	struct irq_domain *domain;
-
-	if (WARN_ON((info->flags & MSI_FLAG_LEVEL_CAPABLE)))
-		info->flags &= ~MSI_FLAG_LEVEL_CAPABLE;
-	if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS)
-		fsl_mc_msi_update_dom_ops(info);
-	if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
-		fsl_mc_msi_update_chip_ops(info);
-	info->flags |= MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS | MSI_FLAG_FREE_MSI_DESCS;
-
-	domain = msi_create_irq_domain(fwnode, info, parent);
-	if (domain)
-		irq_domain_update_bus_token(domain, DOMAIN_BUS_FSL_MC_MSI);
-
-	return domain;
-}
-
-struct irq_domain *fsl_mc_find_msi_domain(struct device *dev)
-{
-	struct device *root_dprc_dev;
-	struct device *bus_dev;
-	struct irq_domain *msi_domain;
-	struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
-
-	fsl_mc_get_root_dprc(dev, &root_dprc_dev);
-	bus_dev = root_dprc_dev->parent;
-
-	if (bus_dev->of_node) {
-		msi_domain = of_msi_map_get_device_domain(dev,
-						  mc_dev->icid,
-						  DOMAIN_BUS_FSL_MC_MSI);
-
-		/*
-		 * if the msi-map property is missing assume that all the
-		 * child containers inherit the domain from the parent
-		 */
-		if (!msi_domain)
-
-			msi_domain = of_msi_get_domain(bus_dev,
-						bus_dev->of_node,
-						DOMAIN_BUS_FSL_MC_MSI);
-	} else {
-		msi_domain = iort_get_device_domain(dev, mc_dev->icid,
-						    DOMAIN_BUS_FSL_MC_MSI);
-	}
-
-	return msi_domain;
-}
-
 struct irq_domain *fsl_mc_get_msi_parent(struct device *dev)
 {
 	struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
@@ -232,18 +102,10 @@ struct irq_domain *fsl_mc_get_msi_parent(struct device *dev)
 int fsl_mc_msi_domain_alloc_irqs(struct device *dev,  unsigned int irq_count)
 {
 	int error = msi_setup_device_data(dev);
-
 	if (error)
 		return error;
 
-	/*
-	 * NOTE: Calling this function will trigger the invocation of the
-	 * its_fsl_mc_msi_prepare() callback
-	 */
-	if (!irq_domain_is_msi_parent(dev_get_msi_domain(dev)))
-		error = msi_domain_alloc_irqs_range(dev, MSI_DEFAULT_DOMAIN, 0, irq_count - 1);
-	else
-		error = platform_device_msi_init_and_alloc_irqs(dev, irq_count, fsl_mc_write_msi_msg);
+	error = platform_device_msi_init_and_alloc_irqs(dev, irq_count, fsl_mc_write_msi_msg);
 	if (error)
 		dev_err(dev, "Failed to allocate IRQs\n");
 	return error;
diff --git a/drivers/bus/fsl-mc/fsl-mc-private.h b/drivers/bus/fsl-mc/fsl-mc-private.h
index 44868f874fd66..197edcc8cde46 100644
--- a/drivers/bus/fsl-mc/fsl-mc-private.h
+++ b/drivers/bus/fsl-mc/fsl-mc-private.h
@@ -641,7 +641,6 @@ int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
 
 void fsl_mc_msi_domain_free_irqs(struct device *dev);
 
-struct irq_domain *fsl_mc_find_msi_domain(struct device *dev);
 struct irq_domain *fsl_mc_get_msi_parent(struct device *dev);
 
 int __must_check fsl_create_mc_io(struct device *dev,
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index f334f49c9791f..c1f2095400c74 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -51,12 +51,6 @@ config ARM_GIC_V3_ITS
 	default ARM_GIC_V3
 	select IRQ_MSI_IOMMU
 
-config ARM_GIC_V3_ITS_FSL_MC
-	bool
-	depends on ARM_GIC_V3_ITS
-	depends on FSL_MC_BUS
-	default ARM_GIC_V3_ITS
-
 config ARM_GIC_V5
 	bool
 	select IRQ_DOMAIN_HIERARCHY
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
index 6a229443efe08..900f03299d9a5 100644
--- a/drivers/irqchip/Makefile
+++ b/drivers/irqchip/Makefile
@@ -35,7 +35,6 @@ obj-$(CONFIG_ARM_GIC_V2M)		+= irq-gic-v2m.o
 obj-$(CONFIG_ARM_GIC_V3)		+= irq-gic-v3.o irq-gic-v3-mbi.o irq-gic-common.o
 obj-$(CONFIG_ARM_GIC_ITS_PARENT)	+= irq-gic-its-msi-parent.o
 obj-$(CONFIG_ARM_GIC_V3_ITS)		+= irq-gic-v3-its.o irq-gic-v4.o
-obj-$(CONFIG_ARM_GIC_V3_ITS_FSL_MC)	+= irq-gic-v3-its-fsl-mc-msi.o
 obj-$(CONFIG_ARM_GIC_V5)		+= irq-gic-v5.o irq-gic-v5-irs.o irq-gic-v5-its.o \
 					   irq-gic-v5-iwb.o
 obj-$(CONFIG_HISILICON_IRQ_MBIGEN)	+= irq-mbigen.o
diff --git a/drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c b/drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c
deleted file mode 100644
index b5785472765a3..0000000000000
--- a/drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c
+++ /dev/null
@@ -1,168 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Freescale Management Complex (MC) bus driver MSI support
- *
- * Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
- * Author: German Rivera <German.Rivera@freescale.com>
- *
- */
-
-#include <linux/acpi.h>
-#include <linux/acpi_iort.h>
-#include <linux/irq.h>
-#include <linux/msi.h>
-#include <linux/of.h>
-#include <linux/of_irq.h>
-#include <linux/fsl/mc.h>
-
-static struct irq_chip its_msi_irq_chip = {
-	.name = "ITS-fMSI",
-	.irq_mask = irq_chip_mask_parent,
-	.irq_unmask = irq_chip_unmask_parent,
-	.irq_eoi = irq_chip_eoi_parent,
-	.irq_set_affinity = msi_domain_set_affinity
-};
-
-static u32 fsl_mc_msi_domain_get_msi_id(struct irq_domain *domain,
-					struct fsl_mc_device *mc_dev)
-{
-	struct device_node *of_node;
-	u32 out_id;
-
-	of_node = irq_domain_get_of_node(domain);
-	out_id = of_node ? of_msi_xlate(&mc_dev->dev, &of_node, mc_dev->icid) :
-			iort_msi_map_id(&mc_dev->dev, mc_dev->icid);
-
-	return out_id;
-}
-
-static int its_fsl_mc_msi_prepare(struct irq_domain *msi_domain,
-				  struct device *dev,
-				  int nvec, msi_alloc_info_t *info)
-{
-	struct fsl_mc_device *mc_bus_dev;
-	struct msi_domain_info *msi_info;
-
-	if (!dev_is_fsl_mc(dev))
-		return -EINVAL;
-
-	mc_bus_dev = to_fsl_mc_device(dev);
-	if (!(mc_bus_dev->flags & FSL_MC_IS_DPRC))
-		return -EINVAL;
-
-	/*
-	 * Set the device Id to be passed to the GIC-ITS:
-	 *
-	 * NOTE: This device id corresponds to the IOMMU stream ID
-	 * associated with the DPRC object (ICID).
-	 */
-	info->scratchpad[0].ul = fsl_mc_msi_domain_get_msi_id(msi_domain,
-							      mc_bus_dev);
-	msi_info = msi_get_domain_info(msi_domain->parent);
-
-	/* Allocate at least 32 MSIs, and always as a power of 2 */
-	nvec = max_t(int, 32, roundup_pow_of_two(nvec));
-	return msi_info->ops->msi_prepare(msi_domain->parent, dev, nvec, info);
-}
-
-static struct msi_domain_ops its_fsl_mc_msi_ops __ro_after_init = {
-	.msi_prepare = its_fsl_mc_msi_prepare,
-};
-
-static struct msi_domain_info its_fsl_mc_msi_domain_info = {
-	.flags	= (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS),
-	.ops	= &its_fsl_mc_msi_ops,
-	.chip	= &its_msi_irq_chip,
-};
-
-static const struct of_device_id its_device_id[] = {
-	{	.compatible	= "arm,gic-v3-its",	},
-	{},
-};
-
-static void __init its_fsl_mc_msi_init_one(struct fwnode_handle *handle,
-					  const char *name)
-{
-	struct irq_domain *parent;
-	struct irq_domain *mc_msi_domain;
-
-	parent = irq_find_matching_fwnode(handle, DOMAIN_BUS_NEXUS);
-	if (!parent || !msi_get_domain_info(parent)) {
-		pr_err("%s: unable to locate ITS domain\n", name);
-		return;
-	}
-
-	mc_msi_domain = fsl_mc_msi_create_irq_domain(handle,
-						&its_fsl_mc_msi_domain_info,
-						parent);
-	if (!mc_msi_domain) {
-		pr_err("%s: unable to create fsl-mc domain\n", name);
-		return;
-	}
-
-	pr_info("fsl-mc MSI: %s domain created\n", name);
-}
-
-#ifdef CONFIG_ACPI
-static int __init
-its_fsl_mc_msi_parse_madt(union acpi_subtable_headers *header,
-			  const unsigned long end)
-{
-	struct acpi_madt_generic_translator *its_entry;
-	struct fwnode_handle *dom_handle;
-	const char *node_name;
-	int err = 0;
-
-	its_entry = (struct acpi_madt_generic_translator *)header;
-	node_name = kasprintf(GFP_KERNEL, "ITS@0x%lx",
-			      (long)its_entry->base_address);
-
-	dom_handle = iort_find_domain_token(its_entry->translation_id);
-	if (!dom_handle) {
-		pr_err("%s: Unable to locate ITS domain handle\n", node_name);
-		err = -ENXIO;
-		goto out;
-	}
-
-	its_fsl_mc_msi_init_one(dom_handle, node_name);
-
-out:
-	kfree(node_name);
-	return err;
-}
-
-
-static void __init its_fsl_mc_acpi_msi_init(void)
-{
-	acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR,
-			      its_fsl_mc_msi_parse_madt, 0);
-}
-#else
-static inline void its_fsl_mc_acpi_msi_init(void) { }
-#endif
-
-static void __init its_fsl_mc_of_msi_init(void)
-{
-	struct device_node *np;
-
-	for (np = of_find_matching_node(NULL, its_device_id); np;
-	     np = of_find_matching_node(np, its_device_id)) {
-		if (!of_device_is_available(np))
-			continue;
-		if (!of_property_read_bool(np, "msi-controller"))
-			continue;
-
-		its_fsl_mc_msi_init_one(of_fwnode_handle(np),
-					np->full_name);
-	}
-}
-
-static int __init its_fsl_mc_msi_init(void)
-{
-	its_fsl_mc_of_msi_init();
-	its_fsl_mc_acpi_msi_init();
-
-	return 0;
-}
-
-early_initcall(its_fsl_mc_msi_init);
diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h
index bcc38c0fc230a..e9522233f9b57 100644
--- a/include/linux/fsl/mc.h
+++ b/include/linux/fsl/mc.h
@@ -425,10 +425,6 @@ int __must_check fsl_mc_object_allocate(struct fsl_mc_device *mc_dev,
 
 void fsl_mc_object_free(struct fsl_mc_device *mc_adev);
 
-struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
-						struct msi_domain_info *info,
-						struct irq_domain *parent);
-
 int __must_check fsl_mc_allocate_irqs(struct fsl_mc_device *mc_dev);
 
 void fsl_mc_free_irqs(struct fsl_mc_device *mc_dev);
-- 
2.47.3

Re: [PATCH 0/6] fsl-mc: Move fsl_over to device MSI

From: Sascha Bischoff <hidden>
Date: 2026-02-19 13:57:58

On Wed, 2026-02-18 at 13:51 +0000, Marc Zyngier wrote:
Over the past few years, I have become increasingly annoyed by this
sort of messages in my boot log:

[    0.067861] fsl-mc MSI: ITS@0x100100040000 domain created
[    0.073352] fsl-mc MSI: ITS@0x100100060000 domain created
[    0.078841] fsl-mc MSI: ITS@0x100100080000 domain created
[    0.084328] fsl-mc MSI: ITS@0x1001000a0000 domain created
[    0.089815] fsl-mc MSI: ITS@0x1001000c0000 domain created
[    0.095303] fsl-mc MSI: ITS@0x1001000e0000 domain created
[    0.100792] fsl-mc MSI: ITS@0x100100100000 domain created
[    0.106281] fsl-mc MSI: ITS@0x100100120000 domain created

While this is useful on fsl-mc systems, this is completely irrelevant
on 99.99999% of the arm64 machines, which know nothing about the
Freescale stuff. Including all of my machine -- bar *one*.

Global MSI domains such as the above have been obsoleted for the past
two years, but nobody at NXP seems to have got the message.

The obvious solution is to delete some code! While my first port of
call would be to just 'git rm -r drivers/bus/fsl-mc' (only kidding!),
a less invasive solution is to drag that code into the present times.
Which is what this series is doing by converting the whole thing to
device MSI, reusing the platform MSI infrastructure instead of
duplicating it.

This results in the expected cleanup, and kills the last user of the
non-device-MSI stuff on arm64. You're welcome.

Marc Zyngier (6):
  fsl-mc: Remove MSI domain propagation to sub-devices
  fsl_mc: Add minimal infrastructure to use platform MSI
  irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent
    handling
  fsl_mc: Switch over to per-device platform MSI
  fsl_mc: Remove legacy MSI implementation
  platform-msi: Remove stale comment

 drivers/base/platform-msi.c                 |   4 -
 drivers/bus/fsl-mc/dprc-driver.c            |  14 +-
 drivers/bus/fsl-mc/fsl-mc-bus.c             |   4 +-
 drivers/bus/fsl-mc/fsl-mc-msi.c             | 142 +++--------------
 drivers/bus/fsl-mc/fsl-mc-private.h         |   2 +-
 drivers/irqchip/Kconfig                     |   6 -
 drivers/irqchip/Makefile                    |   1 -
 drivers/irqchip/irq-gic-its-msi-parent.c    |   7 +-
 drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c | 168 ------------------
--
 include/linux/fsl/mc.h                      |   6 +-
 10 files changed, 33 insertions(+), 321 deletions(-)
 delete mode 100644 drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c
I have tested this series (applied to 6.19) with a SolidRun ClearFog CX
LX2 (LX2160A-based), and can confirm that the MSIs are working as I'd
expect them to. Therefore:

Tested-by: Sascha Bischoff <redacted>

Thanks,
Sascha

Re: [PATCH 0/6] fsl-mc: Move fsl_over to device MSI

From: Ioana Ciornei <ioana.ciornei@nxp.com>
Date: 2026-02-20 15:41:11

On Wed, Feb 18, 2026 at 01:51:57PM +0000, Marc Zyngier wrote:
Over the past few years, I have become increasingly annoyed by this
sort of messages in my boot log:

[    0.067861] fsl-mc MSI: ITS@0x100100040000 domain created
[    0.073352] fsl-mc MSI: ITS@0x100100060000 domain created
[    0.078841] fsl-mc MSI: ITS@0x100100080000 domain created
[    0.084328] fsl-mc MSI: ITS@0x1001000a0000 domain created
[    0.089815] fsl-mc MSI: ITS@0x1001000c0000 domain created
[    0.095303] fsl-mc MSI: ITS@0x1001000e0000 domain created
[    0.100792] fsl-mc MSI: ITS@0x100100100000 domain created
[    0.106281] fsl-mc MSI: ITS@0x100100120000 domain created

While this is useful on fsl-mc systems, this is completely irrelevant
on 99.99999% of the arm64 machines, which know nothing about the
Freescale stuff. Including all of my machine -- bar *one*.

Global MSI domains such as the above have been obsoleted for the past
two years, but nobody at NXP seems to have got the message.
I do admit that I wasn't aware that this neeeded work. In the future,
please let me know of this kind of things and I will do the work.
The obvious solution is to delete some code! While my first port of
call would be to just 'git rm -r drivers/bus/fsl-mc' (only kidding!),
a less invasive solution is to drag that code into the present times.
Which is what this series is doing by converting the whole thing to
device MSI, reusing the platform MSI infrastructure instead of
duplicating it.

This results in the expected cleanup, and kills the last user of the
non-device-MSI stuff on arm64. You're welcome.
Thanks!

Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> # LX2160ARDB, LS2088ARDB
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>

Re: [PATCH 3/6] irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent handling

From: Thomas Gleixner <tglx@kernel.org>
Date: 2026-02-22 22:57:47

On Wed, Feb 18 2026 at 13:52, Marc Zyngier wrote:
quoted hunk
Make the ITS code aware of fsl_mc devices by plumbing the devid
retrieval primitive.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/irqchip/irq-gic-its-msi-parent.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/irqchip/irq-gic-its-msi-parent.c b/drivers/irqchip/irq-gic-its-msi-parent.c
index 12f45228c8674..532c0d626ca04 100644
--- a/drivers/irqchip/irq-gic-its-msi-parent.c
+++ b/drivers/irqchip/irq-gic-its-msi-parent.c
@@ -7,6 +7,7 @@
 #include <linux/acpi_iort.h>
 #include <linux/of_address.h>
 #include <linux/pci.h>
+#include <linux/fsl/mc.h>
 
 #include "irq-gic-its-msi-parent.h"
 #include <linux/irqchip/irq-msi-lib.h>
@@ -186,9 +187,11 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
 {
 	struct msi_domain_info *msi_info;
 	u32 dev_id;
-	int ret;
+	int ret = 0;
 
-	if (dev->of_node)
+	if (dev_is_fsl_mc(dev))
+		dev_id = fsl_mc_get_msi_id(dev);
+	else if (dev->of_node)
 		ret = of_pmsi_get_msi_info(domain->parent, dev, &dev_id, NULL);
 	else
 		ret = iort_pmsi_get_dev_id(dev, &dev_id);
This rejects as you are building against an unmerged change (I assume
it's Lorenzos GIC5 stuff). I can fix it up when applying.

Thanks,

        tglx

Re: [PATCH 3/6] irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent handling

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-23 09:01:05

On Sun, 22 Feb 2026 22:57:44 +0000,
Thomas Gleixner [off-list ref] wrote:
On Wed, Feb 18 2026 at 13:52, Marc Zyngier wrote:
quoted
Make the ITS code aware of fsl_mc devices by plumbing the devid
retrieval primitive.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/irqchip/irq-gic-its-msi-parent.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/irqchip/irq-gic-its-msi-parent.c b/drivers/irqchip/irq-gic-its-msi-parent.c
index 12f45228c8674..532c0d626ca04 100644
--- a/drivers/irqchip/irq-gic-its-msi-parent.c
+++ b/drivers/irqchip/irq-gic-its-msi-parent.c
@@ -7,6 +7,7 @@
 #include <linux/acpi_iort.h>
 #include <linux/of_address.h>
 #include <linux/pci.h>
+#include <linux/fsl/mc.h>
 
 #include "irq-gic-its-msi-parent.h"
 #include <linux/irqchip/irq-msi-lib.h>
@@ -186,9 +187,11 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
 {
 	struct msi_domain_info *msi_info;
 	u32 dev_id;
-	int ret;
+	int ret = 0;
 
-	if (dev->of_node)
+	if (dev_is_fsl_mc(dev))
+		dev_id = fsl_mc_get_msi_id(dev);
+	else if (dev->of_node)
 		ret = of_pmsi_get_msi_info(domain->parent, dev, &dev_id, NULL);
 	else
 		ret = iort_pmsi_get_dev_id(dev, &dev_id);
This rejects as you are building against an unmerged change (I assume
it's Lorenzos GIC5 stuff). I can fix it up when applying.
That was against vanilla 6.19. I'll rebase on -rc1 to satisfy myself
that this is still doing the right thing after the ACPI crap fest, and
repost the result.

Thanks,

	M.

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

Re: [PATCH 3/6] irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent handling

From: Thomas Gleixner <tglx@kernel.org>
Date: 2026-02-23 13:02:53

On Mon, Feb 23 2026 at 09:01, Marc Zyngier wrote:
On Sun, 22 Feb 2026 22:57:44 +0000,
Thomas Gleixner [off-list ref] wrote:
quoted
This rejects as you are building against an unmerged change (I assume
it's Lorenzos GIC5 stuff). I can fix it up when applying.
That was against vanilla 6.19. I'll rebase on -rc1 to satisfy myself
that this is still doing the right thing after the ACPI crap fest, and
repost the result.
Ah. The other way round :)

My resolution is simple and it looks about right. Please note the
cosmetic changes I did on the way :)

Thanks,

        tglx
---
--- a/drivers/irqchip/irq-gic-its-msi-parent.c
+++ b/drivers/irqchip/irq-gic-its-msi-parent.c
@@ -5,6 +5,7 @@
 // Copyright (C) 2022 Intel
 
 #include <linux/acpi_iort.h>
+#include <linux/fsl/mc.h>
 #include <linux/of_address.h>
 #include <linux/pci.h>
 
@@ -186,10 +187,12 @@ static int its_pmsi_prepare(struct irq_d
 			    int nvec, msi_alloc_info_t *info)
 {
 	struct msi_domain_info *msi_info;
+	int ret = 0;
 	u32 dev_id;
-	int ret;
 
-	if (dev->of_node)
+	if (dev_is_fsl_mc(dev))
+		dev_id = fsl_mc_get_msi_id(dev);
+	else if (dev->of_node)
 		ret = of_pmsi_get_msi_info(domain->parent, dev, &dev_id, NULL);
 	else
 		ret = iort_pmsi_get_msi_info(dev, &dev_id, NULL);

Re: [PATCH 3/6] irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent handling

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-23 13:22:08

On Mon, 23 Feb 2026 13:02:50 +0000,
Thomas Gleixner [off-list ref] wrote:
On Mon, Feb 23 2026 at 09:01, Marc Zyngier wrote:
quoted
On Sun, 22 Feb 2026 22:57:44 +0000,
Thomas Gleixner [off-list ref] wrote:
quoted
This rejects as you are building against an unmerged change (I assume
it's Lorenzos GIC5 stuff). I can fix it up when applying.
That was against vanilla 6.19. I'll rebase on -rc1 to satisfy myself
that this is still doing the right thing after the ACPI crap fest, and
repost the result.
Ah. The other way round :)

My resolution is simple and it looks about right. Please note the
cosmetic changes I did on the way :)
Yup, looks good to me. And yes, moving the include up is the right
thing to do.

I have another small change in my current stack that also drops
DOMAIN_BUS_FSL_MC_MSI from include/linux/irqdomain_defs.h. Could be
folded into patch #5.

Thanks,

	M.

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

Re: [PATCH 0/6] fsl-mc: Move fsl_over to device MSI

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-23 13:37:14

On Fri, 20 Feb 2026 15:41:03 +0000,
Ioana Ciornei [off-list ref] wrote:
On Wed, Feb 18, 2026 at 01:51:57PM +0000, Marc Zyngier wrote:
quoted
Over the past few years, I have become increasingly annoyed by this
sort of messages in my boot log:

[    0.067861] fsl-mc MSI: ITS@0x100100040000 domain created
[    0.073352] fsl-mc MSI: ITS@0x100100060000 domain created
[    0.078841] fsl-mc MSI: ITS@0x100100080000 domain created
[    0.084328] fsl-mc MSI: ITS@0x1001000a0000 domain created
[    0.089815] fsl-mc MSI: ITS@0x1001000c0000 domain created
[    0.095303] fsl-mc MSI: ITS@0x1001000e0000 domain created
[    0.100792] fsl-mc MSI: ITS@0x100100100000 domain created
[    0.106281] fsl-mc MSI: ITS@0x100100120000 domain created

While this is useful on fsl-mc systems, this is completely irrelevant
on 99.99999% of the arm64 machines, which know nothing about the
Freescale stuff. Including all of my machine -- bar *one*.

Global MSI domains such as the above have been obsoleted for the past
two years, but nobody at NXP seems to have got the message.
I do admit that I wasn't aware that this neeeded work. In the future,
please let me know of this kind of things and I will do the work.
I guess Thomas did too good a job not breaking fsl-mc when both PCI
and platform MSIs were rewritten, hence you missing on the good stuff!
quoted
The obvious solution is to delete some code! While my first port of
call would be to just 'git rm -r drivers/bus/fsl-mc' (only kidding!),
a less invasive solution is to drag that code into the present times.
Which is what this series is doing by converting the whole thing to
device MSI, reusing the platform MSI infrastructure instead of
duplicating it.

This results in the expected cleanup, and kills the last user of the
non-device-MSI stuff on arm64. You're welcome.
Thanks!

Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> # LX2160ARDB, LS2088ARDB
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Thanks for giving it a go.

	M.

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

Re: [PATCH 0/6] fsl-mc: Move fsl_over to device MSI

From: "Christophe Leroy (CS GROUP)" <chleroy@kernel.org>
Date: 2026-02-23 13:54:13

Hi Marc,

Le 23/02/2026 à 14:37, Marc Zyngier a écrit :
On Fri, 20 Feb 2026 15:41:03 +0000,
Ioana Ciornei [off-list ref] wrote:
quoted
On Wed, Feb 18, 2026 at 01:51:57PM +0000, Marc Zyngier wrote:
quoted
Over the past few years, I have become increasingly annoyed by this
sort of messages in my boot log:

[    0.067861] fsl-mc MSI: ITS@0x100100040000 domain created
[    0.073352] fsl-mc MSI: ITS@0x100100060000 domain created
[    0.078841] fsl-mc MSI: ITS@0x100100080000 domain created
[    0.084328] fsl-mc MSI: ITS@0x1001000a0000 domain created
[    0.089815] fsl-mc MSI: ITS@0x1001000c0000 domain created
[    0.095303] fsl-mc MSI: ITS@0x1001000e0000 domain created
[    0.100792] fsl-mc MSI: ITS@0x100100100000 domain created
[    0.106281] fsl-mc MSI: ITS@0x100100120000 domain created

While this is useful on fsl-mc systems, this is completely irrelevant
on 99.99999% of the arm64 machines, which know nothing about the
Freescale stuff. Including all of my machine -- bar *one*.

Global MSI domains such as the above have been obsoleted for the past
two years, but nobody at NXP seems to have got the message.
I do admit that I wasn't aware that this neeeded work. In the future,
please let me know of this kind of things and I will do the work.
I guess Thomas did too good a job not breaking fsl-mc when both PCI
and platform MSIs were rewritten, hence you missing on the good stuff!
quoted
quoted
The obvious solution is to delete some code! While my first port of
call would be to just 'git rm -r drivers/bus/fsl-mc' (only kidding!),
a less invasive solution is to drag that code into the present times.
Which is what this series is doing by converting the whole thing to
device MSI, reusing the platform MSI infrastructure instead of
duplicating it.

This results in the expected cleanup, and kills the last user of the
non-device-MSI stuff on arm64. You're welcome.
Thanks!

Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> # LX2160ARDB, LS2088ARDB
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Thanks for giving it a go.
Don't know what is your merge plan. I wanted to push it to soc fsl tree 
but it doesn't apply on top of v7.0-rc1:

$ LANG= b4 shazam -l 20260218135203.2267907-1-maz@kernel.org
Grabbing thread from 
lore.kernel.org/all/20260218135203.2267907-1-maz@kernel.org/t.mbox.gz
Checking for newer revisions
Grabbing search results from lore.kernel.org
Analyzing 14 messages in the thread
Analyzing 0 code-review messages
Checking attestation on all messages, may take a moment...
---
   ✓ [PATCH 1/6] fsl-mc: Remove MSI domain propagation to sub-devices
     + Tested-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Reviewed-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Tested-by: Sascha Bischoff [off-list ref] (✓ DKIM/arm.com)
     + Link: 
https://lore.kernel.org/r/20260218135203.2267907-2-maz@kernel.org
   ✓ [PATCH 2/6] fsl_mc: Add minimal infrastructure to use platform MSI
     + Tested-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Reviewed-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Tested-by: Sascha Bischoff [off-list ref] (✓ DKIM/arm.com)
     + Link: 
https://lore.kernel.org/r/20260218135203.2267907-3-maz@kernel.org
   ✓ [PATCH 3/6] irqchip/gic-v3-its: Add fsl_mc device plumbing to the 
msi-parent handling
     + Tested-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Reviewed-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Tested-by: Sascha Bischoff [off-list ref] (✓ DKIM/arm.com)
     + Link: 
https://lore.kernel.org/r/20260218135203.2267907-4-maz@kernel.org
   ✓ [PATCH 4/6] fsl_mc: Switch over to per-device platform MSI
     + Tested-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Reviewed-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Tested-by: Sascha Bischoff [off-list ref] (✓ DKIM/arm.com)
     + Link: 
https://lore.kernel.org/r/20260218135203.2267907-5-maz@kernel.org
   ✓ [PATCH 5/6] fsl_mc: Remove legacy MSI implementation
     + Tested-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Reviewed-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Tested-by: Sascha Bischoff [off-list ref] (✓ DKIM/arm.com)
     + Link: 
https://lore.kernel.org/r/20260218135203.2267907-6-maz@kernel.org
   ✓ [PATCH 6/6] platform-msi: Remove stale comment
     + Tested-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Reviewed-by: Ioana Ciornei [off-list ref] (✓ DKIM/nxp.com)
     + Tested-by: Sascha Bischoff [off-list ref] (✓ DKIM/arm.com)
     + Link: 
https://lore.kernel.org/r/20260218135203.2267907-7-maz@kernel.org
   ---
   ✓ Signed: DKIM/kernel.org
---
Total patches: 6
---
Applying: fsl-mc: Remove MSI domain propagation to sub-devices
Applying: fsl_mc: Add minimal infrastructure to use platform MSI
Applying: irqchip/gic-v3-its: Add fsl_mc device plumbing to the 
msi-parent handling
Patch failed at 0003 irqchip/gic-v3-its: Add fsl_mc device plumbing to 
the msi-parent handling
error: patch failed: drivers/irqchip/irq-gic-its-msi-parent.c:186
error: drivers/irqchip/irq-gic-its-msi-parent.c: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am 
--abort".
hint: Disable this message with "git config set advice.mergeConflict false"


Let me know how you want to proceed.

Thanks
Christophe

Re: [PATCH 3/6] irqchip/gic-v3-its: Add fsl_mc device plumbing to the msi-parent handling

From: Thomas Gleixner <tglx@kernel.org>
Date: 2026-02-24 06:52:53

On Mon, Feb 23 2026 at 13:22, Marc Zyngier wrote:
On Mon, 23 Feb 2026 13:02:50 +0000,
Thomas Gleixner [off-list ref] wrote:
quoted
On Mon, Feb 23 2026 at 09:01, Marc Zyngier wrote:
quoted
On Sun, 22 Feb 2026 22:57:44 +0000,
Thomas Gleixner [off-list ref] wrote:
quoted
This rejects as you are building against an unmerged change (I assume
it's Lorenzos GIC5 stuff). I can fix it up when applying.
That was against vanilla 6.19. I'll rebase on -rc1 to satisfy myself
that this is still doing the right thing after the ACPI crap fest, and
repost the result.
Ah. The other way round :)

My resolution is simple and it looks about right. Please note the
cosmetic changes I did on the way :)
Yup, looks good to me. And yes, moving the include up is the right
thing to do.

I have another small change in my current stack that also drops
DOMAIN_BUS_FSL_MC_MSI from include/linux/irqdomain_defs.h. Could be
folded into patch #5.
Just resend the pile.

Re: [PATCH 0/6] fsl-mc: Move fsl_over to device MSI

From: Thomas Gleixner <tglx@kernel.org>
Date: 2026-02-24 06:54:08

On Mon, Feb 23 2026 at 14:54, Christophe Leroy (CS GROUP) wrote:
Le 23/02/2026 à 14:37, Marc Zyngier a écrit :
quoted
Thanks for giving it a go.
Don't know what is your merge plan. I wanted to push it to soc fsl tree 
but it doesn't apply on top of v7.0-rc1:
We already established that. Marc will resend and yes, feel free to take
it through the FSL SoC tree.

Re: [PATCH 0/6] fsl-mc: Move fsl_over to device MSI

From: Marc Zyngier <maz@kernel.org>
Date: 2026-02-24 10:19:52

Hi Christophe,

On Mon, 23 Feb 2026 13:54:10 +0000,
"Christophe Leroy (CS GROUP)" [off-list ref] wrote:
Don't know what is your merge plan. I wanted to push it to soc fsl
tree but it doesn't apply on top of v7.0-rc1:
Not completely unexpected, as -rc1 wasn't released when I posted this,
hence being based on the latest tag from Linus' tree at the point of
posting (v6.19 in this case).

[...]
Let me know how you want to proceed.
I've since reposted the series at [1], based on -rc1, and Thomas has
indicated he was OK with you merging it directly -- works for me.

Thanks,

	M.

[1] https://lore.kernel.org/r/20260224100936.3752303-1-maz@kernel.org

-- 
Without deviation from the norm, progress is not possible.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help