mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-28 00:19:36 +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;
|
const struct msi_parent_ops *ops = d->msi_parent_ops;
|
||||||
u32 busmask = BIT(bus_token);
|
u32 busmask = BIT(bus_token);
|
||||||
|
struct fwnode_handle *fwh;
|
||||||
|
|
||||||
if (!ops)
|
if (!ops)
|
||||||
return 0;
|
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;
|
return 0;
|
||||||
|
|
||||||
/* Handle pure domain searches */
|
/* Handle pure domain searches */
|
||||||
|
@ -212,6 +212,9 @@ enum {
|
|||||||
/* Address and data pair is mutable when irq_set_affinity() */
|
/* Address and data pair is mutable when irq_set_affinity() */
|
||||||
IRQ_DOMAIN_FLAG_MSI_IMMUTABLE = (1 << 11),
|
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
|
* Flags starting from IRQ_DOMAIN_FLAG_NONCORE are reserved
|
||||||
* for implementation specific purposes and ignored by the
|
* for implementation specific purposes and ignored by the
|
||||||
|
Loading…
Reference in New Issue
Block a user