Thread (66 messages) flat view 66 messages, 4 authors, 2011-03-01
STALE5679d

Revision v1 of 6 in this series.

Revisions (6)
  1. v1 [diff vs current]
  2. v1 [diff vs current]
  3. v1 [diff vs current]
  4. v1 [diff vs current]
  5. v1 current
  6. v1 [diff vs current]

[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.
This
quoted
quoted
patch adds context save restore hooks which can be used by
platforms
quoted
quoted
appropriately.
I thought the whole point of CLOCK_EVT_FEAT_C3STOP was that the
generic
quoted
timer stuff wouldn't rely on it being kept alive?

Hmm, it looks like we bypass the clockevents code by only setting
the
quoted
TWD load value at initialization time, not when we switch to
periodic
quoted
mode.  We really ought to rewrite it whenever we switch back to
periodic
quoted
mode.

I suspect fixing that means you won't need this save/restore
support.

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_mode
mode,
 		/* 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);
 }

 /*
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help