Thanks Tony very much for your reply!

On Wed, Jan 7, 2009 at 10:05 PM, Tony Lindgren <[email protected]> wrote:
> * 김규원 <[email protected]> [090106 04:59]:
>> 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?
>
> Maybe suspend the USΒ too? :)

I confirmed musb_suspend() function was invoked while entering Suspend-to-RAM
state. musb_suspend() didn't disable USB interrupt, but only USB clock. Devices
should be suspended with interrupts disabled
(/Documenttation/power/devices.txt - 412line)

So I modified musb_suspend() to disable USB interrupt
(I'm planning to send this patch very soon)
I even wrote 0 to PM_WKEN_USBHOST[EN_USBHOST] bit. But our OMAP3430 board
still have woken up by USB interrupt, because disable_irq() didn't mask the
interrupt.

>
>> 2. If there is no better solution, can I be applied this patch to omap-tree?
>
> The patch looks OK to me, assuming the default enable calls unmask?
>

Right, default_enable() function(kernel/irq/chip.c 222line) calls unmask

> Regards,
>
> Tony
>
>>
>> Thank you!
>>
>> commit bbb49321b161e6a9ff2b73326d4012d8eb8bbf23
>> Author: Kim Kyuwon <[email protected]>
>> 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 <[email protected]>
>>
>> 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
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
>> the body of a message to [email protected]
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

Regards,
-- 
Kim Kyuwon
N떑꿩�r툤y鉉싕b쾊Ф푤v�^�)頻{.n�+돴쪐{괍f찆{ay��뉅숇,j�줲"톒쉵�z�췿ⅱ�
◁쫔:+v돣둾�j�m텫�쳭喩zZ+껠쉸듶줷"얎!턨

Reply via email to