xref: /openbmc/linux/arch/mips/kernel/csrc-r4k.c (revision b96fc2f3)
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 #include <linux/sched_clock.h>
11 
12 #include <asm/time.h>
13 
14 static cycle_t c0_hpt_read(struct clocksource *cs)
15 {
16 	return read_c0_count();
17 }
18 
19 static struct clocksource clocksource_mips = {
20 	.name		= "MIPS",
21 	.read		= c0_hpt_read,
22 	.mask		= CLOCKSOURCE_MASK(32),
23 	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
24 };
25 
26 static u64 notrace r4k_read_sched_clock(void)
27 {
28 	return read_c0_count();
29 }
30 
31 int __init init_r4k_clocksource(void)
32 {
33 	if (!cpu_has_counter || !mips_hpt_frequency)
34 		return -ENXIO;
35 
36 	/* Calculate a somewhat reasonable rating value */
37 	clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000;
38 
39 	clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
40 
41 	sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
42 
43 	return 0;
44 }
45