On Wed, Apr 29, 2020 at 2:28 AM Marc Zyngier <maz@xxxxxxxxxx> wrote:
One thing though: this seems to be exclusively DT driven. Have you
looked into how that would look like for other firmware types such as
ACPI?
I'm not very familiar with ACPI at all. I've just started to learn
about how it works in the past few months poking at code when I have
some time. So I haven't tried to get this to work with ACPI nor do I
think I'll be able to do that anytime in the near future. I hope that
doesn't block this from being used for DT based platforms.
Another thing is the handling of dependencies. Statically built
irqchips are initialized in the right order based on the topology
described in DT, and are initialized early enough that client devices
will find their irqchip This doesn't work here, obviously.
Yeah, I read that code thoroughly :)
How do you
propose we handle these dependencies, both between irqchip drivers and
client drivers?
For client drivers, we don't need to do anything. The IRQ apis seem to
already handle -EPROBE_DEFER correctly in this case.
For irqchip drivers, the easy answer can be: Load the IRQ modules
early if you make them modules.
But in my case, I've been testing this with fw_devlink=on. The TL;DR
of "fw_devlink=on" in this context is that the IRQ devices will get
device links created based on "interrupt-parent" property. So, with
the magic of device links, these IRQ devices will probe in the right
topological order without any wasted deferred probe attempts. For
cases without fw_devlink=on, I think I can improve
platform_irqchip_probe() in my patch to check if the parent device has
probed and defer if it hasn't.