diff options
Diffstat (limited to 'arch/parisc/include/asm/delay.h')
| -rw-r--r-- | arch/parisc/include/asm/delay.h | 41 | 
1 files changed, 10 insertions, 31 deletions
diff --git a/arch/parisc/include/asm/delay.h b/arch/parisc/include/asm/delay.h index 7a75e984674..08e58e679e3 100644 --- a/arch/parisc/include/asm/delay.h +++ b/arch/parisc/include/asm/delay.h @@ -1,15 +1,5 @@ -#ifndef _PARISC_DELAY_H -#define _PARISC_DELAY_H - -#include <asm/system.h>    /* for mfctl() */ -#include <asm/processor.h> /* for boot_cpu_data */ - - -/* - * Copyright (C) 1993 Linus Torvalds - * - * Delay routines - */ +#ifndef _ASM_PARISC_DELAY_H +#define _ASM_PARISC_DELAY_H  static __inline__ void __delay(unsigned long loops) {  	asm volatile( @@ -19,25 +9,14 @@ static __inline__ void __delay(unsigned long loops) {  		: "=r" (loops) : "0" (loops));  } -static __inline__ void __cr16_delay(unsigned long clocks) { -	unsigned long start; - -	/* -	 * Note: Due to unsigned math, cr16 rollovers shouldn't be -	 * a problem here. However, on 32 bit, we need to make sure -	 * we don't pass in too big a value. The current default -	 * value of MAX_UDELAY_MS should help prevent this. -	 */ +extern void __udelay(unsigned long usecs); +extern void __udelay_bad(unsigned long usecs); -	start = mfctl(16); -	while ((mfctl(16) - start) < clocks) -	    ; +static inline void udelay(unsigned long usecs) +{ +	if (__builtin_constant_p(usecs) && (usecs) > 20000) +		__udelay_bad(usecs); +	__udelay(usecs);  } -static __inline__ void __udelay(unsigned long usecs) { -	__cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL)); -} - -#define udelay(n) __udelay(n) - -#endif /* defined(_PARISC_DELAY_H) */ +#endif /* _ASM_PARISC_DELAY_H */  | 
