We're working on bringing up linuxbios on the epia-sp. We found the serial output is locking up strangely in a busy wait within src/pc80/serial.c:
static void uart_tx_byte(unsigned char data) { uart_wait_to_tx_byte(); // this one causes trouble outb(data, TTYS0_BASE + UART_TBR); /* Make certain the data clears the fifos */ uart_wait_until_sent(); }
If the uart_wait_to_tx_byte() call is removed, there is no lockup on serial output.
The lockup on serial output always occurs in the same place, based on whatever would be printed. It's not random at all across reboots, however it is fairly random as regards code changes. That is, if you have a loop that prints stuff out, then try to print out some other stuff, somewhere along the line it will lock up during printing. Where it locks up is always the same place in the serial output stream, provided the code remains unchainged.
The uart is inside the VT1211 superio device. Does anyone have any clue as to why this is locking up.
As a workaround we've just commented out the uart_wait_to_tx_byte() for now, but that's nonstandard and might break other things. We are not yet checking in any code.
Thanks for any advice/ideas.