// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2018, Anup Patel * Copyright (C) 2018, Bin Meng * * The riscv_get_time() API implementation that is using the * standard rdtime instruction. */ #include /* 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; }