Hi Grygorii, On Tue, Jul 11, 2017 at 5:39 PM, Grygorii Strashko <grygorii.stras...@ti.com> wrote: > On 07/11/2017 09:41 AM, Thomas Gleixner wrote: >> On Tue, 11 Jul 2017, Tony Lindgren wrote: >>> * Thomas Gleixner <t...@linutronix.de> [170711 02:48]: >>> And "external abort on non-linefetch" means something is not clocked >>> in this case. The following alone makes things boot for me again, but I >>> don't >>> quite follow what has now changed with the ordering.. Thomas, any ideas? >> >> Ah. Now that makes sense. >> >> Unpatched the ordering is: >> >> chip_bus_lock(desc); >> irq_request_resources(desc); >> >> Now the offending change reordered the calls. OMAP gpio has: >> >> omap_gpio_irq_bus_lock() >> pm_runtime_get_sync(bank->chip.parent); >> >> So that at least explains the error. So that omap gpio irq chip (ab)uses >> the bus_lock() callback to do runtime power management. Sigh, I did not >> expect that. Let me have a deeper look if that's OMAP only or whether this >> happens in other places as well. > > It was the only one way to power on GPIO bank when the first GPIO IRQ is > requested, > as all other irqchip callbacks are under raw_lock while pm_runtime uses > spinlock, as > result on -RT it was not possible to use PM runtime in other irqchip > callbacks. > > Now, I think, It might be possible to use irq_chip_pm_get(), but there is one > problem - > OMAP Power management platform code can call > omap2_gpio_prepare_for_idle()/omap2_gpio_resume_after_idle() > which expected to disable GPIO banks using PM runtime and current driver > implementation > expect to have PM runtime usage_count = 1. > > Tony, Potentially we can use pm_runtime_force_suspend()/resume() there, but > they are not compatible with > irqoff context (CPUIdle late stages). > > In other words, below patch should fix this issue, but will break CPUIdle on > OMAP :( > > -- > From dfca1c806f03ad6bdd72b634d71c96d39bda2046 Mon Sep 17 00:00:00 2001 > From: Grygorii Strashko <grygorii.stras...@ti.com> > Date: Tue, 11 Jul 2017 10:36:23 -0500 > Subject: [PATCH] gpio: omap: switch to use irq_chip_pm_get/put() > > Signed-off-by: Grygorii Strashko <grygorii.stras...@ti.com>
That looks similar to how gpio-rcar was fixed, which used to do the same trick in its bus_lock() callbacks. 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