2014-04-16 21:22:59 +04:00
/*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* Copyright ( C ) 2014 ARM Limited
*/
# include <linux/clocksource.h>
# include <linux/io.h>
# include <linux/of_address.h>
# include <linux/sched_clock.h>
# define SYS_24MHZ 0x05c
static void __iomem * versatile_sys_24mhz ;
2014-06-04 14:34:15 +04:00
static u64 notrace versatile_sys_24mhz_read ( void )
2014-04-16 21:22:59 +04:00
{
return readl ( versatile_sys_24mhz ) ;
}
2016-06-07 00:29:30 +03:00
static int __init versatile_sched_clock_init ( struct device_node * node )
2014-04-16 21:22:59 +04:00
{
void __iomem * base = of_iomap ( node , 0 ) ;
if ( ! base )
2016-06-07 00:29:30 +03:00
return - ENXIO ;
2014-04-16 21:22:59 +04:00
versatile_sys_24mhz = base + SYS_24MHZ ;
2014-06-04 14:34:15 +04:00
sched_clock_register ( versatile_sys_24mhz_read , 32 , 24000000 ) ;
2016-06-07 00:29:30 +03:00
return 0 ;
2014-04-16 21:22:59 +04:00
}
2016-06-07 01:27:44 +03:00
CLOCKSOURCE_OF_DECLARE ( vexpress , " arm,vexpress-sysreg " ,
2015-01-28 20:56:31 +03:00
versatile_sched_clock_init ) ;
2016-06-07 01:27:44 +03:00
CLOCKSOURCE_OF_DECLARE ( versatile , " arm,versatile-sysreg " ,
2014-06-04 14:34:15 +04:00
versatile_sched_clock_init ) ;