 f6d12eefcd
			
		
	
	
	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 */
 |