> -----Original Message----- > From: ext Paul Walmsley [mailto:paul@xxxxxxxxx] > Sent: 9. maaliskuuta 2011 1:02 > To: Jokiniemi Kalle (Nokia-MS/Tampere) > Cc: Kevin Hilman; linux-omap@xxxxxxxxxxxxxxx; tony@xxxxxxxxxxx; b- > cousson@xxxxxx; Koskinen Ilkka (Nokia-MS/Tampere); Charulatha > Varadarajan; wim@xxxxxxxxx > Subject: Re: [PATCH 0/2] omap_wdt: fix interface clock handling > > Hi, > > On Tue, 8 Mar 2011, Kevin Hilman wrote: > > > Kalle Jokiniemi <kalle.jokiniemi@xxxxxxxxx> writes: > > > > > The runtime PM does not offer enough granularity to control > > > individual clocks separately as needed. Current pm implementation of > > > omap_wdt blocks the CORE power domain from idling in OMAP SoC, as it > > > keeps the interface clock of the watchdog always on. This causes > > > severe power leakage in devices where the omap watchdog is in active > > > use. > > > > The iclk remains active because it's in hardware-controlled auto-idle > > mode. > > ... and we think that the interface clock never enters auto-idle because the > WDT doesn't SIdleAck to the PRCM until the special sequence has been > written to the WDT registers to disable it. So even if its *CLKEN bits are set to > zero, the WDT prevents the system from going idle. > > > I believe if you set the WDT hwmod to software-supported idle > > (OCPIF_SWSUP_IDLE), the runtime PM idle (which calls omap_device idle, > > then omap_hwmod_idle) should also gate the interface clock. > > Agreed. > > Kalle, since you requested patches, here's one that implements Kevin's first > suggestion. I will reply to your second patch with its equivalent for PM > runtime. The patches have been compile-tested only. Perhaps you could > see if they solve your problem? Thanks Paul, I'll try these out. - Kalle > > > regards, > > - Paul > > --- > arch/arm/mach-omap2/omap_hwmod_2420_data.c | 1 + > arch/arm/mach-omap2/omap_hwmod_2430_data.c | 1 + > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1 + > arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 1 + > 4 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c > b/arch/arm/mach-omap2/omap_hwmod_2420_data.c > index 1611f74..df4950d 100644 > --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c > +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c > @@ -974,6 +974,7 @@ static struct omap_hwmod_ocp_if > omap2420_l4_wkup__wd_timer2 = { > .clk = "mpu_wdt_ick", > .addr = omap2420_wd_timer2_addrs, > .addr_cnt = ARRAY_SIZE(omap2420_wd_timer2_addrs), > + .flags = OCPIF_SWSUP_IDLE, > .user = OCP_USER_MPU | OCP_USER_SDMA, > }; > > diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c > b/arch/arm/mach-omap2/omap_hwmod_2430_data.c > index 809424f..21fc908 100644 > --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c > +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c > @@ -1074,6 +1074,7 @@ static struct omap_hwmod_ocp_if > omap2430_l4_wkup__wd_timer2 = { > .clk = "mpu_wdt_ick", > .addr = omap2430_wd_timer2_addrs, > .addr_cnt = ARRAY_SIZE(omap2430_wd_timer2_addrs), > + .flags = OCPIF_SWSUP_IDLE, > .user = OCP_USER_MPU | OCP_USER_SDMA, > }; > > diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > index 457df3e..7ae2dab 100644 > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > @@ -1234,6 +1234,7 @@ static struct omap_hwmod_ocp_if > omap3xxx_l4_wkup__wd_timer2 = { > .clk = "wdt2_ick", > .addr = omap3xxx_wd_timer2_addrs, > .addr_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_addrs), > + .flags = OCPIF_SWSUP_IDLE, > .user = OCP_USER_MPU | OCP_USER_SDMA, > }; > > diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c > b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c > index 7b72316..2038813 100644 > --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c > +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c > @@ -4901,6 +4901,7 @@ static struct omap_hwmod_ocp_if > omap44xx_l4_wkup__wd_timer2 = { > .clk = "l4_wkup_clk_mux_ck", > .addr = omap44xx_wd_timer2_addrs, > .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer2_addrs), > + .flags = OCPIF_SWSUP_IDLE, > .user = OCP_USER_MPU | OCP_USER_SDMA, > }; > > -- > 1.7.2.3 -- 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