1 /*
2  * Copyright 2024 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include "fsl_common.h"
9 
10 /* Component ID definition, used by tools. */
11 #ifndef FSL_COMPONENT_ID
12 #define FSL_COMPONENT_ID "platform.drivers.common_riscv"
13 #endif
14 
DelayLoop(uint32_t count)15 static void DelayLoop(uint32_t count)
16 {
17     __ASM volatile(
18         "    mv     a0, %0              \n"
19         "loop%=:                        \n"
20         "    addi   a0, a0, -1          \n"
21         "    bgtz   a0, loop%=          \n"
22         :
23         : "r"(count)
24         :);
25 }
26 
SDK_DelayAtLeastUs(uint32_t delayTime_us,uint32_t coreClock_Hz)27 void SDK_DelayAtLeastUs(uint32_t delayTime_us, uint32_t coreClock_Hz)
28 {
29     uint64_t count;
30 
31     if (delayTime_us > 0U)
32     {
33         count = USEC_TO_COUNT(delayTime_us, coreClock_Hz);
34 
35         assert(count <= UINT32_MAX);
36 
37         /*
38          * Add is 1 cycle.
39          * Branch is 2 cycle.
40          */
41         count = count / 3U;
42 
43         DelayLoop((uint32_t)count);
44     }
45 }
46