12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /*
- * Copyright (C) 2012 Regents of the University of California
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, version 2.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #ifndef _ASM_RISCV_TIMEX_H
- #define _ASM_RISCV_TIMEX_H
- #include <asm/param.h>
- typedef unsigned long cycles_t;
- static inline cycles_t get_cycles_inline(void)
- {
- cycles_t n;
- __asm__ __volatile__ (
- "rdtime %0"
- : "=r" (n));
- return n;
- }
- #define get_cycles get_cycles_inline
- #ifdef CONFIG_64BIT
- static inline uint64_t get_cycles64(void)
- {
- return get_cycles();
- }
- #else
- static inline uint64_t get_cycles64(void)
- {
- u32 lo, hi, tmp;
- __asm__ __volatile__ (
- "1:\n"
- "rdtimeh %0\n"
- "rdtime %1\n"
- "rdtimeh %2\n"
- "bne %0, %2, 1b"
- : "=&r" (hi), "=&r" (lo), "=&r" (tmp));
- return ((u64)hi << 32) | lo;
- }
- #endif
- #define ARCH_HAS_READ_CURRENT_TIMER
- static inline int read_current_timer(unsigned long *timer_val)
- {
- *timer_val = get_cycles();
- return 0;
- }
- #endif /* _ASM_RISCV_TIMEX_H */
|