]>
Commit | Line | Data |
---|---|---|
220e2a8d PM |
1 | /* |
2 | * This program is free software; you can redistribute it and/or modify | |
3 | * it under the terms of the GNU General Public License version 2 as | |
4 | * published by the Free Software Foundation. | |
5 | * | |
6 | * This program is distributed in the hope that it will be useful, | |
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
9 | * GNU General Public License for more details. | |
10 | * | |
11 | * Copyright (C) 2014 ARM Limited | |
12 | */ | |
13 | ||
14 | #include <linux/clocksource.h> | |
15 | #include <linux/io.h> | |
16 | #include <linux/of_address.h> | |
17 | #include <linux/sched_clock.h> | |
18 | ||
19 | #define SYS_24MHZ 0x05c | |
20 | ||
21 | static void __iomem *versatile_sys_24mhz; | |
22 | ||
23 | static u32 notrace versatile_sys_24mhz_read(void) | |
24 | { | |
25 | return readl(versatile_sys_24mhz); | |
26 | } | |
27 | ||
28 | static void __init versatile_sched_clock_init(struct device_node *node) | |
29 | { | |
30 | void __iomem *base = of_iomap(node, 0); | |
31 | ||
32 | if (!base) | |
33 | return; | |
34 | ||
35 | versatile_sys_24mhz = base + SYS_24MHZ; | |
36 | ||
37 | setup_sched_clock(versatile_sys_24mhz_read, 32, 24000000); | |
38 | } | |
39 | CLOCKSOURCE_OF_DECLARE(versatile, "arm,vexpress-sysreg", | |
40 | versatile_sched_clock_init); |