diff options
Diffstat (limited to 'arch/cris/arch-v32/lib/delay.c')
-rw-r--r-- | arch/cris/arch-v32/lib/delay.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/cris/arch-v32/lib/delay.c b/arch/cris/arch-v32/lib/delay.c new file mode 100644 index 000000000000..39f1ac9995b4 --- /dev/null +++ b/arch/cris/arch-v32/lib/delay.c | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * Precise Delay Loops for ETRAX FS | ||
3 | * | ||
4 | * Copyright (C) 2006 Axis Communications AB. | ||
5 | * | ||
6 | */ | ||
7 | |||
8 | #include <hwregs/reg_map.h> | ||
9 | #include <hwregs/reg_rdwr.h> | ||
10 | #include <hwregs/timer_defs.h> | ||
11 | #include <linux/types.h> | ||
12 | #include <linux/delay.h> | ||
13 | #include <linux/module.h> | ||
14 | |||
15 | /* | ||
16 | * On ETRAX FS, we can check the free-running read-only 100MHz timer | ||
17 | * getting 32-bit 10ns precision, theoretically good for 42.94967295 | ||
18 | * seconds. Unsigned arithmetic and careful expression handles | ||
19 | * wrapping. | ||
20 | */ | ||
21 | |||
22 | void cris_delay10ns(u32 n10ns) | ||
23 | { | ||
24 | u32 t0 = REG_RD(timer, regi_timer0, r_time); | ||
25 | while (REG_RD(timer, regi_timer0, r_time) - t0 < n10ns) | ||
26 | ; | ||
27 | } | ||
28 | EXPORT_SYMBOL(cris_delay10ns); | ||