Hi Kevin, On Wed, 2010-08-11 at 18:03 +0200, ext Kevin Hilman wrote: > From: Kevin Hilman <khilman@xxxxxx> > > Commit 5a5f561 (convert OMAP3 PRCM macros to the _SHIFT/_MASK suffixes) > mistakenly removed the check for PER when disabling the IO chain. > > During idle, if the PER powerdomain transitions and CORE does not (as > is the case with the lower C-states when using CPUidle) the IO pad > wakeups are not being disabled in the idle path after they are > enabled. > > This patch ensures that the check for disabling IO wakeups also checks > for PER transitions, matching the check done to enable IO wakeups. > > Found when debugging PM/CPUidle related problems reported by Ameya > Palande <ameya.palande@xxxxxxxxx>. Problems were triggered > particularily on boards with UART2 consoles (n900, Overo) since UART2 > is in the PER powerdomain. > > Tested on l-o master (omap3_defonfig + CONFIG_CPU_IDLE=y) as well > as with current PM branch. Boards tested: n900, Overo, omap3evm. > > Cc: Paul Walmsley <paul@xxxxxxxxx> > Cc: Ameya Palande <ameya.palande@xxxxxxxxx> > Tested-by: Jarkko Nikula <jhnikula@xxxxxxxxx> > Signed-off-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> > --- > Tony, this should go in with fixes for -rc2 > > Changes since v1 > - added a bit of history about where the problem was created > - added 'Tested-by' for Jarkko > > arch/arm/mach-omap2/pm34xx.c | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c > index fb4994a..7b03426 100644 > --- a/arch/arm/mach-omap2/pm34xx.c > +++ b/arch/arm/mach-omap2/pm34xx.c > @@ -480,7 +480,9 @@ void omap_sram_idle(void) > } > > /* Disable IO-PAD and IO-CHAIN wakeup */ > - if (omap3_has_io_wakeup() && core_next_state < PWRDM_POWER_ON) { > + if (omap3_has_io_wakeup() && > + (per_next_state < PWRDM_POWER_ON || > + core_next_state < PWRDM_POWER_ON)) { > prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); > omap3_disable_io_chain(); > } Thanks for your fix! I tried out following patch on n900 kernel (based on 2.6.35 mainline) hosted at: http://gitorious.org/nokia-n900-kernel Patch: diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index b88737f..887242d 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -479,7 +479,8 @@ void omap_sram_idle(void) } /* Disable IO-PAD and IO-CHAIN wakeup */ - if (core_next_state < PWRDM_POWER_ON) { + if (per_next_state < PWRDM_POWER_ON || + core_next_state < PWRDM_POWER_ON) { prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); omap3_disable_io_chain(); } And got following WARNING after sometime: [ 109.394714] ------------[ cut here ]------------ [ 109.399414] WARNING: at arch/arm/mach-omap2/pm34xx.c:292 prcm_interrupt_handler+0xb4/0x108() [ 109.407897] prcm: WARNING: PRCM indicated MPU wakeup but no wakeup sources are marked [ 109.415771] Modules linked in: sco bnep l2cap bluetooth ipv6 wl1251_spi wl1251 omaplfb pvrsrvkm cmt_speech mac80211 ssi_protocol hsi_ char cmt omap_ssi crc7 g_ether tsl2563(C) industrialio(C) rtc_twl rtc_core twl4030_pwrbutton gpio_keys [ 109.437042] [<c0039a54>] (unwind_backtrace+0x0/0x168) from [<c005ecdc>] (warn_slowpath_common+0x4c/0x64) [ 109.446594] [<c005ecdc>] (warn_slowpath_common+0x4c/0x64) from [<c005ed74>] (warn_slowpath_fmt+0x2c/0x3c) [ 109.456237] [<c005ed74>] (warn_slowpath_fmt+0x2c/0x3c) from [<c0043860>] (prcm_interrupt_handler+0xb4/0x108) [ 109.466125] [<c0043860>] (prcm_interrupt_handler+0xb4/0x108) from [<c008dcc0>] (handle_IRQ_event+0x24/0xe0) [ 109.475952] [<c008dcc0>] (handle_IRQ_event+0x24/0xe0) from [<c008fe00>] (handle_level_irq+0xd4/0x180) [ 109.485260] [<c008fe00>] (handle_level_irq+0xd4/0x180) from [<c003406c>] (asm_do_IRQ+0x6c/0x8c) [ 109.494018] [<c003406c>] (asm_do_IRQ+0x6c/0x8c) from [<c0034ac8>] (__irq_svc+0x48/0xa8) [ 109.502075] Exception stack(0xc0481eb0 to 0xc0481ef8) [ 109.507141] 1ea0: 00000020 c04866f0 c0480000 c04db080 [ 109.515380] 1ec0: c0480000 00000202 00000000 00000002 0000000a c0480000 c04db080 00000000 [ 109.523620] 1ee0: 00000002 c0481ef8 c00642c8 c00641c8 20000113 ffffffff [ 109.530303] [<c0034ac8>] (__irq_svc+0x48/0xa8) from [<c00641c8>] (__do_softirq+0x3c/0xf8) [ 109.538543] [<c00641c8>] (__do_softirq+0x3c/0xf8) from [<c00642c8>] (irq_exit+0x44/0xa8) [ 109.546691] [<c00642c8>] (irq_exit+0x44/0xa8) from [<c0034070>] (asm_do_IRQ+0x70/0x8c) [ 109.554656] [<c0034070>] (asm_do_IRQ+0x70/0x8c) from [<c0034ac8>] (__irq_svc+0x48/0xa8) [ 109.562713] Exception stack(0xc0481f38 to 0xc0481f80) [ 109.567810] 1f20: 0028f9f0 00000000 [ 109.576049] 1f40: 0028f9f0 00000000 c04ba290 c04ba274 00000003 00000003 8002b868 411fc083 [ 109.584259] 1f60: 0000001f 00000000 00000000 c0481f80 c00449a4 c00449b0 60000013 ffffffff [ 109.592498] [<c0034ac8>] (__irq_svc+0x48/0xa8) from [<c00449b0>] (omap3_enter_idle+0x104/0x134) [ 109.601287] [<c00449b0>] (omap3_enter_idle+0x104/0x134) from [<c02acb24>] (cpuidle_idle_call+0xa0/0x108) [ 109.610839] [<c02acb24>] (cpuidle_idle_call+0xa0/0x108) from [<c0035f20>] (cpu_idle+0x48/0xa0) [ 109.619506] [<c0035f20>] (cpu_idle+0x48/0xa0) from [<c0008974>] (start_kernel+0x278/0x2d8) [ 109.627838] [<c0008974>] (start_kernel+0x278/0x2d8) from [<80008034>] (0x80008034) [ 109.635467] ---[ end trace 89613c3938486d08 ]--- I got several such warnings multiple time once I keep N900 idle. Cheers, Ameya. -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html