Pawel Moll | 220e2a8 | 2014-04-16 18:22:59 +0100 | [diff] [blame] | 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 | |
Thomas Gleixner | 1605abf | 2014-06-04 12:34:15 +0200 | [diff] [blame] | 23 | static u64 notrace versatile_sys_24mhz_read(void) |
Pawel Moll | 220e2a8 | 2014-04-16 18:22:59 +0100 | [diff] [blame] | 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 | |
Thomas Gleixner | 1605abf | 2014-06-04 12:34:15 +0200 | [diff] [blame] | 37 | sched_clock_register(versatile_sys_24mhz_read, 32, 24000000); |
Pawel Moll | 220e2a8 | 2014-04-16 18:22:59 +0100 | [diff] [blame] | 38 | } |
| 39 | CLOCKSOURCE_OF_DECLARE(versatile, "arm,vexpress-sysreg", |
Thomas Gleixner | 1605abf | 2014-06-04 12:34:15 +0200 | [diff] [blame] | 40 | versatile_sched_clock_init); |