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 14static cycle_t c0_hpt_read(struct clocksource *cs) 15{ 16 return read_c0_count(); 17} 18 19static 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 26static u64 notrace r4k_read_sched_clock(void) 27{ 28 return read_c0_count(); 29} 30 31int __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