* [PATCH 1/1] twl4030: Fix chained irq handling on resume from suspend
@ 2012-10-16 14:59 Kalle Jokiniemi
2012-10-16 15:04 ` Kalle Jokiniemi
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Kalle Jokiniemi @ 2012-10-16 14:59 UTC (permalink / raw)
To: tony, sameo
Cc: khilman, omaplinuxkernel, linux-i2c, w.sang, linux-omap,
grygorii.strashko, shubhrajyoti, huzefank, nm, Kalle Jokiniemi
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(-)
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,
--
1.7.4.1
^ permalink raw reply related [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: 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
end of thread, other threads:[~2012-11-21 16:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).