xref: /kvm-unit-tests/lib/riscv/delay.c (revision a1418d6dbe810aded6885366cc6e782caa21a2cc)
1*93bcbb09SJames Raphael Tiovalen // SPDX-License-Identifier: GPL-2.0-only
2*93bcbb09SJames Raphael Tiovalen /*
3*93bcbb09SJames Raphael Tiovalen  * Copyright (C) 2024, James Raphael Tiovalen <jamestiotio@gmail.com>
4*93bcbb09SJames Raphael Tiovalen  */
5*93bcbb09SJames Raphael Tiovalen #include <libcflat.h>
6*93bcbb09SJames Raphael Tiovalen #include <asm/barrier.h>
7*93bcbb09SJames Raphael Tiovalen #include <asm/delay.h>
8*93bcbb09SJames Raphael Tiovalen #include <asm/timer.h>
9*93bcbb09SJames Raphael Tiovalen 
delay(uint64_t cycles)10*93bcbb09SJames Raphael Tiovalen void delay(uint64_t cycles)
11*93bcbb09SJames Raphael Tiovalen {
12*93bcbb09SJames Raphael Tiovalen 	uint64_t start = timer_get_cycles();
13*93bcbb09SJames Raphael Tiovalen 
14*93bcbb09SJames Raphael Tiovalen 	while ((timer_get_cycles() - start) < cycles)
15*93bcbb09SJames Raphael Tiovalen 		cpu_relax();
16*93bcbb09SJames Raphael Tiovalen }
17*93bcbb09SJames Raphael Tiovalen 
udelay(unsigned long usecs)18*93bcbb09SJames Raphael Tiovalen void udelay(unsigned long usecs)
19*93bcbb09SJames Raphael Tiovalen {
20*93bcbb09SJames Raphael Tiovalen 	delay(usec_to_cycles((uint64_t)usecs));
21*93bcbb09SJames Raphael Tiovalen }
22