#include #include #include #include #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)); }