PageRenderTime 44ms CodeModel.GetById 40ms app.highlight 2ms RepoModel.GetById 1ms app.codeStats 0ms

/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
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
 1#include <asm/delay.h>
 2#include <asm/timex.h>
 3#include <asm/io.h>
 4#include <variant/hardware.h>
 5
 6#define LOOPS 10
 7void platform_calibrate_ccount(void)
 8{
 9	u32 uninitialized_var(a);
10	u32 uninitialized_var(u);
11	u32 b;
12	u32 tstamp = S6_REG_GREG1 + S6_GREG1_GLOBAL_TIMER;
13	int i = LOOPS+1;
14	do {
15		u32 t = u;
16		asm volatile(
17		"1:	l32i %0, %2, 0 ;"
18		"	beq %0, %1, 1b ;"
19		: "=&a"(u) : "a"(t), "a"(tstamp));
20		b = xtensa_get_ccount();
21		if (i == LOOPS)
22			a = b;
23	} while (--i >= 0);
24	b -= a;
25	nsec_per_ccount = (LOOPS * 10000) / b;
26	ccount_per_jiffy = b * (100000UL / (LOOPS * HZ));
27}