diff options
-rw-r--r-- | arch/arm/mach-realview/core.c | 16 | ||||
-rw-r--r-- | arch/arm/mach-versatile/core.c | 22 | ||||
-rw-r--r-- | arch/arm/plat-versatile/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/plat-versatile/sched-clock.c | 53 |
4 files changed, 55 insertions, 38 deletions
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 80b8142463c1..f97f001e874b 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
@@ -53,8 +53,6 @@ | |||
53 | 53 | ||
54 | #include "core.h" | 54 | #include "core.h" |
55 | 55 | ||
56 | #define REALVIEW_REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET) | ||
57 | |||
58 | /* used by entry-macro.S and platsmp.c */ | 56 | /* used by entry-macro.S and platsmp.c */ |
59 | void __iomem *gic_cpu_base_addr; | 57 | void __iomem *gic_cpu_base_addr; |
60 | 58 | ||
@@ -77,20 +75,6 @@ void __init realview_adjust_zones(int node, unsigned long *size, | |||
77 | } | 75 | } |
78 | #endif | 76 | #endif |
79 | 77 | ||
80 | /* | ||
81 | * This is the RealView sched_clock implementation. This has | ||
82 | * a resolution of 41.7ns, and a maximum value of about 179s. | ||
83 | */ | ||
84 | unsigned long long sched_clock(void) | ||
85 | { | ||
86 | unsigned long long v; | ||
87 | |||
88 | v = (unsigned long long)readl(REALVIEW_REFCOUNTER) * 125; | ||
89 | do_div(v, 3); | ||
90 | |||
91 | return v; | ||
92 | } | ||
93 | |||
94 | 78 | ||
95 | #define REALVIEW_FLASHCTRL (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_FLASH_OFFSET) | 79 | #define REALVIEW_FLASHCTRL (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_FLASH_OFFSET) |
96 | 80 | ||
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index b68ddd349f12..490fc7597bb6 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -28,7 +28,6 @@ | |||
28 | #include <linux/amba/clcd.h> | 28 | #include <linux/amba/clcd.h> |
29 | #include <linux/amba/pl061.h> | 29 | #include <linux/amba/pl061.h> |
30 | #include <linux/amba/mmci.h> | 30 | #include <linux/amba/mmci.h> |
31 | #include <linux/cnt32_to_63.h> | ||
32 | #include <linux/io.h> | 31 | #include <linux/io.h> |
33 | 32 | ||
34 | #include <asm/clkdev.h> | 33 | #include <asm/clkdev.h> |
@@ -227,27 +226,6 @@ void __init versatile_map_io(void) | |||
227 | iotable_init(versatile_io_desc, ARRAY_SIZE(versatile_io_desc)); | 226 | iotable_init(versatile_io_desc, ARRAY_SIZE(versatile_io_desc)); |
228 | } | 227 | } |
229 | 228 | ||
230 | #define VERSATILE_REFCOUNTER (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_24MHz_OFFSET) | ||
231 | |||
232 | /* | ||
233 | * This is the Versatile sched_clock implementation. This has | ||
234 | * a resolution of 41.7ns, and a maximum value of about 35583 days. | ||
235 | * | ||
236 | * The return value is guaranteed to be monotonic in that range as | ||
237 | * long as there is always less than 89 seconds between successive | ||
238 | * calls to this function. | ||
239 | */ | ||
240 | unsigned long long sched_clock(void) | ||
241 | { | ||
242 | unsigned long long v = cnt32_to_63(readl(VERSATILE_REFCOUNTER)); | ||
243 | |||
244 | /* the <<1 gets rid of the cnt_32_to_63 top bit saving on a bic insn */ | ||
245 | v *= 125<<1; | ||
246 | do_div(v, 3<<1); | ||
247 | |||
248 | return v; | ||
249 | } | ||
250 | |||
251 | 229 | ||
252 | #define VERSATILE_FLASHCTRL (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_FLASH_OFFSET) | 230 | #define VERSATILE_FLASHCTRL (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_FLASH_OFFSET) |
253 | 231 | ||
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 | } | ||