no, i use set these options :
VGA_CONSOLE = 0
PC_KEYBOARD = 0

this is ok, the same problem of peter fox. I used the modified timer.c for 
filo (don't use rdtsc in filo because it's a 486) and now it works.

if someone need it, i join it.

> is your filo trying to use VGA? make sure that it is only trying to use
> the serial port.
>
> ron
#include <arch/timer.h>
#include <arch/io.h>

static void load_timer2(unsigned int ticks)
{
	/* Set up the timer gate, turn off the speaker */
	outb((inb(PPC_PORTB) & ~PPCB_SPKR) | PPCB_T2GATE, PPC_PORTB);
	outb(TIMER2_SEL|WORD_ACCESS|MODE0|BINARY_COUNT, TIMER_MODE_PORT);
	outb(ticks & 0xFF, TIMER2_PORT);
	outb(ticks >> 8, TIMER2_PORT);
}

void setup_timers(void)
{
}

void udelay(unsigned int usecs)
{
	load_timer2((usecs*TICKS_PER_MS)/1000);
	while ((inb(PPC_PORTB) & PPCB_T2OUT) == 0)
		;
}

void ndelay(unsigned int nsecs)
{
  udelay((nsecs+999)/1000);
}

void mdelay(unsigned int msecs)
{
  udelay(msecs*1000);
}

unsigned long currticks(void)
{
	static unsigned long totticks = 0UL; /* High resolution */
	unsigned long ticks = 0;
	unsigned char portb = inb(PPC_PORTB);
	/* Read the timer, and hope it hasn't wrapped around (call
	   this again within 54ms), then restart it */
	outb(TIMER2_SEL|LATCH_COUNT, TIMER_MODE_PORT);
	ticks = inb(TIMER2_PORT);
	ticks |= inb(TIMER2_PORT) << 8;
	outb(TIMER2_SEL|WORD_ACCESS|MODE0|BINARY_COUNT, TIMER_MODE_PORT);
	outb(0, TIMER2_PORT);
	outb(0, TIMER2_PORT);
	/* Check if the timer was running, if not, result is rubbish and need to start it */
	if(portb & PPCB_T2GATE)
	{
		totticks += (0x10000 - ticks);
	}
	else
	{
		/* Set up the timer gate, turn off the speaker */
		outb((portb & ~PPCB_SPKR) | PPCB_T2GATE, PPC_PORTB);
	}
	return totticks/TICKS_PER_MS;
}

Reply via email to