linux/arch/xtensa/variants/s6000/delay.c
<<
>>
Prefs
   1#include <asm/timex.h>
   2#include <asm/io.h>
   3#include <variant/hardware.h>
   4
   5#define LOOPS 10
   6void platform_calibrate_ccount(void)
   7{
   8        u32 uninitialized_var(a);
   9        u32 uninitialized_var(u);
  10        u32 b;
  11        u32 tstamp = S6_REG_GREG1 + S6_GREG1_GLOBAL_TIMER;
  12        int i = LOOPS+1;
  13        do {
  14                u32 t = u;
  15                asm volatile(
  16                "1:     l32i %0, %2, 0 ;"
  17                "       beq %0, %1, 1b ;"
  18                : "=&a"(u) : "a"(t), "a"(tstamp));
  19                b = get_ccount();
  20                if (i == LOOPS)
  21                        a = b;
  22        } while (--i >= 0);
  23        b -= a;
  24        ccount_freq = b * (100000UL / LOOPS);
  25}
  26