[PATCH 3/5] ARM: twd: Add context save restore support
From: Santosh Shilimkar <hidden>
Date: 2011-01-24 11:16:08
Also in:
linux-omap
-----Original Message----- From: Russell King - ARM Linux [mailto:linux at arm.linux.org.uk] Sent: Monday, January 24, 2011 4:41 PM To: Santosh Shilimkar Cc: linux-arm-kernel at lists.infradead.org; catalin.marinas at arm.com; ccross at android.com; linus.ml.walleij at gmail.com; linux- omap at vger.kernel.org Subject: Re: [PATCH 3/5] ARM: twd: Add context save restore support On Mon, Jan 24, 2011 at 11:06:09AM +0000, Russell King - ARM Linux wrote:quoted
On Mon, Jan 24, 2011 at 02:21:17PM +0530, Santosh Shilimkar wrote:quoted
In CPU low power state, local timer looses its register context.Thisquoted
quoted
patch adds context save restore hooks which can be used byplatformsquoted
quoted
appropriately.I thought the whole point of CLOCK_EVT_FEAT_C3STOP was that thegenericquoted
timer stuff wouldn't rely on it being kept alive? Hmm, it looks like we bypass the clockevents code by only settingthequoted
TWD load value at initialization time, not when we switch toperiodicquoted
mode. We really ought to rewrite it whenever we switch back toperiodicquoted
mode. I suspect fixing that means you won't need this save/restoresupport. Untested, but should do what's required.
:) I was just typing an email and you sent a patch. Will test this and update you.
quoted hunk ↗ jump to hunk
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index fd91566..60636f4 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c@@ -36,6 +36,7 @@ static void twd_set_mode(enum clock_event_modemode, /* timer load already set up */ ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE | TWD_TIMER_CONTROL_PERIODIC; + __raw_writel(twd_timer_rate / HZ, twd_base + TWD_TIMER_LOAD); break; case CLOCK_EVT_MODE_ONESHOT: /* period set, and timer enabled in 'next_event' hook */@@ -81,7 +82,7 @@ int twd_timer_ack(void) static void __cpuinit twd_calibrate_rate(void) { - unsigned long load, count; + unsigned long count; u64 waitjiffies; /*@@ -116,10 +117,6 @@ static void __cpuinit twd_calibrate_rate(void) printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, (twd_timer_rate / 1000000) % 100); } - - load = twd_timer_rate / HZ; - - __raw_writel(load, twd_base + TWD_TIMER_LOAD); } /*