mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-27 15:36:48 +00:00
irqchip/msi-lib: Add IRQ_DOMAIN_FLAG_FWNODE_PARENT handling
In some irqchip implementations the fwnode representing the IRQdomain and the MSI controller fwnode do not match; in particular the IRQdomain fwnode is the MSI controller fwnode parent. To support selecting such IRQ domains, add a flag in core IRQ domain code that explicitly tells the MSI lib to use the parent fwnode while carrying out IRQ domain selection. Update the msi-lib select callback with the resulting logic. Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org> Reviewed-by: Marc Zyngier <maz@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20250703-gicv5-host-v7-27-12e71f1b3528@kernel.org Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
b4ead12d95
commit
8b65db1e93
@ -133,11 +133,14 @@ int msi_lib_irq_domain_select(struct irq_domain *d, struct irq_fwspec *fwspec,
|
||||
{
|
||||
const struct msi_parent_ops *ops = d->msi_parent_ops;
|
||||
u32 busmask = BIT(bus_token);
|
||||
struct fwnode_handle *fwh;
|
||||
|
||||
if (!ops)
|
||||
return 0;
|
||||
|
||||
if (fwspec->fwnode != d->fwnode || fwspec->param_count != 0)
|
||||
fwh = d->flags & IRQ_DOMAIN_FLAG_FWNODE_PARENT ? fwnode_get_parent(fwspec->fwnode)
|
||||
: fwspec->fwnode;
|
||||
if (fwh != d->fwnode || fwspec->param_count != 0)
|
||||
return 0;
|
||||
|
||||
/* Handle pure domain searches */
|
||||
|
@ -212,6 +212,9 @@ enum {
|
||||
/* Address and data pair is mutable when irq_set_affinity() */
|
||||
IRQ_DOMAIN_FLAG_MSI_IMMUTABLE = (1 << 11),
|
||||
|
||||
/* IRQ domain requires parent fwnode matching */
|
||||
IRQ_DOMAIN_FLAG_FWNODE_PARENT = (1 << 12),
|
||||
|
||||
/*
|
||||
* Flags starting from IRQ_DOMAIN_FLAG_NONCORE are reserved
|
||||
* for implementation specific purposes and ignored by the
|
||||
|
Loading…
Reference in New Issue
Block a user