On Wed, May 29, 2019 at 4:53 PM Thierry Reding <thierry.reding@xxxxxxxxx> wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > Hierarchical IRQ domains can be used to stack different IRQ controllers > on top of each other. One specific use-case where this can be useful is > if a power management controller has top-level controls for wakeup > interrupts. In such cases, the power management controller can be a > parent to other interrupt controllers and program additional registers > when an IRQ has its wake capability enabled or disabled. > > Signed-off-by: Thierry Reding <treding@xxxxxxxxxx> > --- > Changes in v3: > - use irq_create_fwspec_mapping() instead of irq_domain_alloc_irqs() > - add missing kerneldoc for new parent_domain field > - keep IRQ_DOMAIN dependency for clarity > > Changes in v2: > - select IRQ_DOMAIN_HIERARCHY to avoid build failure > - move more code into the gpiolib core This is looking really good! > config GPIOLIB_IRQCHIP > select IRQ_DOMAIN > + select IRQ_DOMAIN_HIERARCHY > bool Hm OK I guess. It would be ugly to ifdef all hierarchy code in gpiolib. > static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset) > { > + struct irq_domain *domain = chip->irq.domain; > + > if (!gpiochip_irqchip_irq_valid(chip, offset)) > return -ENXIO; > > + if (irq_domain_is_hierarchy(domain)) { > + struct irq_fwspec spec; > + > + spec.fwnode = domain->fwnode; > + spec.param_count = 2; > + spec.param[0] = offset; > + spec.param[1] = IRQ_TYPE_NONE; > + > + return irq_create_fwspec_mapping(&spec); > + } > + > return irq_create_mapping(chip->irq.domain, offset); This is looking really good! > + /* > + * Allow GPIO chips to override the ->to_irq() if they really need to. > + * This should only be very rarely needed, the majority should be fine > + * with gpiochip_to_irq(). > + */ > + if (!gpiochip->to_irq) > + gpiochip->to_irq = gpiochip_to_irq; Please drop this. The default .to_irq() should be good for everyone. Also patch 2/2 now contains a identical copy of the gpiolib .to_irq() which I suspect you indended to drop, actually. Other than that I'm ready to merge the v3 of this! Yours, Linus Walleij