* Re: [PATCH 1/1] twl4030: Fix chained irq handling on resume from suspend
2012-10-16 14:59 [PATCH 1/1] twl4030: Fix chained irq handling on resume from suspend Kalle Jokiniemi
@ 2012-10-16 15:04 ` Kalle Jokiniemi
2012-10-16 23:52 ` Kevin Hilman
2012-11-21 16:47 ` Samuel Ortiz
2 siblings, 0 replies; 4+ messages in thread
From: Kalle Jokiniemi @ 2012-10-16 15:04 UTC (permalink / raw)
To: tony, sameo
Cc: khilman, omaplinuxkernel, linux-i2c, w.sang, linux-omap,
grygorii.strashko, shubhrajyoti, huzefank, nm
Hi,
ti, 2012-10-16 kello 17:59 +0300, Kalle Jokiniemi kirjoitti:
> The irqs are enabled one-by-one in pm core resume_noirq phase.
> This leads to situation where the twl4030 primary interrupt
> handler (PIH) is enabled before the chained secondary handlers
> (SIH). As the PIH cannot clear the pending interrupt, and
> SIHs have not been enabled yet, a flood of interrupts hangs
> the device.
>
> Fixed the issue by setting the SIH irqs with IRQF_EARLY_RESUME
> flags, so they get enabled before the PIH.
Did it this way now, since the tl4030_irq is not really a driver that
could do normal suspend / resume calls... and this is what the flag is
for.
Added Samuel to recipients, as get_maintainer reported him as
maintainer.
- Kalle
>
> Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@jollamobile.com>
> ---
> drivers/mfd/twl4030-irq.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
> index ad733d7..cdd1173 100644
> --- a/drivers/mfd/twl4030-irq.c
> +++ b/drivers/mfd/twl4030-irq.c
> @@ -672,7 +672,8 @@ int twl4030_sih_setup(struct device *dev, int module, int irq_base)
> irq = sih_mod + twl4030_irq_base;
> irq_set_handler_data(irq, agent);
> agent->irq_name = kasprintf(GFP_KERNEL, "twl4030_%s", sih->name);
> - status = request_threaded_irq(irq, NULL, handle_twl4030_sih, 0,
> + status = request_threaded_irq(irq, NULL, handle_twl4030_sih,
> + IRQF_EARLY_RESUME,
> agent->irq_name ?: sih->name, NULL);
>
> dev_info(dev, "%s (irq %d) chaining IRQs %d..%d\n", sih->name,
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/1] twl4030: Fix chained irq handling on resume from suspend
2012-10-16 14:59 [PATCH 1/1] twl4030: Fix chained irq handling on resume from suspend Kalle Jokiniemi
2012-10-16 15:04 ` Kalle Jokiniemi
@ 2012-10-16 23:52 ` Kevin Hilman
2012-11-21 16:47 ` Samuel Ortiz
2 siblings, 0 replies; 4+ messages in thread
From: Kevin Hilman @ 2012-10-16 23:52 UTC (permalink / raw)
To: Kalle Jokiniemi
Cc: tony, sameo, omaplinuxkernel, linux-i2c, w.sang, linux-omap,
grygorii.strashko, shubhrajyoti, huzefank, nm
Kalle Jokiniemi <kalle.jokiniemi@jollamobile.com> writes:
> The irqs are enabled one-by-one in pm core resume_noirq phase.
> This leads to situation where the twl4030 primary interrupt
> handler (PIH) is enabled before the chained secondary handlers
> (SIH). As the PIH cannot clear the pending interrupt, and
> SIHs have not been enabled yet, a flood of interrupts hangs
> the device.
>
> Fixed the issue by setting the SIH irqs with IRQF_EARLY_RESUME
> flags, so they get enabled before the PIH.
>
> Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@jollamobile.com>
Acked-by: Kevin Hilman <khilman@ti.com>
Thanks, I like this better than the I2C driver fix.
Samuel, feel free to take this for v3.7
Kevin
> ---
> drivers/mfd/twl4030-irq.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
> index ad733d7..cdd1173 100644
> --- a/drivers/mfd/twl4030-irq.c
> +++ b/drivers/mfd/twl4030-irq.c
> @@ -672,7 +672,8 @@ int twl4030_sih_setup(struct device *dev, int module, int irq_base)
> irq = sih_mod + twl4030_irq_base;
> irq_set_handler_data(irq, agent);
> agent->irq_name = kasprintf(GFP_KERNEL, "twl4030_%s", sih->name);
> - status = request_threaded_irq(irq, NULL, handle_twl4030_sih, 0,
> + status = request_threaded_irq(irq, NULL, handle_twl4030_sih,
> + IRQF_EARLY_RESUME,
> agent->irq_name ?: sih->name, NULL);
>
> dev_info(dev, "%s (irq %d) chaining IRQs %d..%d\n", sih->name,
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/1] twl4030: Fix chained irq handling on resume from suspend
2012-10-16 14:59 [PATCH 1/1] twl4030: Fix chained irq handling on resume from suspend Kalle Jokiniemi
2012-10-16 15:04 ` Kalle Jokiniemi
2012-10-16 23:52 ` Kevin Hilman
@ 2012-11-21 16:47 ` Samuel Ortiz
2 siblings, 0 replies; 4+ messages in thread
From: Samuel Ortiz @ 2012-11-21 16:47 UTC (permalink / raw)
To: Kalle Jokiniemi
Cc: tony, khilman, omaplinuxkernel, linux-i2c, w.sang, linux-omap,
grygorii.strashko, shubhrajyoti, huzefank, nm
Hi Kalle,
On Tue, Oct 16, 2012 at 05:59:35PM +0300, Kalle Jokiniemi wrote:
> The irqs are enabled one-by-one in pm core resume_noirq phase.
> This leads to situation where the twl4030 primary interrupt
> handler (PIH) is enabled before the chained secondary handlers
> (SIH). As the PIH cannot clear the pending interrupt, and
> SIHs have not been enabled yet, a flood of interrupts hangs
> the device.
>
> Fixed the issue by setting the SIH irqs with IRQF_EARLY_RESUME
> flags, so they get enabled before the PIH.
>
> Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@jollamobile.com>
> ---
> drivers/mfd/twl4030-irq.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
Thanks, patch applied to my for-linus branch.
Cheers,
Samuel.
--
Intel Open Source Technology Centre
http://oss.intel.com/
^ permalink raw reply [flat|nested] 4+ messages in thread