On 16 Jun 2014, at 08:28, Michael Tuexen <tue...@freebsd.org> wrote: > your patch for accessing the value is correct. However, the initialisation > code also > needs to be adopted to the platform. So in addition to your patch, you also > need:
Thanks! > Is there an easy test to see if the code actually works as expected and not > that it just > allows the system to boot? Yes. :-) #include <sys/types.h> #include <stdio.h> static __inline uint64_t get_cyclecount(void) { uint32_t ccnt; uint64_t tsc; /* Read CCNT. */ __asm __volatile("mrc p15, 0, %0, c15, c12, 1": "=r" (ccnt)); tsc = (uint64_t)ccnt; return (tsc); } #define N 100000 int main(int argc, char *argv[]) { int i; uint64_t ccnt[N]; for (i = 0; i < N; i++) ccnt[i] = get_cyclecount(); for (i = 1; i < N; i++) printf("%6d %016llX %16llu\n", i, ccnt[i], ccnt[i] - ccnt[i - 1]); return (0); } Should print a whole lotta numbers, incrementing, unless you hit the wraparound. > Regarding the 32-bit limitation: Do we want to increment the register only > every > 64 clock cycle? Definitely not! The value is in the low bits; wrap is of little consequence. M -- Mark R V Murray _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"