>>-----Original Message----- >>From: Paul Walmsley [mailto:paul@xxxxxxxxx] >>Sent: Friday, February 05, 2010 1:59 PM >>To: Gopinath, Thara >>Cc: linux-omap@xxxxxxxxxxxxxxx >>Subject: Re: [PATCH 3/3] OMAP3 PM: Adding counters for power domain logic off and mem off during >>retention. >> >>Hi Thara, >> >>On Thu, 4 Feb 2010, Thara Gopinath wrote: >> >>> This patch adds counters to keep track of whether the powerdomain >>> logic or software controllable memory banks are turned off when >>> the power domain enters retention. During power domain retention >>> if logic gets turned off, the scenario is known as Open Switch Retention. >>> Also during retention s/w controllable memory banks of a power >>> domain can be chosen to be kept in retention or off. >>> >>> This patch adds one counter per powerdomain to track the power domain >>> logic state during retention. Number of memory bank state counters >>> added depends on the number of software controllable memory banks >>> of the powerdomain. To view these counters do >>> cat ../debug/pm_debug/count >>> >>> Signed-off-by: Thara Gopinath <thara@xxxxxx> >>> Cc: Paul Walmsley <paul@xxxxxxxxx> >> >>I've moved the OSWR counter incrementing code out into its own function, >>and simplified the conditionals, both per Documentation/CodingStyle. >>Revised patch attached below. Could you please check this to confirm that >>it works as intended? Hello Paul, This patch looks fine to me. Regards Thara >> >> >>- Paul >> >>From 3fe59666447821406068ee7f48aa7f1698e51a72 Mon Sep 17 00:00:00 2001 >>From: Thara Gopinath <thara@xxxxxx> >>Date: Thu, 4 Feb 2010 22:17:51 +0530 >>Subject: [PATCH] OMAP3 PM: Adding counters for power domain logic off and mem off during retention. >> >>This patch adds counters to keep track of whether the powerdomain >>logic or software controllable memory banks are turned off when >>the power domain enters retention. During power domain retention >>if logic gets turned off, the scenario is known as Open Switch Retention. >>Also during retention s/w controllable memory banks of a power >>domain can be chosen to be kept in retention or off. >> >>This patch adds one counter per powerdomain to track the power domain >>logic state during retention. Number of memory bank state counters >>added depends on the number of software controllable memory banks >>of the powerdomain. To view these counters do >> cat ../debug/pm_debug/count >> >>Signed-off-by: Thara Gopinath <thara@xxxxxx> >>[paul@xxxxxxxxx: conditional expressions simplified; counter increment >> code moved to its own function] >>Signed-off-by: Paul Walmsley <paul@xxxxxxxxx> >>--- >> arch/arm/mach-omap2/pm-debug.c | 5 +++++ >> arch/arm/mach-omap2/powerdomain.c | 25 +++++++++++++++++++++++++ >> arch/arm/plat-omap/include/plat/powerdomain.h | 2 ++ >> 3 files changed, 32 insertions(+), 0 deletions(-) >> >>diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c >>index 0ce356f..c18f7f2 100644 >>--- a/arch/arm/mach-omap2/pm-debug.c >>+++ b/arch/arm/mach-omap2/pm-debug.c >>@@ -385,6 +385,11 @@ static int pwrdm_dbg_show_counter(struct powerdomain *pwrdm, void *user) >> seq_printf(s, ",%s:%d", pwrdm_state_names[i], >> pwrdm->state_counter[i]); >> >>+ seq_printf(s, ",RET-LOGIC-OFF:%d", pwrdm->ret_logic_off_counter); >>+ for (i = 0; i < pwrdm->banks; i++) >>+ seq_printf(s, ",RET-MEMBANK%d-OFF:%d", i + 1, >>+ pwrdm->ret_mem_off_counter[i]); >>+ >> seq_printf(s, "\n"); >> >> return 0; >>diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c >>index e9eeaa4..9a0fb38 100644 >>--- a/arch/arm/mach-omap2/powerdomain.c >>+++ b/arch/arm/mach-omap2/powerdomain.c >>@@ -125,6 +125,10 @@ static int _pwrdm_register(struct powerdomain *pwrdm) >> for (i = 0; i < PWRDM_MAX_PWRSTS; i++) >> pwrdm->state_counter[i] = 0; >> >>+ pwrdm->ret_logic_off_counter = 0; >>+ for (i = 0; i < pwrdm->banks; i++) >>+ pwrdm->ret_mem_off_counter[i] = 0; >>+ >> pwrdm_wait_transition(pwrdm); >> pwrdm->state = pwrdm_read_pwrst(pwrdm); >> pwrdm->state_counter[pwrdm->state] = 1; >>@@ -134,6 +138,25 @@ static int _pwrdm_register(struct powerdomain *pwrdm) >> return 0; >> } >> >>+static void _update_logic_membank_counters(struct powerdomain *pwrdm) >>+{ >>+ int i; >>+ u8 prev_logic_pwrst, prev_mem_pwrst; >>+ >>+ prev_logic_pwrst = pwrdm_read_prev_logic_pwrst(pwrdm); >>+ if ((pwrdm->pwrsts_logic_ret == PWRSTS_OFF_RET) && >>+ (prev_logic_pwrst == PWRDM_POWER_OFF)) >>+ pwrdm->ret_logic_off_counter++; >>+ >>+ for (i = 0; i < pwrdm->banks; i++) { >>+ prev_mem_pwrst = pwrdm_read_prev_mem_pwrst(pwrdm, i); >>+ >>+ if ((pwrdm->pwrsts_mem_ret[i] == PWRSTS_OFF_RET) && >>+ (prev_mem_pwrst == PWRDM_POWER_OFF)) >>+ pwrdm->ret_mem_off_counter[i]++; >>+ } >>+} >>+ >> static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag) >> { >> >>@@ -153,6 +176,8 @@ static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag) >> prev = pwrdm_read_prev_pwrst(pwrdm); >> if (pwrdm->state != prev) >> pwrdm->state_counter[prev]++; >>+ if (prev == PWRDM_POWER_RET) >>+ _update_logic_membank_counters(pwrdm); >> break; >> default: >> return -EINVAL; >>diff --git a/arch/arm/plat-omap/include/plat/powerdomain.h b/arch/arm/plat- >>omap/include/plat/powerdomain.h >>index 6657ff2..d82b2c0 100644 >>--- a/arch/arm/plat-omap/include/plat/powerdomain.h >>+++ b/arch/arm/plat-omap/include/plat/powerdomain.h >>@@ -100,6 +100,8 @@ struct powerdomain { >> struct list_head node; >> int state; >> unsigned state_counter[PWRDM_MAX_PWRSTS]; >>+ unsigned ret_logic_off_counter; >>+ unsigned ret_mem_off_counter[PWRDM_MAX_MEM_BANKS]; >> >> #ifdef CONFIG_PM_DEBUG >> s64 timer; >>-- >>1.6.6.rc2.5.g49666 -- 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