diff options
author | Jesper Nilsson <jesper.nilsson@axis.com> | 2008-01-25 17:31:38 +0100 |
---|---|---|
committer | Jesper Nilsson <jesper.nilsson@axis.com> | 2008-02-08 11:06:35 +0100 |
commit | 48c87a4483d9146d9f23198163d6ee621535702d (patch) | |
tree | 1499bd32160b41a5524ee8b44adf41df35fa37ba | |
parent | a474de0a02ee9093af96414a30f69d433201d002 (diff) |
CRIS v32: Add precise delay loops for ETRAX FS and ARTPEC-3.
Implements cris_delay10ns.
-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 @@ +/* + * Precise Delay Loops for ETRAX FS + * + * Copyright (C) 2006 Axis Communications AB. + * + */ + +#include <hwregs/reg_map.h> +#include <hwregs/reg_rdwr.h> +#include <hwregs/timer_defs.h> +#include <linux/types.h> +#include <linux/delay.h> +#include <linux/module.h> + +/* + * On ETRAX FS, we can check the free-running read-only 100MHz timer + * getting 32-bit 10ns precision, theoretically good for 42.94967295 + * seconds. Unsigned arithmetic and careful expression handles + * wrapping. + */ + +void cris_delay10ns(u32 n10ns) +{ + u32 t0 = REG_RD(timer, regi_timer0, r_time); + while (REG_RD(timer, regi_timer0, r_time) - t0 < n10ns) + ; +} +EXPORT_SYMBOL(cris_delay10ns); |