* [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion
@ 2024-12-04 12:45 Marc Zyngier
2024-12-04 12:45 ` [PATCH 01/11] irqchip: Make irq-msi-lib.h globally available Marc Zyngier
` (10 more replies)
0 siblings, 11 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
I've become annoyed by the couple of machines I have around that
haven't been converted to the per-device MSI infrastructure. At the
same time, I've also moaned at the amount of boilerplate code required
to make use of this infrastructure.
This series therefore does a number of things:
- make irq-msi-lib.h globally available, so that PCI (and other
subsystems) may make use of it
- add a new helper (msi_create_parent_irq_domain()) that encapsulates
most of the magic required to create an MSI-parent domain
- convert all the existing users *except* arch/x86/kernel/apic/msi.c,
which is far too esoteric for me to touch it
- convert the Apple and XGene MSI drivers to the MSI-parent
infrastructure, which is why I came here the first place.
I've only tested the arm64 stuff I have access to (or care about), and
I would appreciate the respective maintainers/users of the other
drivers to give it a go, or at least a cursory look.
Patches on top of 6.13-rc1.
Marc Zyngier (11):
irqchip: Make irq-msi-lib.h globally available
genirq/msi: Add helper for creating MSI-parent irq domains
irqchip/gic: Convert to msi_create_parent_irq_domain() helper
irqchip/mvebu: Convert to msi_create_parent_irq_domain() helper
irqchip/riscv-imsic: Convert to msi_create_parent_irq_domain() helper
irqchip/imx-mu-msi: Convert to msi_create_parent_irq_domain() helper
irqchip/loongson-pch-msi: Convert to msi_create_parent_irq_domain()
helper
iommu/amd: Convert to msi_create_parent_irq_domain() helper
iommu/intel: Convert to msi_create_parent_irq_domain() helper
PCI: apple: Convert to MSI parent infrastructure
PCI: xgene: Convert to MSI parent infrastructure
drivers/iommu/amd/iommu.c | 12 ++--
drivers/iommu/intel/irq_remapping.c | 16 ++----
drivers/irqchip/irq-gic-v2m.c | 11 ++--
drivers/irqchip/irq-gic-v3-its-msi-parent.c | 2 +-
drivers/irqchip/irq-gic-v3-its.c | 16 ++----
drivers/irqchip/irq-gic-v3-mbi.c | 11 ++--
drivers/irqchip/irq-imx-mu-msi.c | 10 ++--
drivers/irqchip/irq-loongarch-avec.c | 2 +-
drivers/irqchip/irq-loongson-pch-msi.c | 15 ++---
drivers/irqchip/irq-msi-lib.c | 2 +-
drivers/irqchip/irq-mvebu-gicp.c | 14 ++---
drivers/irqchip/irq-mvebu-icu.c | 2 +-
drivers/irqchip/irq-mvebu-odmi.c | 15 ++---
drivers/irqchip/irq-mvebu-sei.c | 16 ++----
drivers/irqchip/irq-riscv-imsic-platform.c | 11 ++--
drivers/pci/controller/Kconfig | 2 +
drivers/pci/controller/pci-xgene-msi.c | 44 +++++---------
drivers/pci/controller/pcie-apple.c | 57 ++++++-------------
.../linux}/irqchip/irq-msi-lib.h | 6 +-
include/linux/msi.h | 7 +++
kernel/irq/msi.c | 40 +++++++++++++
21 files changed, 146 insertions(+), 165 deletions(-)
rename {drivers => include/linux}/irqchip/irq-msi-lib.h (84%)
--
2.39.2
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 01/11] irqchip: Make irq-msi-lib.h globally available
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 02/11] genirq/msi: Add helper for creating MSI-parent irq domains Marc Zyngier
` (9 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Move irq-msi-lib.h into include/linux/irqchip, making it available
to compilation units outside of drivers/irqchip. This requires some
churn in drivers to fetch it from the new location.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/irqchip/irq-gic-v2m.c | 2 +-
drivers/irqchip/irq-gic-v3-its-msi-parent.c | 2 +-
drivers/irqchip/irq-gic-v3-its.c | 2 +-
drivers/irqchip/irq-gic-v3-mbi.c | 2 +-
drivers/irqchip/irq-imx-mu-msi.c | 2 +-
drivers/irqchip/irq-loongarch-avec.c | 2 +-
drivers/irqchip/irq-loongson-pch-msi.c | 2 +-
drivers/irqchip/irq-msi-lib.c | 2 +-
drivers/irqchip/irq-mvebu-gicp.c | 2 +-
drivers/irqchip/irq-mvebu-icu.c | 2 +-
drivers/irqchip/irq-mvebu-odmi.c | 2 +-
drivers/irqchip/irq-mvebu-sei.c | 2 +-
{drivers => include/linux}/irqchip/irq-msi-lib.h | 6 +++---
13 files changed, 15 insertions(+), 15 deletions(-)
rename {drivers => include/linux}/irqchip/irq-msi-lib.h (84%)
diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index be35c5349986a..db79ae622f3c4 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -26,7 +26,7 @@
#include <linux/irqchip/arm-gic.h>
#include <linux/irqchip/arm-gic-common.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
/*
* MSI_TYPER:
diff --git a/drivers/irqchip/irq-gic-v3-its-msi-parent.c b/drivers/irqchip/irq-gic-v3-its-msi-parent.c
index e150365fbe892..b4adee2a1aaae 100644
--- a/drivers/irqchip/irq-gic-v3-its-msi-parent.c
+++ b/drivers/irqchip/irq-gic-v3-its-msi-parent.c
@@ -8,7 +8,7 @@
#include <linux/pci.h>
#include "irq-gic-common.h"
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#define ITS_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \
MSI_FLAG_USE_DEF_CHIP_OPS | \
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 92244cfa04647..334fd15be1de1 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -41,7 +41,7 @@
#include <asm/exception.h>
#include "irq-gic-common.h"
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#define ITS_FLAGS_CMDQ_NEEDS_FLUSHING (1ULL << 0)
#define ITS_FLAGS_WORKAROUND_CAVIUM_22375 (1ULL << 1)
diff --git a/drivers/irqchip/irq-gic-v3-mbi.c b/drivers/irqchip/irq-gic-v3-mbi.c
index 3fe870f8ee174..63c658375fd55 100644
--- a/drivers/irqchip/irq-gic-v3-mbi.c
+++ b/drivers/irqchip/irq-gic-v3-mbi.c
@@ -18,7 +18,7 @@
#include <linux/irqchip/arm-gic-v3.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
struct mbi_range {
u32 spi_start;
diff --git a/drivers/irqchip/irq-imx-mu-msi.c b/drivers/irqchip/irq-imx-mu-msi.c
index 4342a21de1eb0..b3f656c6e7708 100644
--- a/drivers/irqchip/irq-imx-mu-msi.c
+++ b/drivers/irqchip/irq-imx-mu-msi.c
@@ -24,7 +24,7 @@
#include <linux/pm_domain.h>
#include <linux/spinlock.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#define IMX_MU_CHANS 4
diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loongarch-avec.c
index 0f6e465dd3095..c95704707219d 100644
--- a/drivers/irqchip/irq-loongarch-avec.c
+++ b/drivers/irqchip/irq-loongarch-avec.c
@@ -18,7 +18,7 @@
#include <asm/loongarch.h>
#include <asm/setup.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#include "irq-loongson.h"
#define VECTORS_PER_REG 64
diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
index bd337ecddb409..3f6f4e9887c53 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -15,7 +15,7 @@
#include <linux/pci.h>
#include <linux/slab.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#include "irq-loongson.h"
static int nr_pics;
diff --git a/drivers/irqchip/irq-msi-lib.c b/drivers/irqchip/irq-msi-lib.c
index d8e29fc0d4068..514b2616d9559 100644
--- a/drivers/irqchip/irq-msi-lib.c
+++ b/drivers/irqchip/irq-msi-lib.c
@@ -4,7 +4,7 @@
#include <linux/export.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
/**
* msi_lib_init_dev_msi_info - Domain info setup for MSI domains
diff --git a/drivers/irqchip/irq-mvebu-gicp.c b/drivers/irqchip/irq-mvebu-gicp.c
index 2b6183919ea48..b206b7fe03f17 100644
--- a/drivers/irqchip/irq-mvebu-gicp.c
+++ b/drivers/irqchip/irq-mvebu-gicp.c
@@ -17,7 +17,7 @@
#include <linux/of_platform.h>
#include <linux/platform_device.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
diff --git a/drivers/irqchip/irq-mvebu-icu.c b/drivers/irqchip/irq-mvebu-icu.c
index b337f6c05f184..30d51a26ea05f 100644
--- a/drivers/irqchip/irq-mvebu-icu.c
+++ b/drivers/irqchip/irq-mvebu-icu.c
@@ -20,7 +20,7 @@
#include <linux/of_platform.h>
#include <linux/platform_device.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#include <dt-bindings/interrupt-controller/mvebu-icu.h>
diff --git a/drivers/irqchip/irq-mvebu-odmi.c b/drivers/irqchip/irq-mvebu-odmi.c
index ff19bfd258dce..0ba39fbdb451f 100644
--- a/drivers/irqchip/irq-mvebu-odmi.c
+++ b/drivers/irqchip/irq-mvebu-odmi.c
@@ -18,7 +18,7 @@
#include <linux/of_address.h>
#include <linux/slab.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
diff --git a/drivers/irqchip/irq-mvebu-sei.c b/drivers/irqchip/irq-mvebu-sei.c
index 065166ab5dbc0..c12e650ae7c92 100644
--- a/drivers/irqchip/irq-mvebu-sei.c
+++ b/drivers/irqchip/irq-mvebu-sei.c
@@ -14,7 +14,7 @@
#include <linux/of_irq.h>
#include <linux/of_platform.h>
-#include "irq-msi-lib.h"
+#include <linux/irqchip/irq-msi-lib.h>
/* Cause register */
#define GICP_SECR(idx) (0x0 + ((idx) * 0x4))
diff --git a/drivers/irqchip/irq-msi-lib.h b/include/linux/irqchip/irq-msi-lib.h
similarity index 84%
rename from drivers/irqchip/irq-msi-lib.h
rename to include/linux/irqchip/irq-msi-lib.h
index 681ceabb7bc74..dd8d1d1385449 100644
--- a/drivers/irqchip/irq-msi-lib.h
+++ b/include/linux/irqchip/irq-msi-lib.h
@@ -2,8 +2,8 @@
// Copyright (C) 2022 Linutronix GmbH
// Copyright (C) 2022 Intel
-#ifndef _DRIVERS_IRQCHIP_IRQ_MSI_LIB_H
-#define _DRIVERS_IRQCHIP_IRQ_MSI_LIB_H
+#ifndef _IRQCHIP_IRQ_MSI_LIB_H
+#define _IRQCHIP_IRQ_MSI_LIB_H
#include <linux/bits.h>
#include <linux/irqdomain.h>
@@ -24,4 +24,4 @@ bool msi_lib_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
struct irq_domain *real_parent,
struct msi_domain_info *info);
-#endif /* _DRIVERS_IRQCHIP_IRQ_MSI_LIB_H */
+#endif /* _IRQCHIP_IRQ_MSI_LIB_H */
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 02/11] genirq/msi: Add helper for creating MSI-parent irq domains
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
2024-12-04 12:45 ` [PATCH 01/11] irqchip: Make irq-msi-lib.h globally available Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 13:57 ` Thomas Gleixner
2024-12-04 12:45 ` [PATCH 03/11] irqchip/gic: Convert to msi_create_parent_irq_domain() helper Marc Zyngier
` (8 subsequent siblings)
10 siblings, 1 reply; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Creating an irq domain that serves as an MSI parent requires
a substantial amount of esoteric boiler-plate code, some of
which is often provided twice (such as the bus token).
To make things a bit simpler for the unsuspecting MSI tinkerer,
provide a helper that does it for them, and serves as documentation
of what needs to be provided.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
include/linux/msi.h | 7 +++++++
kernel/irq/msi.c | 40 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+)
diff --git a/include/linux/msi.h b/include/linux/msi.h
index b10093c4d00ea..f08d14cf07103 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -594,6 +594,13 @@ struct irq_domain *msi_create_irq_domain(struct fwnode_handle *fwnode,
struct msi_domain_info *info,
struct irq_domain *parent);
+struct irq_domain *msi_create_parent_irq_domain(struct fwnode_handle *fwnode,
+ const struct msi_parent_ops *msi_parent_ops,
+ const struct irq_domain_ops *ops,
+ unsigned long flags, unsigned long size,
+ void *host_data,
+ struct irq_domain *parent);
+
bool msi_create_device_irq_domain(struct device *dev, unsigned int domid,
const struct msi_domain_template *template,
unsigned int hwsize, void *domain_data,
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 396a067a8a56b..037d85cf0b21c 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -885,6 +885,46 @@ struct irq_domain *msi_create_irq_domain(struct fwnode_handle *fwnode,
return __msi_create_irq_domain(fwnode, info, 0, parent);
}
+/**
+ * msi_create_parent_irq_domain - Create an MSI-parent interrupt domain
+ * @fwnode: Optional fwnode of the interrupt controller
+ * @msi_parent_ops: MSI parent callbacks and configuration
+ * @ops: Interrupt domain ballbacks
+ * @flags: Interrupt domain flags
+ * @size: Interrupt domain size (0 if arbitrarily large)
+ * @host_data: Interrupt domain private data
+ * @parent: Parent irq domain
+ *
+ * Return: pointer to the created &struct irq_domain or %NULL on failure
+ */
+struct irq_domain *msi_create_parent_irq_domain(struct fwnode_handle *fwnode,
+ const struct msi_parent_ops *msi_parent_ops,
+ const struct irq_domain_ops *ops,
+ unsigned long flags, unsigned long size,
+ void *host_data,
+ struct irq_domain *parent)
+{
+ struct irq_domain_info info = {
+ .fwnode = fwnode,
+ .size = size,
+ .hwirq_max = size,
+ .ops = ops,
+ .host_data = host_data,
+ .domain_flags = flags | IRQ_DOMAIN_FLAG_MSI_PARENT,
+ .parent = parent,
+ .bus_token = msi_parent_ops->bus_select_token,
+ };
+ struct irq_domain *d;
+
+ d = irq_domain_instantiate(&info);
+ if (IS_ERR(d))
+ return NULL;
+
+ d->msi_parent_ops = msi_parent_ops;
+ return d;
+}
+EXPORT_SYMBOL_GPL(msi_create_parent_irq_domain);
+
/**
* msi_parent_init_dev_msi_info - Delegate initialization of device MSI info down
* in the domain hierarchy
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 03/11] irqchip/gic: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
2024-12-04 12:45 ` [PATCH 01/11] irqchip: Make irq-msi-lib.h globally available Marc Zyngier
2024-12-04 12:45 ` [PATCH 02/11] genirq/msi: Add helper for creating MSI-parent irq domains Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 04/11] irqchip/mvebu: " Marc Zyngier
` (7 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Now that we have a concise helper to create an MSI parent domain,
switch the GIC family over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/irqchip/irq-gic-v2m.c | 9 ++++-----
drivers/irqchip/irq-gic-v3-its.c | 14 +++++---------
drivers/irqchip/irq-gic-v3-mbi.c | 9 ++++-----
3 files changed, 13 insertions(+), 19 deletions(-)
diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index db79ae622f3c4..4916743aed314 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -270,16 +270,15 @@ static __init int gicv2m_allocate_domains(struct irq_domain *parent)
if (!v2m)
return 0;
- inner_domain = irq_domain_create_hierarchy(parent, 0, 0, v2m->fwnode,
- &gicv2m_domain_ops, v2m);
+ inner_domain = msi_create_parent_irq_domain(v2m->fwnode,
+ &gicv2m_msi_parent_ops,
+ &gicv2m_domain_ops,
+ 0, 0, v2m, parent);
if (!inner_domain) {
pr_err("Failed to create GICv2m domain\n");
return -ENOMEM;
}
- irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
- inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- inner_domain->msi_parent_ops = &gicv2m_msi_parent_ops;
return 0;
}
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 334fd15be1de1..6f61ee7c5d394 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -5114,20 +5114,16 @@ static int its_init_domain(struct its_node *its)
info->ops = &its_msi_domain_ops;
info->data = its;
- inner_domain = irq_domain_create_hierarchy(its_parent,
- its->msi_domain_flags, 0,
- its->fwnode_handle, &its_domain_ops,
- info);
+ inner_domain = msi_create_parent_irq_domain(its->fwnode_handle,
+ &gic_v3_its_msi_parent_ops,
+ &its_domain_ops,
+ its->msi_domain_flags, 0,
+ info, its_parent);
if (!inner_domain) {
kfree(info);
return -ENOMEM;
}
- irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
-
- inner_domain->msi_parent_ops = &gic_v3_its_msi_parent_ops;
- inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
-
return 0;
}
diff --git a/drivers/irqchip/irq-gic-v3-mbi.c b/drivers/irqchip/irq-gic-v3-mbi.c
index 63c658375fd55..e5f532f95148d 100644
--- a/drivers/irqchip/irq-gic-v3-mbi.c
+++ b/drivers/irqchip/irq-gic-v3-mbi.c
@@ -211,14 +211,13 @@ static int mbi_allocate_domain(struct irq_domain *parent)
{
struct irq_domain *nexus_domain;
- nexus_domain = irq_domain_create_hierarchy(parent, 0, 0, parent->fwnode,
- &mbi_domain_ops, NULL);
+ nexus_domain = msi_create_parent_irq_domain(parent->fwnode,
+ &gic_v3_mbi_msi_parent_ops,
+ &mbi_domain_ops,
+ 0, 0, NULL, parent);
if (!nexus_domain)
return -ENOMEM;
- irq_domain_update_bus_token(nexus_domain, DOMAIN_BUS_NEXUS);
- nexus_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- nexus_domain->msi_parent_ops = &gic_v3_mbi_msi_parent_ops;
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 04/11] irqchip/mvebu: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (2 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 03/11] irqchip/gic: Convert to msi_create_parent_irq_domain() helper Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 05/11] irqchip/riscv-imsic: " Marc Zyngier
` (6 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Now that we have a concise helper to create an MSI parent domain,
switch the mvebu family of interrupt controllers over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/irqchip/irq-mvebu-gicp.c | 12 +++++-------
drivers/irqchip/irq-mvebu-odmi.c | 13 +++++--------
drivers/irqchip/irq-mvebu-sei.c | 14 +++++---------
3 files changed, 15 insertions(+), 24 deletions(-)
diff --git a/drivers/irqchip/irq-mvebu-gicp.c b/drivers/irqchip/irq-mvebu-gicp.c
index b206b7fe03f17..783bfc83c2607 100644
--- a/drivers/irqchip/irq-mvebu-gicp.c
+++ b/drivers/irqchip/irq-mvebu-gicp.c
@@ -229,16 +229,14 @@ static int mvebu_gicp_probe(struct platform_device *pdev)
return -ENODEV;
}
- inner_domain = irq_domain_create_hierarchy(parent_domain, 0,
- gicp->spi_cnt,
- of_node_to_fwnode(node),
- &gicp_domain_ops, gicp);
+ inner_domain = msi_create_parent_irq_domain(of_node_to_fwnode(node),
+ &gicp_msi_parent_ops,
+ &gicp_domain_ops,
+ 0, gicp->spi_cnt, gicp,
+ parent_domain);
if (!inner_domain)
return -ENOMEM;
- irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_GENERIC_MSI);
- inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- inner_domain->msi_parent_ops = &gicp_msi_parent_ops;
return 0;
}
diff --git a/drivers/irqchip/irq-mvebu-odmi.c b/drivers/irqchip/irq-mvebu-odmi.c
index 0ba39fbdb451f..74308b1cc01f1 100644
--- a/drivers/irqchip/irq-mvebu-odmi.c
+++ b/drivers/irqchip/irq-mvebu-odmi.c
@@ -204,19 +204,16 @@ static int __init mvebu_odmi_init(struct device_node *node,
parent_domain = irq_find_host(parent);
- inner_domain = irq_domain_create_hierarchy(parent_domain, 0,
- odmis_count * NODMIS_PER_FRAME,
- of_node_to_fwnode(node),
- &odmi_domain_ops, NULL);
+ inner_domain = msi_create_parent_irq_domain(of_node_to_fwnode(node),
+ &odmi_msi_parent_ops,
+ &odmi_domain_ops, 0,
+ odmis_count * NODMIS_PER_FRAME,
+ NULL, parent_domain);
if (!inner_domain) {
ret = -ENOMEM;
goto err_unmap;
}
- irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_GENERIC_MSI);
- inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- inner_domain->msi_parent_ops = &odmi_msi_parent_ops;
-
return 0;
err_unmap:
diff --git a/drivers/irqchip/irq-mvebu-sei.c b/drivers/irqchip/irq-mvebu-sei.c
index c12e650ae7c92..26e1a436af2d1 100644
--- a/drivers/irqchip/irq-mvebu-sei.c
+++ b/drivers/irqchip/irq-mvebu-sei.c
@@ -429,21 +429,17 @@ static int mvebu_sei_probe(struct platform_device *pdev)
irq_domain_update_bus_token(sei->ap_domain, DOMAIN_BUS_WIRED);
/* Create the 'MSI' domain */
- sei->cp_domain = irq_domain_create_hierarchy(sei->sei_domain, 0,
- sei->caps->cp_range.size,
- of_node_to_fwnode(node),
- &mvebu_sei_cp_domain_ops,
- sei);
+ sei->cp_domain = msi_create_parent_irq_domain(of_node_to_fwnode(node),
+ &sei_msi_parent_ops,
+ &mvebu_sei_cp_domain_ops,
+ 0, sei->caps->cp_range.size,
+ sei, sei->sei_domain);
if (!sei->cp_domain) {
pr_err("Failed to create CPs IRQ domain\n");
ret = -ENOMEM;
goto remove_ap_domain;
}
- irq_domain_update_bus_token(sei->cp_domain, DOMAIN_BUS_GENERIC_MSI);
- sei->cp_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- sei->cp_domain->msi_parent_ops = &sei_msi_parent_ops;
-
mvebu_sei_reset(sei);
irq_set_chained_handler_and_data(parent_irq, mvebu_sei_handle_cascade_irq, sei);
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 05/11] irqchip/riscv-imsic: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (3 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 04/11] irqchip/mvebu: " Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 06/11] irqchip/imx-mu-msi: " Marc Zyngier
` (5 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Now that we have a concise helper to create an MSI parent domain,
switch the RISC-V letter soup over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/irqchip/irq-riscv-imsic-platform.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-riscv-imsic-platform.c b/drivers/irqchip/irq-riscv-imsic-platform.c
index c708780e8760f..3fbc3a8eb3be8 100644
--- a/drivers/irqchip/irq-riscv-imsic-platform.c
+++ b/drivers/irqchip/irq-riscv-imsic-platform.c
@@ -325,16 +325,15 @@ int imsic_irqdomain_init(void)
}
/* Create Base IRQ domain */
- imsic->base_domain = irq_domain_create_tree(imsic->fwnode,
- &imsic_base_domain_ops, imsic);
+ imsic->base_domain = msi_create_parent_irq_domain(imsic->fwnode,
+ &imsic_msi_parent_ops,
+ &imsic_base_domain_ops,
+ 0, 0, imsic, NULL);
+
if (!imsic->base_domain) {
pr_err("%pfwP: failed to create IMSIC base domain\n", imsic->fwnode);
return -ENOMEM;
}
- imsic->base_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- imsic->base_domain->msi_parent_ops = &imsic_msi_parent_ops;
-
- irq_domain_update_bus_token(imsic->base_domain, DOMAIN_BUS_NEXUS);
global = &imsic->global;
pr_info("%pfwP: hart-index-bits: %d, guest-index-bits: %d\n",
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 06/11] irqchip/imx-mu-msi: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (4 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 05/11] irqchip/riscv-imsic: " Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 22:58 ` Frank Li
2024-12-04 12:45 ` [PATCH 07/11] irqchip/loongson-pch-msi: " Marc Zyngier
` (4 subsequent siblings)
10 siblings, 1 reply; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Now that we have a concise helper to create an MSI parent domain,
switch the IMX letter soup over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/irqchip/irq-imx-mu-msi.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/irqchip/irq-imx-mu-msi.c b/drivers/irqchip/irq-imx-mu-msi.c
index b3f656c6e7708..b73968423bb9f 100644
--- a/drivers/irqchip/irq-imx-mu-msi.c
+++ b/drivers/irqchip/irq-imx-mu-msi.c
@@ -226,17 +226,15 @@ static int imx_mu_msi_domains_init(struct imx_mu_msi *msi_data, struct device *d
struct irq_domain *parent;
/* Initialize MSI domain parent */
- parent = irq_domain_create_linear(fwnodes, IMX_MU_CHANS,
- &imx_mu_msi_domain_ops, msi_data);
+ parent = msi_create_parent_irq_domain(fwnodes, &imx_mu_msi_parent_ops,
+ &imx_mu_msi_domain_ops, 0,
+ IMX_MU_CHANS, msi_data, NULL);
if (!parent) {
dev_err(dev, "failed to create IRQ domain\n");
return -ENOMEM;
}
- irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS);
parent->dev = parent->pm_dev = dev;
- parent->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- parent->msi_parent_ops = &imx_mu_msi_parent_ops;
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 07/11] irqchip/loongson-pch-msi: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (5 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 06/11] irqchip/imx-mu-msi: " Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 08/11] iommu/amd: " Marc Zyngier
` (3 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Now that we have a concise helper to create an MSI parent domain,
switch the Loongson MSI stuff over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/irqchip/irq-loongson-pch-msi.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
index 3f6f4e9887c53..f15528f76a647 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -158,20 +158,15 @@ static int pch_msi_init_domains(struct pch_msi_data *priv,
{
struct irq_domain *middle_domain;
- middle_domain = irq_domain_create_hierarchy(parent, 0, priv->num_irqs,
- domain_handle,
- &pch_msi_middle_domain_ops,
- priv);
+ middle_domain = msi_create_parent_irq_domain(domain_handle,
+ &pch_msi_parent_ops,
+ &pch_msi_middle_domain_ops, 0,
+ priv->num_irqs, priv, parent);
if (!middle_domain) {
pr_err("Failed to create the MSI middle domain\n");
return -ENOMEM;
}
- irq_domain_update_bus_token(middle_domain, DOMAIN_BUS_NEXUS);
-
- middle_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- middle_domain->msi_parent_ops = &pch_msi_parent_ops;
-
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 08/11] iommu/amd: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (6 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 07/11] irqchip/loongson-pch-msi: " Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 09/11] iommu/intel: " Marc Zyngier
` (2 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Now that we have a concise helper to create an MSI parent domain,
switch the AMD IOMMU remapping over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/iommu/amd/iommu.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index 3f691e1fd22ce..8137674aca51d 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -3807,6 +3807,7 @@ static struct irq_chip amd_ir_chip = {
static const struct msi_parent_ops amdvi_msi_parent_ops = {
.supported_flags = X86_VECTOR_MSI_FLAGS_SUPPORTED | MSI_FLAG_MULTI_PCI_MSI,
+ .bus_token = DOMAIN_BUS_AMDVI,
.prefix = "IR-",
.init_dev_msi_info = msi_parent_init_dev_msi_info,
};
@@ -3818,18 +3819,15 @@ int amd_iommu_create_irq_domain(struct amd_iommu *iommu)
fn = irq_domain_alloc_named_id_fwnode("AMD-IR", iommu->index);
if (!fn)
return -ENOMEM;
- iommu->ir_domain = irq_domain_create_hierarchy(arch_get_ir_parent_domain(), 0, 0,
- fn, &amd_ir_domain_ops, iommu);
+ iommu->ir_domain = msi_create_parent_irq_domain(fn, &amdvi_msi_parent_ops,
+ &amd_ir_domain_ops,
+ IRQ_DOMAIN_FLAG_ISOLATED_MSI, 0,
+ iommu, arch_get_ir_parent_domain());
if (!iommu->ir_domain) {
irq_domain_free_fwnode(fn);
return -ENOMEM;
}
- irq_domain_update_bus_token(iommu->ir_domain, DOMAIN_BUS_AMDVI);
- iommu->ir_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT |
- IRQ_DOMAIN_FLAG_ISOLATED_MSI;
- iommu->ir_domain->msi_parent_ops = &amdvi_msi_parent_ops;
-
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 09/11] iommu/intel: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (7 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 08/11] iommu/amd: " Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 10/11] PCI: apple: Convert to MSI parent infrastructure Marc Zyngier
2024-12-04 12:45 ` [PATCH 11/11] PCI: xgene: " Marc Zyngier
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
Now that we have a concise helper to create an MSI parent domain,
switch the Intel IOMMU remapping over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/iommu/intel/irq_remapping.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c
index 466c1412dd456..7ca3ee4c985c9 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -557,21 +557,16 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)
if (!fn)
goto out_free_bitmap;
- iommu->ir_domain =
- irq_domain_create_hierarchy(arch_get_ir_parent_domain(),
- 0, INTR_REMAP_TABLE_ENTRIES,
- fn, &intel_ir_domain_ops,
- iommu);
+ iommu->ir_domain = msi_create_parent_irq_domain(fn, &dmar_msi_parent_ops,
+ &intel_ir_domain_ops,
+ IRQ_DOMAIN_FLAG_ISOLATED_MSI,
+ INTR_REMAP_TABLE_ENTRIES,
+ iommu, arch_get_ir_parent_domain());
if (!iommu->ir_domain) {
pr_err("IR%d: failed to allocate irqdomain\n", iommu->seq_id);
goto out_free_fwnode;
}
- irq_domain_update_bus_token(iommu->ir_domain, DOMAIN_BUS_DMAR);
- iommu->ir_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT |
- IRQ_DOMAIN_FLAG_ISOLATED_MSI;
- iommu->ir_domain->msi_parent_ops = &dmar_msi_parent_ops;
-
ir_table->base = ir_table_base;
ir_table->bitmap = bitmap;
iommu->ir_table = ir_table;
@@ -1522,6 +1517,7 @@ static const struct irq_domain_ops intel_ir_domain_ops = {
static const struct msi_parent_ops dmar_msi_parent_ops = {
.supported_flags = X86_VECTOR_MSI_FLAGS_SUPPORTED | MSI_FLAG_MULTI_PCI_MSI,
+ .bus_token = DOMAIN_BUS_DMAR,
.prefix = "IR-",
.init_dev_msi_info = msi_parent_init_dev_msi_info,
};
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 10/11] PCI: apple: Convert to MSI parent infrastructure
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (8 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 09/11] iommu/intel: " Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
2024-12-04 12:45 ` [PATCH 11/11] PCI: xgene: " Marc Zyngier
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
In an effort to move arm64 away from the legacy MSI setup,
convert the apple PCIe driver to the MSI-parent infrastructure
and let each device have its own MSI domain.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/pci/controller/Kconfig | 1 +
drivers/pci/controller/pcie-apple.c | 57 ++++++++---------------------
2 files changed, 17 insertions(+), 41 deletions(-)
diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
index 9800b76810540..98a62f4559dfd 100644
--- a/drivers/pci/controller/Kconfig
+++ b/drivers/pci/controller/Kconfig
@@ -40,6 +40,7 @@ config PCIE_APPLE
depends on OF
depends on PCI_MSI
select PCI_HOST_COMMON
+ select IRQ_MSI_LIB
help
Say Y here if you want to enable PCIe controller support on Apple
system-on-chips, like the Apple M1. This is required for the USB
diff --git a/drivers/pci/controller/pcie-apple.c b/drivers/pci/controller/pcie-apple.c
index fefab2758a064..945070ac31cf8 100644
--- a/drivers/pci/controller/pcie-apple.c
+++ b/drivers/pci/controller/pcie-apple.c
@@ -22,6 +22,7 @@
#include <linux/kernel.h>
#include <linux/iopoll.h>
#include <linux/irqchip/chained_irq.h>
+#include <linux/irqchip/irq-msi-lib.h>
#include <linux/irqdomain.h>
#include <linux/list.h>
#include <linux/module.h>
@@ -134,7 +135,6 @@ struct apple_pcie {
struct mutex lock;
struct device *dev;
void __iomem *base;
- struct irq_domain *domain;
unsigned long *bitmap;
struct list_head ports;
struct completion event;
@@ -163,27 +163,6 @@ static void rmw_clear(u32 clr, void __iomem *addr)
writel_relaxed(readl_relaxed(addr) & ~clr, addr);
}
-static void apple_msi_top_irq_mask(struct irq_data *d)
-{
- pci_msi_mask_irq(d);
- irq_chip_mask_parent(d);
-}
-
-static void apple_msi_top_irq_unmask(struct irq_data *d)
-{
- pci_msi_unmask_irq(d);
- irq_chip_unmask_parent(d);
-}
-
-static struct irq_chip apple_msi_top_chip = {
- .name = "PCIe MSI",
- .irq_mask = apple_msi_top_irq_mask,
- .irq_unmask = apple_msi_top_irq_unmask,
- .irq_eoi = irq_chip_eoi_parent,
- .irq_set_affinity = irq_chip_set_affinity_parent,
- .irq_set_type = irq_chip_set_type_parent,
-};
-
static void apple_msi_compose_msg(struct irq_data *data, struct msi_msg *msg)
{
msg->address_hi = upper_32_bits(DOORBELL_ADDR);
@@ -227,8 +206,7 @@ static int apple_msi_domain_alloc(struct irq_domain *domain, unsigned int virq,
for (i = 0; i < nr_irqs; i++) {
irq_domain_set_hwirq_and_chip(domain, virq + i, hwirq + i,
- &apple_msi_bottom_chip,
- domain->host_data);
+ &apple_msi_bottom_chip, pcie);
}
return 0;
@@ -252,12 +230,6 @@ static const struct irq_domain_ops apple_msi_domain_ops = {
.free = apple_msi_domain_free,
};
-static struct msi_domain_info apple_msi_info = {
- .flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
- MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX),
- .chip = &apple_msi_top_chip,
-};
-
static void apple_port_irq_mask(struct irq_data *data)
{
struct apple_pcie_port *port = irq_data_get_irq_chip_data(data);
@@ -596,6 +568,17 @@ static int apple_pcie_setup_port(struct apple_pcie *pcie,
return 0;
}
+static const struct msi_parent_ops apple_msi_parent_ops = {
+ .supported_flags = (MSI_GENERIC_FLAGS_MASK |
+ MSI_FLAG_PCI_MSIX |
+ MSI_FLAG_MULTI_PCI_MSI),
+ .required_flags = (MSI_FLAG_USE_DEF_DOM_OPS |
+ MSI_FLAG_USE_DEF_CHIP_OPS |
+ MSI_FLAG_PCI_MSI_MASK_PARENT),
+ .bus_select_token = DOMAIN_BUS_PCI_MSI,
+ .init_dev_msi_info = msi_lib_init_dev_msi_info,
+};
+
static int apple_msi_init(struct apple_pcie *pcie)
{
struct fwnode_handle *fwnode = dev_fwnode(pcie->dev);
@@ -626,21 +609,13 @@ static int apple_msi_init(struct apple_pcie *pcie)
return -ENXIO;
}
- parent = irq_domain_create_hierarchy(parent, 0, pcie->nvecs, fwnode,
- &apple_msi_domain_ops, pcie);
+ parent = msi_create_parent_irq_domain(fwnode, &apple_msi_parent_ops,
+ &apple_msi_domain_ops, 0,
+ pcie->nvecs, pcie, parent);
if (!parent) {
dev_err(pcie->dev, "failed to create IRQ domain\n");
return -ENOMEM;
}
- irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS);
-
- pcie->domain = pci_msi_create_irq_domain(fwnode, &apple_msi_info,
- parent);
- if (!pcie->domain) {
- dev_err(pcie->dev, "failed to create MSI domain\n");
- irq_domain_remove(parent);
- return -ENOMEM;
- }
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 11/11] PCI: xgene: Convert to MSI parent infrastructure
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
` (9 preceding siblings ...)
2024-12-04 12:45 ` [PATCH 10/11] PCI: apple: Convert to MSI parent infrastructure Marc Zyngier
@ 2024-12-04 12:45 ` Marc Zyngier
10 siblings, 0 replies; 14+ messages in thread
From: Marc Zyngier @ 2024-12-04 12:45 UTC (permalink / raw)
To: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
In an effort to move arm64 away from the legacy MSI setup,
convert the xgene PCIe driver to the MSI-parent infrastructure
and let each device have its own MSI domain.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/pci/controller/Kconfig | 1 +
drivers/pci/controller/pci-xgene-msi.c | 44 +++++++++-----------------
2 files changed, 16 insertions(+), 29 deletions(-)
diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
index 98a62f4559dfd..205e0e365c6b1 100644
--- a/drivers/pci/controller/Kconfig
+++ b/drivers/pci/controller/Kconfig
@@ -304,6 +304,7 @@ config PCI_XGENE_MSI
bool "X-Gene v1 PCIe MSI feature"
depends on PCI_XGENE
depends on PCI_MSI
+ select IRQ_MSI_LIB
default y
help
Say Y here if you want PCIe MSI support for the APM X-Gene v1 SoC.
diff --git a/drivers/pci/controller/pci-xgene-msi.c b/drivers/pci/controller/pci-xgene-msi.c
index 88c0977bc41a4..d9e4d1e136f77 100644
--- a/drivers/pci/controller/pci-xgene-msi.c
+++ b/drivers/pci/controller/pci-xgene-msi.c
@@ -12,6 +12,7 @@
#include <linux/module.h>
#include <linux/msi.h>
#include <linux/irqchip/chained_irq.h>
+#include <linux/irqchip/irq-msi-lib.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
#include <linux/of_pci.h>
@@ -32,7 +33,6 @@ struct xgene_msi_group {
struct xgene_msi {
struct device_node *node;
struct irq_domain *inner_domain;
- struct irq_domain *msi_domain;
u64 msi_addr;
void __iomem *msi_regs;
unsigned long *bitmap;
@@ -44,20 +44,6 @@ struct xgene_msi {
/* Global data */
static struct xgene_msi xgene_msi_ctrl;
-static struct irq_chip xgene_msi_top_irq_chip = {
- .name = "X-Gene1 MSI",
- .irq_enable = pci_msi_unmask_irq,
- .irq_disable = pci_msi_mask_irq,
- .irq_mask = pci_msi_mask_irq,
- .irq_unmask = pci_msi_unmask_irq,
-};
-
-static struct msi_domain_info xgene_msi_domain_info = {
- .flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
- MSI_FLAG_PCI_MSIX),
- .chip = &xgene_msi_top_irq_chip,
-};
-
/*
* X-Gene v1 has 16 groups of MSI termination registers MSInIRx, where
* n is group number (0..F), x is index of registers in each group (0..7)
@@ -235,34 +221,34 @@ static void xgene_irq_domain_free(struct irq_domain *domain,
irq_domain_free_irqs_parent(domain, virq, nr_irqs);
}
-static const struct irq_domain_ops msi_domain_ops = {
+static const struct irq_domain_ops xgene_msi_domain_ops = {
.alloc = xgene_irq_domain_alloc,
.free = xgene_irq_domain_free,
};
+static const struct msi_parent_ops xgene_msi_parent_ops = {
+ .supported_flags = (MSI_GENERIC_FLAGS_MASK |
+ MSI_FLAG_PCI_MSIX),
+ .required_flags = (MSI_FLAG_USE_DEF_DOM_OPS |
+ MSI_FLAG_USE_DEF_CHIP_OPS),
+ .bus_select_token = DOMAIN_BUS_PCI_MSI,
+ .init_dev_msi_info = msi_lib_init_dev_msi_info,
+};
+
static int xgene_allocate_domains(struct xgene_msi *msi)
{
- msi->inner_domain = irq_domain_add_linear(NULL, NR_MSI_VEC,
- &msi_domain_ops, msi);
+ msi->inner_domain = msi_create_parent_irq_domain(of_node_to_fwnode(msi->node),
+ &xgene_msi_parent_ops,
+ &xgene_msi_domain_ops,
+ 0, NR_MSI_VEC, msi, NULL);
if (!msi->inner_domain)
return -ENOMEM;
- msi->msi_domain = pci_msi_create_irq_domain(of_node_to_fwnode(msi->node),
- &xgene_msi_domain_info,
- msi->inner_domain);
-
- if (!msi->msi_domain) {
- irq_domain_remove(msi->inner_domain);
- return -ENOMEM;
- }
-
return 0;
}
static void xgene_free_domains(struct xgene_msi *msi)
{
- if (msi->msi_domain)
- irq_domain_remove(msi->msi_domain);
if (msi->inner_domain)
irq_domain_remove(msi->inner_domain);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 02/11] genirq/msi: Add helper for creating MSI-parent irq domains
2024-12-04 12:45 ` [PATCH 02/11] genirq/msi: Add helper for creating MSI-parent irq domains Marc Zyngier
@ 2024-12-04 13:57 ` Thomas Gleixner
0 siblings, 0 replies; 14+ messages in thread
From: Thomas Gleixner @ 2024-12-04 13:57 UTC (permalink / raw)
To: Marc Zyngier, iommu, linux-kernel, linux-arm-kernel, loongarch,
linux-riscv, linux-pci
Cc: Joerg Roedel, Suravee Suthikulpanit, David Woodhouse, Lu Baolu,
Shawn Guo, Sascha Hauer, Fabio Estevam, Huacai Chen, WANG Xuerui,
Jiaxun Yang, Andrew Lunn, Gregory Clement, Sebastian Hesselbarth,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Bjorn Helgaas, Toan Le, Alyssa Rosenzweig
On Wed, Dec 04 2024 at 12:45, Marc Zyngier wrote:
> Creating an irq domain that serves as an MSI parent requires
> a substantial amount of esoteric boiler-plate code, some of
> which is often provided twice (such as the bus token).
>
> To make things a bit simpler for the unsuspecting MSI tinkerer,
> provide a helper that does it for them, and serves as documentation
> of what needs to be provided.
>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> ---
> include/linux/msi.h | 7 +++++++
> kernel/irq/msi.c | 40 ++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 47 insertions(+)
>
> diff --git a/include/linux/msi.h b/include/linux/msi.h
> index b10093c4d00ea..f08d14cf07103 100644
> --- a/include/linux/msi.h
> +++ b/include/linux/msi.h
> @@ -594,6 +594,13 @@ struct irq_domain *msi_create_irq_domain(struct fwnode_handle *fwnode,
> struct msi_domain_info *info,
> struct irq_domain *parent);
>
> +struct irq_domain *msi_create_parent_irq_domain(struct fwnode_handle *fwnode,
> + const struct msi_parent_ops *msi_parent_ops,
> + const struct irq_domain_ops *ops,
> + unsigned long flags, unsigned long size,
> + void *host_data,
> + struct irq_domain *parent);
Can we please make this a template based interface similar to
msi_create_device_irq_domain()?
> +/**
> + * msi_create_parent_irq_domain - Create an MSI-parent interrupt domain
> + * @fwnode: Optional fwnode of the interrupt controller
> + * @msi_parent_ops: MSI parent callbacks and configuration
> + * @ops: Interrupt domain ballbacks
> + * @flags: Interrupt domain flags
> + * @size: Interrupt domain size (0 if arbitrarily large)
> + * @host_data: Interrupt domain private data
> + * @parent: Parent irq domain
> + *
> + * Return: pointer to the created &struct irq_domain or %NULL on failure
> + */
> +struct irq_domain *msi_create_parent_irq_domain(struct fwnode_handle *fwnode,
> + const struct msi_parent_ops *msi_parent_ops,
> + const struct irq_domain_ops *ops,
> + unsigned long flags, unsigned long size,
> + void *host_data,
> + struct irq_domain *parent)
> +{
> + struct irq_domain_info info = {
> + .fwnode = fwnode,
> + .size = size,
> + .hwirq_max = size,
> + .ops = ops,
> + .host_data = host_data,
> + .domain_flags = flags | IRQ_DOMAIN_FLAG_MSI_PARENT,
> + .parent = parent,
> + .bus_token = msi_parent_ops->bus_select_token,
> + };
Instead of hiding the template in the function?
We've been burnt with interfaces which might require extensions over
time before and I just converted the GIC patch (3/11) over to a template
at call site model. It results in the same code size reduction at the
call sites, but allows us to expand the template without touching any
existing driver in the future. See below.
It might be a good idea to have a specific msi_irq_domain_info template
which only contains the information required instead of reusing and
expanding irq_domain_info.
Hmm?
Thanks,
tglx
---
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -263,24 +263,25 @@ static struct msi_parent_ops gicv2m_msi_
static __init int gicv2m_allocate_domains(struct irq_domain *parent)
{
- struct irq_domain *inner_domain;
struct v2m_data *v2m;
+ struct irq_domain_info info = {
+ .ops = &gic2m_domain_ops,
+ .parent = parent,
+ .msi_parent_ops = &gicv2m_msi_parent_ops,
+ };
v2m = list_first_entry_or_null(&v2m_nodes, struct v2m_data, entry);
if (!v2m)
return 0;
- inner_domain = irq_domain_create_hierarchy(parent, 0, 0, v2m->fwnode,
- &gicv2m_domain_ops, v2m);
- if (!inner_domain) {
- pr_err("Failed to create GICv2m domain\n");
- return -ENOMEM;
- }
-
- irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
- inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- inner_domain->msi_parent_ops = &gicv2m_msi_parent_ops;
- return 0;
+ info->fwnode = v2m->fwnode;
+ info->host_data = v2m;
+
+ if (msi_create_parent_irq_domain(&info))
+ return 0;
+
+ pr_err("Failed to create GICv2m domain\n");
+ return -ENOMEM;
}
static int __init gicv2m_init_one(struct fwnode_handle *fwnode,
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -5076,31 +5076,27 @@ static void __init __iomem *its_map_one(
static int its_init_domain(struct its_node *its)
{
- struct irq_domain *inner_domain;
- struct msi_domain_info *info;
+ struct msi_domain_info *msi_info;
+ struct irq_domain_info info = {
+ .fwnode = its->fwnode_handle,
+ .ops = &its_domain_ops,
+ .parent = its_parent,
+ .msi_parent_ops = &gic_v3_its_msi_parent_ops,
+ .flags = its->msi_domain_flags,
+ };
- info = kzalloc(sizeof(*info), GFP_KERNEL);
- if (!info)
+ msi_info = kzalloc(sizeof(*info), GFP_KERNEL);
+ if (!msi_info)
return -ENOMEM;
- info->ops = &its_msi_domain_ops;
- info->data = its;
-
- inner_domain = irq_domain_create_hierarchy(its_parent,
- its->msi_domain_flags, 0,
- its->fwnode_handle, &its_domain_ops,
- info);
- if (!inner_domain) {
- kfree(info);
- return -ENOMEM;
- }
-
- irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
-
- inner_domain->msi_parent_ops = &gic_v3_its_msi_parent_ops;
- inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
-
- return 0;
+ msi_info->ops = &its_msi_domain_ops;
+ msi_info->data = its;
+ info.host_data = msi_info;
+
+ if (msi_create_parent_irq_domain(&info))
+ return 0;
+ kfree(info);
+ return -ENOMEM;
}
static int its_init_vpe_domain(void)
--- a/drivers/irqchip/irq-gic-v3-mbi.c
+++ b/drivers/irqchip/irq-gic-v3-mbi.c
@@ -209,17 +209,14 @@ static const struct msi_parent_ops gic_v
static int mbi_allocate_domain(struct irq_domain *parent)
{
- struct irq_domain *nexus_domain;
+ struct irq_domain_info info = {
+ .fwnode = parent->fwnode,
+ .ops = &mbi_domain_ops,
+ .parent = parent,
+ .msi_parent_ops = &gic_v3_mbi_msi_parent_ops,
+ };
- nexus_domain = irq_domain_create_hierarchy(parent, 0, 0, parent->fwnode,
- &mbi_domain_ops, NULL);
- if (!nexus_domain)
- return -ENOMEM;
-
- irq_domain_update_bus_token(nexus_domain, DOMAIN_BUS_NEXUS);
- nexus_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- nexus_domain->msi_parent_ops = &gic_v3_mbi_msi_parent_ops;
- return 0;
+ return msi_create_parent_irq_domain(&info) ? 0 : -ENOMEM;
}
int __init mbi_init(struct fwnode_handle *fwnode, struct irq_domain *parent)
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 06/11] irqchip/imx-mu-msi: Convert to msi_create_parent_irq_domain() helper
2024-12-04 12:45 ` [PATCH 06/11] irqchip/imx-mu-msi: " Marc Zyngier
@ 2024-12-04 22:58 ` Frank Li
0 siblings, 0 replies; 14+ messages in thread
From: Frank Li @ 2024-12-04 22:58 UTC (permalink / raw)
To: Marc Zyngier
Cc: iommu, linux-kernel, linux-arm-kernel, loongarch, linux-riscv,
linux-pci, Joerg Roedel, Suravee Suthikulpanit, David Woodhouse,
Lu Baolu, Thomas Gleixner, Shawn Guo, Sascha Hauer, Fabio Estevam,
Huacai Chen, WANG Xuerui, Jiaxun Yang, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Anup Patel, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Bjorn Helgaas,
Toan Le, Alyssa Rosenzweig
On Wed, Dec 04, 2024 at 12:45:44PM +0000, Marc Zyngier wrote:
> Now that we have a concise helper to create an MSI parent domain,
> switch the IMX letter soup over to that.
>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
> ---
> drivers/irqchip/irq-imx-mu-msi.c | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/irqchip/irq-imx-mu-msi.c b/drivers/irqchip/irq-imx-mu-msi.c
> index b3f656c6e7708..b73968423bb9f 100644
> --- a/drivers/irqchip/irq-imx-mu-msi.c
> +++ b/drivers/irqchip/irq-imx-mu-msi.c
> @@ -226,17 +226,15 @@ static int imx_mu_msi_domains_init(struct imx_mu_msi *msi_data, struct device *d
> struct irq_domain *parent;
>
> /* Initialize MSI domain parent */
> - parent = irq_domain_create_linear(fwnodes, IMX_MU_CHANS,
> - &imx_mu_msi_domain_ops, msi_data);
> + parent = msi_create_parent_irq_domain(fwnodes, &imx_mu_msi_parent_ops,
> + &imx_mu_msi_domain_ops, 0,
> + IMX_MU_CHANS, msi_data, NULL);
> if (!parent) {
> dev_err(dev, "failed to create IRQ domain\n");
> return -ENOMEM;
> }
>
> - irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS);
> parent->dev = parent->pm_dev = dev;
> - parent->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
> - parent->msi_parent_ops = &imx_mu_msi_parent_ops;
> return 0;
> }
>
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-12-04 23:00 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-04 12:45 [PATCH 00/11] irqchip: MSI parent cleanup and PCI host driver conversion Marc Zyngier
2024-12-04 12:45 ` [PATCH 01/11] irqchip: Make irq-msi-lib.h globally available Marc Zyngier
2024-12-04 12:45 ` [PATCH 02/11] genirq/msi: Add helper for creating MSI-parent irq domains Marc Zyngier
2024-12-04 13:57 ` Thomas Gleixner
2024-12-04 12:45 ` [PATCH 03/11] irqchip/gic: Convert to msi_create_parent_irq_domain() helper Marc Zyngier
2024-12-04 12:45 ` [PATCH 04/11] irqchip/mvebu: " Marc Zyngier
2024-12-04 12:45 ` [PATCH 05/11] irqchip/riscv-imsic: " Marc Zyngier
2024-12-04 12:45 ` [PATCH 06/11] irqchip/imx-mu-msi: " Marc Zyngier
2024-12-04 22:58 ` Frank Li
2024-12-04 12:45 ` [PATCH 07/11] irqchip/loongson-pch-msi: " Marc Zyngier
2024-12-04 12:45 ` [PATCH 08/11] iommu/amd: " Marc Zyngier
2024-12-04 12:45 ` [PATCH 09/11] iommu/intel: " Marc Zyngier
2024-12-04 12:45 ` [PATCH 10/11] PCI: apple: Convert to MSI parent infrastructure Marc Zyngier
2024-12-04 12:45 ` [PATCH 11/11] PCI: xgene: " Marc Zyngier
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).