public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
* Questions about masking interrupts when disabling interrupts
@ 2009-01-06  2:59 김규원
  2009-01-07 13:05 ` Tony Lindgren
  0 siblings, 1 reply; 5+ messages in thread
From: 김규원 @ 2009-01-06  2:59 UTC (permalink / raw)
  To: linux-omap; +Cc: 박경민, 허성관

Greetings,

I'm enabling the Suspend-to-RAM state in our new OMAP3 Board.
But I had some problems because of USB Interrupt.

Although I disabled USB interrupt by disable_irq() function while
entering the Suspend,
M_IRQ_92 irq continuously wake up the OMAP3430 Processor.

So, I fixed this problem as following patch.

My Questions are:
1. Could anyone suggest the better solution for this problem?
2. If there is no better solution, can I be applied this patch to omap-tree?

Thank you!

commit bbb49321b161e6a9ff2b73326d4012d8eb8bbf23
Author: Kim Kyuwon <chammoru@gmail.com>
Date:   Tue Jan 6 10:11:46 2009 +0900

    ARM: OMAP3: Mask interrupts when disabling interrupts

    By Ingo Molnar, interrupts are not masked by default.
    (refer to 76d2160147f43f982dfe881404cfde9fd0a9da21)

    But if interrupts are not masked, the processor can wake up while in
    Suspend-to-RAM state by an external interrupt. For example, if an
OMAP3 board
    is connected to Host PC by USB and entered to Suspend-to-RAM
state, it wake up
    automatically by M_IRQ_92. The disable_irq() function can't disable the
    interrupt in H/W level, So I modified arch/arm/mach-omap2/irq.c

    Signed-off-by: Kim Kyuwon <chammoru@gmail.com>

diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c
index 110acb9..b44dcae 100644
--- a/arch/arm/mach-omap2/irq.c
+++ b/arch/arm/mach-omap2/irq.c
@@ -123,6 +123,11 @@ static void omap_unmask_irq(unsigned int irq)
 	intc_bank_write_reg(1 << irq, &irq_banks[0], INTC_MIR_CLEAR0 + offset);
 }

+static void omap_disable_irq(unsigned int irq)
+{
+	omap_mask_irq(irq);
+}
+
 static void omap_mask_ack_irq(unsigned int irq)
 {
 	omap_mask_irq(irq);
@@ -134,6 +139,7 @@ static struct irq_chip omap_irq_chip = {
 	.ack	= omap_mask_ack_irq,
 	.mask	= omap_mask_irq,
 	.unmask	= omap_unmask_irq,
+	.disable = omap_disable_irq,
 };

 static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank)
-- 
Kim Kyuwon

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-01-09 12:04 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-06  2:59 Questions about masking interrupts when disabling interrupts 김규원
2009-01-07 13:05 ` Tony Lindgren
2009-01-08  1:27   ` Kim Kyuwon
2009-01-08  3:57     ` Fwd: " Kim Kyuwon
2009-01-09 12:04     ` Tony Lindgren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox