]>
Commit | Line | Data |
---|---|---|
6cb142fa | 1 | /* |
a187559e | 2 | * U-Boot - delay.h Routines for introducing delays |
6cb142fa | 3 | * |
155fd766 | 4 | * Copyright (c) 2005-2007 Analog Devices Inc. |
6cb142fa | 5 | * |
1a459660 | 6 | * SPDX-License-Identifier: GPL-2.0+ |
6cb142fa WD |
7 | */ |
8 | ||
9 | #ifndef _BLACKFIN_DELAY_H | |
10 | #define _BLACKFIN_DELAY_H | |
11 | ||
12 | /* | |
13 | * Changes made by akbar.hussain@Lineo.com, for BLACKFIN | |
14 | * Copyright (C) 1994 Hamish Macdonald | |
15 | * | |
16 | * Delay routines, using a pre-computed "loops_per_second" value. | |
17 | */ | |
18 | ||
44d0677a | 19 | static __inline__ void __delay(unsigned long loops) |
6cb142fa WD |
20 | { |
21 | __asm__ __volatile__("1:\t%0 += -1;\n\t" | |
3f0606ad AL |
22 | "cc = %0 == 0;\n\t" |
23 | "if ! cc jump 1b;\n":"=d"(loops) | |
24 | :"0"(loops)); | |
6cb142fa WD |
25 | } |
26 | ||
27 | /* | |
28 | * Use only for very small delays ( < 1 msec). Should probably use a | |
29 | * lookup table, really, as the multiplications take much too long with | |
30 | * short delays. This is a "reasonable" implementation, though (and the | |
31 | * first constant multiplications gets optimized away if the delay is | |
32 | * a constant) | |
33 | */ | |
44d0677a | 34 | static __inline__ void __udelay(unsigned long usecs) |
6cb142fa WD |
35 | { |
36 | __delay(usecs); | |
37 | } | |
38 | ||
39 | #endif |