diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2013-01-18 04:42:18 -0500 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2013-02-11 09:30:39 -0500 |
commit | d8005e6b95268cbb50db3773d5f180c32a9434fe (patch) | |
tree | 1e27f00970c3612521a4d29146948ef4cec05586 /arch/arc/include/asm/clk.h | |
parent | bf90e1eab682dcb79b7765989fb65835ce9d6165 (diff) |
ARC: Timers/counters/delay management
ARC700 includes 2 in-core 32bit timers TIMER0 and TIMER1.
Both have exactly same capabilies.
* programmable to count from TIMER<n>_CNT to TIMER<n>_LIMIT
* for count 0 and LIMIT ~1, provides a free-running counter by
auto-wrapping when limit is reached.
* optionally interrupt when LIMIT is reached (oneshot event semantics)
* rearming the interrupt provides periodic semantics
* run at CPU clk
ARC Linux uses TIMER0 for clockevent (periodic/oneshot) and TIMER1 for
clocksource (free-running clock).
Newer cores provide RTSC insn which gives a 64bit cpu clk snapshot hence
is more apt for clocksource when available.
SMP poses a bit of challenge for global timekeeping clocksource /
sched_clock() backend:
-TIMER1 based local clocks are out-of-sync hence can't be used
(thus we default to jiffies based cs as well as sched_clock() one/both
of which platform can override with it's specific hardware assist)
-RTSC is only allowed in SMP if it's cross-core-sync (Kconfig glue
ensures that) and thus usable for both requirements.
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/arc/include/asm/clk.h')
-rw-r--r-- | arch/arc/include/asm/clk.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/arc/include/asm/clk.h b/arch/arc/include/asm/clk.h new file mode 100644 index 000000000000..61956436c75c --- /dev/null +++ b/arch/arc/include/asm/clk.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_ARC_CLK_H | ||
10 | #define _ASM_ARC_CLK_H | ||
11 | |||
12 | /* Although we can't really hide core_freq, the accessor is still better way */ | ||
13 | extern unsigned long core_freq; | ||
14 | |||
15 | static inline unsigned long arc_get_core_freq(void) | ||
16 | { | ||
17 | return core_freq; | ||
18 | } | ||
19 | |||
20 | #endif | ||