/arch/xtensa/variants/s6000/delay.c

https://bitbucket.org/thekraven/iscream_thunderc-2.6.35 · C · 27 lines · 26 code · 1 blank · 0 comment · 3 complexity · 18c8ab6ef9fca56120a4d30253054c02 MD5 · raw file

  1. #include <asm/delay.h>
  2. #include <asm/timex.h>
  3. #include <asm/io.h>
  4. #include <variant/hardware.h>
  5. #define LOOPS 10
  6. void 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 = xtensa_get_ccount();
  20. if (i == LOOPS)
  21. a = b;
  22. } while (--i >= 0);
  23. b -= a;
  24. nsec_per_ccount = (LOOPS * 10000) / b;
  25. ccount_per_jiffy = b * (100000UL / (LOOPS * HZ));
  26. }