irqchip/gic: Convert to msi_create_parent_irq_domain() helper
Switch the GIC family of interrupt chip drivers over to the common helper function to create the interrupt domains. [ tglx: Moved the struct out of the function call argument ] Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/all/20250513172819.2216709-4-maz@kernel.org
This commit is contained in:
parent
e4d001b54f
commit
c6b7782234
|
|
@ -261,23 +261,23 @@ static struct msi_parent_ops gicv2m_msi_parent_ops = {
|
|||
|
||||
static __init int gicv2m_allocate_domains(struct irq_domain *parent)
|
||||
{
|
||||
struct irq_domain *inner_domain;
|
||||
struct irq_domain_info info = {
|
||||
.ops = &gicv2m_domain_ops,
|
||||
.parent = parent,
|
||||
};
|
||||
struct v2m_data *v2m;
|
||||
|
||||
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) {
|
||||
info.host_data = v2m;
|
||||
info.fwnode = v2m->fwnode;
|
||||
|
||||
if (!msi_create_parent_irq_domain(&info, &gicv2m_msi_parent_ops)) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5122,7 +5122,12 @@ out_unmap:
|
|||
|
||||
static int its_init_domain(struct its_node *its)
|
||||
{
|
||||
struct irq_domain *inner_domain;
|
||||
struct irq_domain_info dom_info = {
|
||||
.fwnode = its->fwnode_handle,
|
||||
.ops = &its_domain_ops,
|
||||
.domain_flags = its->msi_domain_flags,
|
||||
.parent = its_parent,
|
||||
};
|
||||
struct msi_domain_info *info;
|
||||
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
|
|
@ -5131,21 +5136,12 @@ static int its_init_domain(struct its_node *its)
|
|||
|
||||
info->ops = &its_msi_domain_ops;
|
||||
info->data = its;
|
||||
dom_info.host_data = info;
|
||||
|
||||
inner_domain = irq_domain_create_hierarchy(its_parent,
|
||||
its->msi_domain_flags, 0,
|
||||
its->fwnode_handle, &its_domain_ops,
|
||||
info);
|
||||
if (!inner_domain) {
|
||||
if (!msi_create_parent_irq_domain(&dom_info, &gic_v3_its_msi_parent_ops)) {
|
||||
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 | IRQ_DOMAIN_FLAG_MSI_IMMUTABLE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -5522,7 +5518,7 @@ static struct its_node __init *its_node_init(struct resource *res,
|
|||
its->base = its_base;
|
||||
its->phys_base = res->start;
|
||||
its->get_msi_base = its_irq_get_msi_base;
|
||||
its->msi_domain_flags = IRQ_DOMAIN_FLAG_ISOLATED_MSI;
|
||||
its->msi_domain_flags = IRQ_DOMAIN_FLAG_ISOLATED_MSI | IRQ_DOMAIN_FLAG_MSI_IMMUTABLE;
|
||||
|
||||
its->numa_node = numa_node;
|
||||
its->fwnode_handle = handle;
|
||||
|
|
|
|||
|
|
@ -206,17 +206,13 @@ static const struct msi_parent_ops gic_v3_mbi_msi_parent_ops = {
|
|||
|
||||
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,
|
||||
};
|
||||
|
||||
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, &gic_v3_mbi_msi_parent_ops) ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
int __init mbi_init(struct fwnode_handle *fwnode, struct irq_domain *parent)
|
||||
|
|
|
|||
Loading…
Reference in New Issue