]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - arch/riscv/include/asm/timex.h
Merge remote-tracking branches 'spi/fix/armada', 'spi/fix/atmel', 'spi/fix/doc',...
[mirror_ubuntu-hirsute-kernel.git] / arch / riscv / include / asm / timex.h
CommitLineData
6d60b6ee
PD
1/*
2 * Copyright (C) 2012 Regents of the University of California
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation, version 2.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#ifndef _ASM_RISCV_TIMEX_H
15#define _ASM_RISCV_TIMEX_H
16
17#include <asm/param.h>
18
19typedef unsigned long cycles_t;
20
4a41d5db 21static inline cycles_t get_cycles_inline(void)
6d60b6ee
PD
22{
23 cycles_t n;
24
25 __asm__ __volatile__ (
26 "rdtime %0"
27 : "=r" (n));
28 return n;
29}
4a41d5db 30#define get_cycles get_cycles_inline
6d60b6ee
PD
31
32#ifdef CONFIG_64BIT
33static inline uint64_t get_cycles64(void)
34{
35 return get_cycles();
36}
37#else
38static inline uint64_t get_cycles64(void)
39{
40 u32 lo, hi, tmp;
41 __asm__ __volatile__ (
42 "1:\n"
43 "rdtimeh %0\n"
44 "rdtime %1\n"
45 "rdtimeh %2\n"
46 "bne %0, %2, 1b"
47 : "=&r" (hi), "=&r" (lo), "=&r" (tmp));
48 return ((u64)hi << 32) | lo;
49}
50#endif
51
52#define ARCH_HAS_READ_CURRENT_TIMER
53
54static inline int read_current_timer(unsigned long *timer_val)
55{
56 *timer_val = get_cycles();
57 return 0;
58}
59
60#endif /* _ASM_RISCV_TIMEX_H */