summaryrefslogtreecommitdiff
path: root/drivers/irqchip/irq-msi-lib.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2024-06-23 17:18:38 +0200
committerThomas Gleixner <tglx@linutronix.de>2024-07-18 20:31:19 +0200
commit8c41ccec839c622b2d1be769a95405e4e9a4cb20 (patch)
treed99af1b24c705d18984bbd134589ef4c3093d720 /drivers/irqchip/irq-msi-lib.c
parent48f71d56e2b87839052d2a2ec32fc97a79c3e264 (diff)
irqchip/irq-msi-lib: Prepare for PCI MSI/MSIX
Add the bus tokens for DOMAIN_BUS_PCI_DEVICE_MSI and DOMAIN_BUS_PCI_DEVICE_MSIX to the common child init function. Provide the match mask which can be used by parent domain implementation so the bitmask based child bus token match works. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de> Signed-off-by: Shivamurthy Shastri <shivamurthy.shastri@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20240623142234.964056815@linutronix.de
Diffstat (limited to 'drivers/irqchip/irq-msi-lib.c')
-rw-r--r--drivers/irqchip/irq-msi-lib.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/irqchip/irq-msi-lib.c b/drivers/irqchip/irq-msi-lib.c
index ec1a10f396b3..ef26962a31ee 100644
--- a/drivers/irqchip/irq-msi-lib.c
+++ b/drivers/irqchip/irq-msi-lib.c
@@ -28,6 +28,7 @@ bool msi_lib_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
struct msi_domain_info *info)
{
const struct msi_parent_ops *pops = real_parent->msi_parent_ops;
+ u32 required_flags;
/* Parent ops available? */
if (WARN_ON_ONCE(!pops))
@@ -46,8 +47,16 @@ bool msi_lib_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
return false;
}
+ required_flags = pops->required_flags;
+
/* Is the target domain bus token supported? */
switch(info->bus_token) {
+ case DOMAIN_BUS_PCI_DEVICE_MSI:
+ case DOMAIN_BUS_PCI_DEVICE_MSIX:
+ if (WARN_ON_ONCE(!IS_ENABLED(CONFIG_PCI_MSI)))
+ return false;
+
+ break;
default:
/*
* This should never be reached. See
@@ -63,7 +72,7 @@ bool msi_lib_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
*/
info->flags &= pops->supported_flags;
/* Enforce the required flags */
- info->flags |= pops->required_flags;
+ info->flags |= required_flags;
/* Chip updates for all child bus types */
if (!info->chip->irq_eoi)