 db8c1ee9d0
			
		
	
	
		db8c1ee9d0
		
	
	
	
	
		
			
			The Cycle CouNTer on ARM cannot be used reliably as it wraps around rather quickly and can be altered by user space (on Minix). Furthermore, it's buggy when wrapping and is not implemented at all on the Linaro Beagleboard emulator. This patch programs GPTIMER10 as a free running clock at 1.625 MHz (it doesn't generate interrupts). It's memory mapped into every process, which enables libsys to provide micro_delay(). Change-Id: Iba004c6c62976762fe154ea390d69e518eec1531
		
			
				
	
	
		
			36 lines
		
	
	
		
			657 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			657 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| #include <stdio.h>
 | |
| #include <time.h>
 | |
| #include <sys/times.h>
 | |
| #include <sys/types.h>
 | |
| #include <minix/u64.h>
 | |
| #include <minix/config.h>
 | |
| #include <minix/const.h>
 | |
| #include <minix/minlib.h>
 | |
| #include <machine/archtypes.h>
 | |
| 
 | |
| #include "sysutil.h"
 | |
| 
 | |
| #ifndef CONFIG_MAX_CPUS
 | |
| #define CONFIG_MAX_CPUS 1
 | |
| #endif
 | |
| 
 | |
| #define MICROHZ		1000000		/* number of micros per second */
 | |
| #define MICROSPERTICK(h)	(MICROHZ/(h))	/* number of micros per HZ tick */
 | |
| 
 | |
| static u32_t calib_hz = 600000000;
 | |
| 
 | |
| u32_t tsc_64_to_micros(u64_t tsc)
 | |
| {
 | |
| 	u64_t tmp;
 | |
| 
 | |
| 	tmp =  tsc / calib_hz;
 | |
| 	return (u32_t) tmp;
 | |
| }
 | |
| 
 | |
| u32_t tsc_to_micros(u32_t low, u32_t high)
 | |
| {
 | |
| 	return tsc_64_to_micros(make64(low, high));
 | |
| }
 | |
| 
 |