Hi Jon, On Mon, Nov 16, 2015 at 11:34 AM, Jon Hunter <jonath...@nvidia.com> wrote: > On 16/11/15 09:49, Geert Uytterhoeven wrote: >> On Mon, Nov 16, 2015 at 10:46 AM, Jon Hunter <jonath...@nvidia.com> wrote: >>> On 13/11/15 20:01, Thomas Gleixner wrote: >>>> On Fri, 13 Nov 2015, Jon Hunter wrote: >>>>> On 12/11/15 23:20, Kevin Hilman wrote: >>>>>> If all the RPM devices in the domain go idle, it will be powered off >>>>>> independently of the status of the irqchip because the irqchip isn't >>>>>> using RPM. >>>>> >>>>> That's dependent on how the irqchip uses these helpers. If these helpers >>>>> invoke RPM then that will not be the case. >>>> >>>> You need a very proper description of how that domain is working. If >>>> all devices are idle, it's not necessary correct to power down the >>>> irqchip as is might serve other devices as well. >>> >>> Agreed. The irqchip should only be powered down if there are no >>> interrupts in-use/requested. Runtime-pm will keep a reference count for >>> all requested IRQs. >> >> That means the irqchip won't be powered down automatically when the >> last user is powered down, unless all users release their irqs during >> suspend. > > Right. > >> Handling it automatically needs more bookkeeping than a simple reference >> count. > > So what would you suggest? Adding a pm_runtime_register_irq() API that > would register an IRQ with the device that you want RPM to handle? Not > sure if there is a better/easier way to handle this.
The irqchip needs to keep track how many times request_irq() has been called, cfr. your suggestion above. On the other side, the system needs to keep track how many times request_irq() has been called for each irqchip, so it can subtract those numbers from the irqchip's counters during suspend of the device, and re-add them during resume. So we need at least a "struct device *" parameter for request_irq(). devm_request_irq() already has that, but not all drivers use that. However, I think this should be looked at into the context of "[RFD] Functional dependencies between devices". https://lwn.net/Articles/662205/ https://lkml.org/lkml/2015/10/27/388 There can be other dependencies than interrupts between devices. All functions using dependencies need a "struct device *" parameter to record information. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html