Skip to content

Commit

Permalink
ARM: ep93xx: Fix wait for UART FIFO to be empty
Browse files Browse the repository at this point in the history
Commit 210dce5 "ARM: ep93xx: properly wait for UART FIFO to be empty"

Removed the timeout loop while waiting for the uart transmit fifo to
empty. Some bootloaders leave the uart in a state where there might
be bytes in the uart that are not transmitted when execution is handed
over to the kernel. This results in a deadlocked system while waiting
for the fifo to empty.

Add back the timeout wait to prevent the deadlock.

Increase the wait time to hopefully prevent the decompressor corruption
that lead to commit 210dce5. This corruption was probably due to a
slow uart baudrate. The 10* increase in the wait time should be enough
for all cases.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Acked-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Ryan Mallon <rmallon@gmail.com>
  • Loading branch information
H Hartley Sweeten authored and Ryan Mallon committed Mar 17, 2013
1 parent 6dbe51c commit 605c357
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions arch/arm/mach-ep93xx/include/mach/uncompress.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@ static void __raw_writel(unsigned int value, unsigned int ptr)

static inline void putc(int c)
{
/* Transmit fifo not full? */
while (__raw_readb(PHYS_UART_FLAG) & UART_FLAG_TXFF)
;
int i;

for (i = 0; i < 10000; i++) {
/* Transmit fifo not full? */
if (!(__raw_readb(PHYS_UART_FLAG) & UART_FLAG_TXFF))
break;
}

__raw_writeb(c, PHYS_UART_DATA);
}
Expand Down

0 comments on commit 605c357

Please sign in to comment.