Hi Alexander, I think I answered some stuff around this patch in my previous mail but just reiterating so it's clear: On Wed, Mar 17, 2021 at 4:59 PM Alexander A Sverdlin <alexander.sverdlin@xxxxxxxxx> wrote: > @@ -426,6 +426,7 @@ config GPIO_PL061 > depends on ARM_AMBA > select IRQ_DOMAIN > select GPIOLIB_IRQCHIP > + select IRQ_DOMAIN_HIERARCHY I think this needs to be optional otherwise you activate hierarchical IRQs on a lot of systems that don't have it. select IRQ_DOMAIN_HIERARCHY if ARCH_OMAP_... This leads to having to use some if IS_ENABLED and maybe even ifdef to make it compile without hierarchies. > + if (!adev->irq[PL061_GPIO_NR - 1]) { > + WARN_ON(adev->irq[1]); > + > + girq->parent_handler = pl061_irq_handler; > + girq->num_parents = 1; > + girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents), > + GFP_KERNEL); > + if (!girq->parents) > + return -ENOMEM; > + girq->parents[0] = irq; > + } else { > + girq->fwnode = dev->fwnode; > + girq->parent_domain = > + irq_get_irq_data(adev->irq[PL061_GPIO_NR - 1])->domain; > + girq->child_to_parent_hwirq = pl061_child_to_parent_hwirq; > + } This is starting to look right :) But use the top-level board DT compatible to determine that hiearchy is needed, and implement a per-soc child_to_parent_hwirq() and do not attempt to get the IRQs from the device tree. Yours, Linus Walleij