Hi,

On Tue, 8 Mar 2011, Kevin Hilman wrote:

> Kalle Jokiniemi <[email protected]> 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?


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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to