On Tuesday 12 June 2012, Lee Jones wrote:On 11/06/12 22:01, Linus Walleij wrote:Hm what shall we do when we run out of initlevels? I think this was the
kind of thing that deferred probe should solve. Usually changing this kind
of thing has side effects so I'm a bit hesitant.
Ah yes, I remember now. The IRQ domain needs to be in place before the
Device Tree is parsed by the Open Firmware subsystem. If it's not the
error "no irq domain found" is triggered and the IRQs are never mapped.
I'd be happy to take a second opinion, but I believe this (and the other
core_initcall patch) is required.
It's still just a hack. The real solution that we discussed last time it
came up is to defer the translation of irq numbers until device driver
probe time, and bail out with -EPROBE_DEFER if you try to use a device
whose interrupt is not available yet.
/*
* FIXME: Should we set up the GPIO domain here?
*
* The problem is that we cannot put the interrupt resources into the platform
* device until the irqdomain has been added. Right now, we set the GIC interrupt
* domain from init_irq(), then load the gpio driver from
* core_initcall(nmk_gpio_init) and add the platform devices from
* arch_initcall(customize_machine).
*
* This feels fragile because it depends on the gpio device getting probed
* _before_ any device uses the gpio interrupts.
*/