On Wed, Nov 27, 2019 at 4:19 PM Mark Brown <broonie@xxxxxxxxxx> wrote: > On Wed, Nov 27, 2019 at 02:35:33PM +0100, Linus Walleij wrote: > > > I can clearly see that regmap's irqchip does not support > > hierarchical interrupt domains, so we should just make a > > mental note somewhere that "oh yeah and then one day > > we should make regmap irqchips play well with hierarchical > > interrupts". > > Why, what do we need to do? We're just doing all the default stuff, > it's not something we've opted out of, and the whole point with using > the frameworks should be that we should get software features like this > for free :( I guess it is a bit about moving targets. The regmap irq thing was covering all reasonable cases until the hierarchical interrupts were introduced some years ago. The hallmark of these are that the irq_domain_ops implement .translate() .alloc() and .free() rather than .map() and .xlate() as the irqdomain in reqmap-irq currently does. The problem with hierarchical domains is that the system using them need to be hierarchical "all the way up" to the overarching top-level irqchip. Currently only the ARM GIC and the IXP4xx irq top-level irq controllers supports this, ruling out some obvious users like all non-ARM systems (for now). I think the assumption in hierarchical irq is that you have a few hardware-specific irchips and you know exactly which irqchip that goes on top of another one, as well as which hardware irq line is connected to which hardware irq line on the parent. Since we know the specific hardware (from a compatible string or so) we can hardcode the parent-to-child mappings of interrupt lines in the driver. These mappings are not in the device tree for example. Therefore supporting hierarchical and nonhierarchical alike in a very generic plug-in irqchip like the regmap-irq is a bit of a challenge as it has to support both hierarchical and non-hierarchical, because it is not possible to just convert this to hierarchical callbacks: it has to check what its parent is doing and adapt, essentially implement both hierarchical and non-hierarchical at this time. Also we need to pass mappings between parent and child somehow. In the gpiolib we did this with a callback to the GPIO-chip-specific driver. How to do it for something generic like regmap-irq is an open question. So it is a bit complex. (Marc may correct me here.) Yours, Linus Walleij