162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ARM simple delay routines 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef SELFTEST_KVM_ARM_DELAY_H 762306a36Sopenharmony_ci#define SELFTEST_KVM_ARM_DELAY_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "arch_timer.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_cistatic inline void __delay(uint64_t cycles) 1262306a36Sopenharmony_ci{ 1362306a36Sopenharmony_ci enum arch_timer timer = VIRTUAL; 1462306a36Sopenharmony_ci uint64_t start = timer_get_cntct(timer); 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci while ((timer_get_cntct(timer) - start) < cycles) 1762306a36Sopenharmony_ci cpu_relax(); 1862306a36Sopenharmony_ci} 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic inline void udelay(unsigned long usec) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci __delay(usec_to_cycles(usec)); 2362306a36Sopenharmony_ci} 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#endif /* SELFTEST_KVM_ARM_DELAY_H */ 26