diff options
| author | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2013-05-30 14:45:06 +0200 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2013-05-30 14:45:06 +0200 | 
| commit | a19b0dd62d7b8efc658fa1aa685ff5665878f3ee (patch) | |
| tree | 1fadf0fb3da83203ba28f209ec99e1b33e03f4d5 /arch/x86/lib/pcat_timer.c | |
| parent | 60985bba58e7695dac1fddae8cdbb62d8cfd1254 (diff) | |
| parent | a71d45d706a5b51c348160163b6c159632273fed (diff) | |
| download | olio-uboot-2014.01-a19b0dd62d7b8efc658fa1aa685ff5665878f3ee.tar.xz olio-uboot-2014.01-a19b0dd62d7b8efc658fa1aa685ff5665878f3ee.zip | |
Merge branch 'u-boot/master' into 'u-boot-arm/master'
Conflicts:
	common/cmd_fpga.c
	drivers/usb/host/ohci-at91.c
Diffstat (limited to 'arch/x86/lib/pcat_timer.c')
| -rw-r--r-- | arch/x86/lib/pcat_timer.c | 69 | 
1 files changed, 3 insertions, 66 deletions
| diff --git a/arch/x86/lib/pcat_timer.c b/arch/x86/lib/pcat_timer.c index b0b6637f3..1ca3eb9e9 100644 --- a/arch/x86/lib/pcat_timer.c +++ b/arch/x86/lib/pcat_timer.c @@ -24,83 +24,20 @@  #include <common.h>  #include <asm/io.h>  #include <asm/i8254.h> -#include <asm/ibmpc.h> -#include <asm/interrupt.h> -#define TIMER0_VALUE 0x04aa /* 1kHz 1.9318MHz / 1000 */  #define TIMER2_VALUE 0x0a8e /* 440Hz */ -static int timer_init_done; - -int timer_init(void) +int pcat_timer_init(void)  { -	/* initialize timer 0 and 2 -	 * -	 * Timer 0 is used to increment system_tick 1000 times/sec -	 * Timer 1 was used for DRAM refresh in early PC's -	 * Timer 2 is used to drive the speaker +	/* +	 * initialize 2, used to drive the speaker  	 * (to start a beep: write 3 to port 0x61,  	 * to stop it again: write 0)  	 */ -	outb(PIT_CMD_CTR0 | PIT_CMD_BOTH | PIT_CMD_MODE2, -			PIT_BASE + PIT_COMMAND); -	outb(TIMER0_VALUE & 0xff, PIT_BASE + PIT_T0); -	outb(TIMER0_VALUE >> 8, PIT_BASE + PIT_T0); -  	outb(PIT_CMD_CTR2 | PIT_CMD_BOTH | PIT_CMD_MODE3,  			PIT_BASE + PIT_COMMAND);  	outb(TIMER2_VALUE & 0xff, PIT_BASE + PIT_T2);  	outb(TIMER2_VALUE >> 8, PIT_BASE + PIT_T2); -	irq_install_handler(0, timer_isr, NULL); -	unmask_irq(0); - -	timer_init_done = 1; -  	return 0;  } - -static u16 read_pit(void) -{ -	u8 low; - -	outb(PIT_CMD_LATCH, PIT_BASE + PIT_COMMAND); -	low = inb(PIT_BASE + PIT_T0); - -	return (inb(PIT_BASE + PIT_T0) << 8) | low; -} - -/* this is not very exact */ -void __udelay(unsigned long usec) -{ -	int counter; -	int wraps; - -	if (timer_init_done) { -		counter = read_pit(); -		wraps = usec / 1000; -		usec = usec % 1000; - -		usec *= 1194; -		usec /= 1000; -		usec += counter; - -		while (usec > 1194) { -			usec -= 1194; -			wraps++; -		} - -		while (1) { -			int new_count = read_pit(); - -			if (((new_count < usec) && !wraps) || wraps < 0) -				break; - -			if (new_count > counter) -				wraps--; - -			counter = new_count; -		} -	} - -} |