aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clocksource')
-rw-r--r--drivers/clocksource/Kconfig11
-rw-r--r--drivers/clocksource/Makefile1
-rw-r--r--drivers/clocksource/versatile.c40
3 files changed, 52 insertions, 0 deletions
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 96918e1f26a3..2c27b02f0860 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -191,3 +191,14 @@ config EM_TIMER_STI
191 191
192config CLKSRC_QCOM 192config CLKSRC_QCOM
193 bool 193 bool
194
195config CLKSRC_VERSATILE
196 bool "ARM Versatile (Express) reference platforms clock source"
197 depends on GENERIC_SCHED_CLOCK
198 select CLKSRC_OF
199 default y if MFD_VEXPRESS_SYSREG
200 help
201 This option enables clock source based on free running
202 counter available in the "System Registers" block of
203 ARM Versatile, RealView and Versatile Express reference
204 platforms.
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index 98cb6c51aa87..6f25bdffc176 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_ARM_GLOBAL_TIMER) += arm_global_timer.o
39obj-$(CONFIG_CLKSRC_METAG_GENERIC) += metag_generic.o 39obj-$(CONFIG_CLKSRC_METAG_GENERIC) += metag_generic.o
40obj-$(CONFIG_ARCH_HAS_TICK_BROADCAST) += dummy_timer.o 40obj-$(CONFIG_ARCH_HAS_TICK_BROADCAST) += dummy_timer.o
41obj-$(CONFIG_ARCH_KEYSTONE) += timer-keystone.o 41obj-$(CONFIG_ARCH_KEYSTONE) += timer-keystone.o
42obj-$(CONFIG_CLKSRC_VERSATILE) += versatile.o
diff --git a/drivers/clocksource/versatile.c b/drivers/clocksource/versatile.c
new file mode 100644
index 000000000000..e4c50ad2f9d9
--- /dev/null
+++ b/drivers/clocksource/versatile.c
@@ -0,0 +1,40 @@
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
21static void __iomem *versatile_sys_24mhz;
22
23static u32 notrace versatile_sys_24mhz_read(void)
24{
25 return readl(versatile_sys_24mhz);
26}
27
28static 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}
39CLOCKSOURCE_OF_DECLARE(versatile, "arm,vexpress-sysreg",
40 versatile_sched_clock_init);