28 lines
		
	
	
	
		
			581 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			28 lines
		
	
	
	
		
			581 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #include <asm/delay.h>
 | ||
|  | #include <asm/timex.h>
 | ||
|  | #include <asm/io.h>
 | ||
|  | #include <variant/hardware.h>
 | ||
|  | 
 | ||
|  | #define LOOPS 10
 | ||
|  | void platform_calibrate_ccount(void) | ||
|  | { | ||
|  | 	u32 uninitialized_var(a); | ||
|  | 	u32 uninitialized_var(u); | ||
|  | 	u32 b; | ||
|  | 	u32 tstamp = S6_REG_GREG1 + S6_GREG1_GLOBAL_TIMER; | ||
|  | 	int i = LOOPS+1; | ||
|  | 	do { | ||
|  | 		u32 t = u; | ||
|  | 		asm volatile( | ||
|  | 		"1:	l32i %0, %2, 0 ;" | ||
|  | 		"	beq %0, %1, 1b ;" | ||
|  | 		: "=&a"(u) : "a"(t), "a"(tstamp)); | ||
|  | 		b = xtensa_get_ccount(); | ||
|  | 		if (i == LOOPS) | ||
|  | 			a = b; | ||
|  | 	} while (--i >= 0); | ||
|  | 	b -= a; | ||
|  | 	nsec_per_ccount = (LOOPS * 10000) / b; | ||
|  | 	ccount_per_jiffy = b * (100000UL / (LOOPS * HZ)); | ||
|  | } |