| #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 = get_ccount(); | |
| if (i == LOOPS) | |
| a = b; | |
| } while (--i >= 0); | |
| b -= a; | |
| ccount_freq = b * (100000UL / LOOPS); | |
| } |