[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20241209-ep-msi-v11-1-7434fa8397bd@nxp.com>
Date: Mon, 09 Dec 2024 12:48:14 -0500
From: Frank Li <Frank.Li@....com>
To: Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>,
Krzysztof Wilczyński <kw@...ux.com>,
Kishon Vijay Abraham I <kishon@...nel.org>,
Bjorn Helgaas <bhelgaas@...gle.com>, Arnd Bergmann <arnd@...db.de>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
"Rafael J. Wysocki" <rafael@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>, Anup Patel <apatel@...tanamicro.com>,
Marc Zyngier <maz@...nel.org>
Cc: linux-kernel@...r.kernel.org, linux-pci@...r.kernel.org,
imx@...ts.linux.dev, Niklas Cassel <cassel@...nel.org>, dlemoal@...nel.org,
jdmason@...zu.us, linux-arm-kernel@...ts.infradead.org,
Frank Li <Frank.Li@....com>
Subject: [PATCH v11 1/7] irqchip/gic-v3-its: Avoid overwriting msi_prepare
callback if provided by msi_domain_info
┌───────────────────────────────┐ ┌───────┐
│ │ │ │
│ PCI Endpoint Controller (1) ├───►│ ITS │
│ │ │ │
└───────────────────────────────┘ └───────┘
▲ ▲
│ │
┌───┴──┐ ┌──┴───┐
│ │ │ │
│Func1 │ │Func2 │
│ (2) │ │ │
└──────┘ └──────┘
▲ ▲
│ │
└─────────┴─────────────── PCIe Bus
(1) is platform device, which is generally descripted by Device Tree(DT).
(2) Func1 and Func2 is created by configfs
The current platform MSI API supports only a single device. For instance,
a platform device (e.g., PCI Endpoint Controller) calls
platform_device_msi_init_and_alloc_irqs() to allocate MSI IRQs.
Child devices (e.g., function devices created by configfs) require
individual MSI domains, with the same MSI parent domain as the parent
device. These individual domains need specialized msi_prepare callbacks to
set msi_alloc_info_t. However, the current ITS implementation overwrites
the msi_prepare callback with its_pmsi_prepare().
Modify the implementation to assign its_pmsi_prepare() only if
msi_domain_info::msi_prepare is NULL, allowing customized callbacks where
needed.
Signed-off-by: Frank Li <Frank.Li@....com>
---
Change from v9 to v11
- new patch
---
drivers/irqchip/irq-gic-v3-its-msi-parent.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/irqchip/irq-gic-v3-its-msi-parent.c b/drivers/irqchip/irq-gic-v3-its-msi-parent.c
index 75aa0d4bd1346..33e94cfc4d506 100644
--- a/drivers/irqchip/irq-gic-v3-its-msi-parent.c
+++ b/drivers/irqchip/irq-gic-v3-its-msi-parent.c
@@ -195,7 +195,8 @@ static bool its_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
* FIXME: See the above PCI prepare comment. The domain
* size is also known at domain creation time.
*/
- info->ops->msi_prepare = its_pmsi_prepare;
+ if (!info->ops->msi_prepare)
+ info->ops->msi_prepare = its_pmsi_prepare;
break;
default:
/* Confused. How did the lib return true? */
--
2.34.1
Powered by blists - more mailing lists