On Fri, Apr 18, 2014 at 6:24 PM, Tony Lindgren <tony@xxxxxxxxxxx> wrote: > * Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> [140418 16:04]: >> On Fri, Apr 18, 2014 at 02:58:48PM -0700, Tony Lindgren wrote: >> > Oh come on, let's stop pretending it's not broken. And it's way worse with >> > device tree as there's nothing making sure the resources for a driver >> > are set up before the driver probes. And we've been unable to fix just >> > this issue alone for about six months now. It's also broken beyond that. >> > It's called of_platform_bus yet it won't even pass the platform_data >> > as auxdata to the devices on a sub-bus instantatiated like I2C. >> >> Isn't there a much simpler solution to the platform device IRQ problem? >> >> Rather than trying to fix it at the point where the resources are >> created, why not just *not* have DT create the IRQ resources in the >> first place, and instead have platform_get_irq() (which is the function >> which should be used to get an IRQ) be the actor to do whatever is >> necessary to return the IRQ(s) ? > > Yeah why not. I don't see why we would need to do all this of_* special > trickery for much anything beyond parsing the binding. That can work, but it will still need something like of_find_irq_domain() to determine whether to return -EPROBE_DEFER or not. You could also go in the other direction and don't create the device until the resources can be resolved. Unlike any of the other solutions, that would work for amba bus as well although we may never have a case where we need this with the amba bus. This would require making of_platform_populate be callable multiple times, but there are already some other reasons for wanting to do that. Specifically, I would like the core code to call of_platform_populate with default options and then only platforms with non-default options need a call to of_platform_populate. >> Yes, I know we have some drivers which use platform_get_resources() with >> IORESOURCE_IRQ, but they should really use the right accessor. And those >> who just dereference the resource array directly... get what's coming >> (though of course they have to be fixed.) > > $ git grep IORESOURCE_IRQ drivers/ | grep platform_get_resource | wc -l > 179 Certainly, this is worthwhile clean-up no matter what the solution. Rob -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html