diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-01-14 15:07:35 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-05-02 04:35:36 -0400 |
commit | f5fc00826d1e60af0e22cb9f65b933d823a8ed84 (patch) | |
tree | bcff2df77e951dbfc0833cda47620ee3c65694ac /arch/arm/plat-versatile | |
parent | 6be4826e37122b25cb10b215fc84c3a0b1fe1402 (diff) |
ARM: Realview/Versatile: separate out common sched_clock()
Provide a common sched_clock() implementation for Versatile and
Realview.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/plat-versatile')
-rw-r--r-- | arch/arm/plat-versatile/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/plat-versatile/sched-clock.c | 53 |
2 files changed, 55 insertions, 0 deletions
diff --git a/arch/arm/plat-versatile/Makefile b/arch/arm/plat-versatile/Makefile index 334d2f14232c..9b1a66816aa6 100644 --- a/arch/arm/plat-versatile/Makefile +++ b/arch/arm/plat-versatile/Makefile | |||
@@ -1,2 +1,4 @@ | |||
1 | obj-y := clock.o | 1 | obj-y := clock.o |
2 | obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o | 2 | obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o |
3 | obj-$(CONFIG_ARCH_REALVIEW) += sched-clock.o | ||
4 | obj-$(CONFIG_ARCH_VERSATILE) += sched-clock.o | ||
diff --git a/arch/arm/plat-versatile/sched-clock.c b/arch/arm/plat-versatile/sched-clock.c new file mode 100644 index 000000000000..9768cf7e83d7 --- /dev/null +++ b/arch/arm/plat-versatile/sched-clock.c | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/plat-versatile/sched-clock.c | ||
3 | * | ||
4 | * Copyright (C) 1999 - 2003 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #include <linux/cnt32_to_63.h> | ||
22 | #include <linux/io.h> | ||
23 | #include <asm/div64.h> | ||
24 | |||
25 | #include <mach/hardware.h> | ||
26 | #include <mach/platform.h> | ||
27 | |||
28 | #ifdef VERSATILE_SYS_BASE | ||
29 | #define REFCOUNTER (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_24MHz_OFFSET) | ||
30 | #endif | ||
31 | |||
32 | #ifdef REALVIEW_SYS_BASE | ||
33 | #define REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET) | ||
34 | #endif | ||
35 | |||
36 | /* | ||
37 | * This is the Realview and Versatile sched_clock implementation. This | ||
38 | * has a resolution of 41.7ns, and a maximum value of about 35583 days. | ||
39 | * | ||
40 | * The return value is guaranteed to be monotonic in that range as | ||
41 | * long as there is always less than 89 seconds between successive | ||
42 | * calls to this function. | ||
43 | */ | ||
44 | unsigned long long sched_clock(void) | ||
45 | { | ||
46 | unsigned long long v = cnt32_to_63(readl(REFCOUNTER)); | ||
47 | |||
48 | /* the <<1 gets rid of the cnt_32_to_63 top bit saving on a bic insn */ | ||
49 | v *= 125<<1; | ||
50 | do_div(v, 3<<1); | ||
51 | |||
52 | return v; | ||
53 | } | ||