2005-07-27 20:44:44 +02:00
|
|
|
#ifndef _ASM_CRIS_ARCH_DELAY_H
|
|
|
|
#define _ASM_CRIS_ARCH_DELAY_H
|
|
|
|
|
2008-01-28 16:54:51 +01:00
|
|
|
extern void cris_delay10ns(u32 n10ns);
|
|
|
|
#define udelay(u) cris_delay10ns((u)*100)
|
|
|
|
#define ndelay(n) cris_delay10ns(((n)+9)/10)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Not used anymore for udelay or ndelay. Referenced by
|
|
|
|
* e.g. init/calibrate.c. All other references are likely bugs;
|
|
|
|
* should be replaced by mdelay, udelay or ndelay.
|
|
|
|
*/
|
|
|
|
|
2005-11-07 09:58:44 +01:00
|
|
|
static inline void
|
2005-07-27 20:44:44 +02:00
|
|
|
__delay(int loops)
|
|
|
|
{
|
|
|
|
__asm__ __volatile__ (
|
|
|
|
"move.d %0, $r9\n\t"
|
|
|
|
"beq 2f\n\t"
|
|
|
|
"subq 1, $r9\n\t"
|
|
|
|
"1:\n\t"
|
|
|
|
"bne 1b\n\t"
|
|
|
|
"subq 1, $r9\n"
|
|
|
|
"2:"
|
|
|
|
: : "g" (loops) : "r9");
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* _ASM_CRIS_ARCH_DELAY_H */
|