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 u64 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 sched_clock_register(versatile_sys_24mhz_read, 32, 24000000); 38} 39CLOCKSOURCE_OF_DECLARE(vexpress, "arm,vexpress-sysreg", 40 versatile_sched_clock_init); 41CLOCKSOURCE_OF_DECLARE(versatile, "arm,versatile-sysreg", 42 versatile_sched_clock_init); 43