1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2007 by Ralf Baechle
7  */
8 #include <linux/clocksource.h>
9 #include <linux/init.h>
10 
11 #include <asm/time.h>
12 
c0_hpt_read(struct clocksource * cs)13 static cycle_t c0_hpt_read(struct clocksource *cs)
14 {
15 	return read_c0_count();
16 }
17 
18 static struct clocksource clocksource_mips = {
19 	.name		= "MIPS",
20 	.read		= c0_hpt_read,
21 	.mask		= CLOCKSOURCE_MASK(32),
22 	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
23 };
24 
init_r4k_clocksource(void)25 int __init init_r4k_clocksource(void)
26 {
27 	if (!cpu_has_counter || !mips_hpt_frequency)
28 		return -ENXIO;
29 
30 	/* Calculate a somewhat reasonable rating value */
31 	clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000;
32 
33 	clocksource_set_clock(&clocksource_mips, mips_hpt_frequency);
34 
35 	clocksource_register(&clocksource_mips);
36 
37 	return 0;
38 }
39