f6d12eefcd
Each CPU has it's own Control Register 16 (CR16) which is used as time source for the udelay() function. But since the CR16 registers across different CPUs are not synced, we need to recalculate the loop count if we get switched away to ensure that we really delay as much time as requested. Signed-off-by: Helge Deller <deller@gmx.de>
22 lines
494 B
C
22 lines
494 B
C
#ifndef _ASM_PARISC_DELAY_H
|
|
#define _ASM_PARISC_DELAY_H
|
|
|
|
static __inline__ void __delay(unsigned long loops) {
|
|
asm volatile(
|
|
" .balignl 64,0x34000034\n"
|
|
" addib,UV -1,%0,.\n"
|
|
" nop\n"
|
|
: "=r" (loops) : "0" (loops));
|
|
}
|
|
|
|
extern void __udelay(unsigned long usecs);
|
|
extern void __udelay_bad(unsigned long usecs);
|
|
|
|
static inline void udelay(unsigned long usecs)
|
|
{
|
|
if (__builtin_constant_p(usecs) && (usecs) > 20000)
|
|
__udelay_bad(usecs);
|
|
__udelay(usecs);
|
|
}
|
|
|
|
#endif /* _ASM_PARISC_DELAY_H */
|