diff options
author | Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com> | 2012-07-06 06:06:49 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-07-09 12:41:09 -0400 |
commit | 27a5569dc66ecce06cb532542ddcd0b6da8783f6 (patch) | |
tree | 750cb3584ca6e85ec284db746ecb724786e7637a /arch | |
parent | a5203c4ce6750730b1d95a8bc1e8214765450f7e (diff) |
ARM: 7444/1: kernel: add arch-timer C3STOP feature
When a CPU is shutdown its architected timer comparators registers are
lost. Within CPU idle, before processors enter shutdown they enter
clock events broadcast mode through the
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, cpuid);
function where the local timers are emulated by a global always-on timer.
On CPU resume, the per-CPU tick device normal mode is restored by exiting
broadcast mode through
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, cpuid);
In order for this mechanism to function, architected timers should add to
their feature C3STOP, which means that they are not able to function when the
CPU is in off-mode.
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/arch_timer.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm/kernel/arch_timer.c b/arch/arm/kernel/arch_timer.c index dd58035621f7..df44c8cf9e2e 100644 --- a/arch/arm/kernel/arch_timer.c +++ b/arch/arm/kernel/arch_timer.c | |||
@@ -137,7 +137,7 @@ static int __cpuinit arch_timer_setup(struct clock_event_device *clk) | |||
137 | /* Be safe... */ | 137 | /* Be safe... */ |
138 | arch_timer_disable(); | 138 | arch_timer_disable(); |
139 | 139 | ||
140 | clk->features = CLOCK_EVT_FEAT_ONESHOT; | 140 | clk->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_C3STOP; |
141 | clk->name = "arch_sys_timer"; | 141 | clk->name = "arch_sys_timer"; |
142 | clk->rating = 450; | 142 | clk->rating = 450; |
143 | clk->set_mode = arch_timer_set_mode; | 143 | clk->set_mode = arch_timer_set_mode; |