1234567891011121314151617181920212223242526272829303132333435363738 |
- // SPDX-License-Identifier: GPL-2.0+
- /*
- * Copyright (C) 2018, Anup Patel <anup@brainfault.org>
- * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
- *
- * The riscv_get_time() API implementation that is using the
- * standard rdtime instruction.
- */
- #include <common.h>
- /* Implement the API required by RISC-V timer driver */
- int riscv_get_time(u64 *time)
- {
- #ifdef CONFIG_64BIT
- u64 n;
- __asm__ __volatile__ (
- "rdtime %0"
- : "=r" (n));
- *time = n;
- #else
- 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));
- *time = ((u64)hi << 32) | lo;
- #endif
- return 0;
- }
|