|
@@ -0,0 +1,27 @@
|
|
|
+#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));
|
|
|
+}
|