time.h (1085B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 4 */ 5#ifndef _ASM_TIME_H 6#define _ASM_TIME_H 7 8#include <linux/clockchips.h> 9#include <linux/clocksource.h> 10#include <asm/loongarch.h> 11 12extern u64 cpu_clock_freq; 13extern u64 const_clock_freq; 14 15extern void sync_counter(void); 16 17static inline unsigned int calc_const_freq(void) 18{ 19 unsigned int res; 20 unsigned int base_freq; 21 unsigned int cfm, cfd; 22 23 res = read_cpucfg(LOONGARCH_CPUCFG2); 24 if (!(res & CPUCFG2_LLFTP)) 25 return 0; 26 27 base_freq = read_cpucfg(LOONGARCH_CPUCFG4); 28 res = read_cpucfg(LOONGARCH_CPUCFG5); 29 cfm = res & 0xffff; 30 cfd = (res >> 16) & 0xffff; 31 32 if (!base_freq || !cfm || !cfd) 33 return 0; 34 35 return (base_freq * cfm / cfd); 36} 37 38/* 39 * Initialize the calling CPU's timer interrupt as clockevent device 40 */ 41extern int constant_clockevent_init(void); 42extern int constant_clocksource_init(void); 43 44static inline void clockevent_set_clock(struct clock_event_device *cd, 45 unsigned int clock) 46{ 47 clockevents_calc_mult_shift(cd, clock, 4); 48} 49 50#endif /* _ASM_TIME_H */