diff options
Diffstat (limited to 'drivers/tty')
-rw-r--r-- | drivers/tty/serial/uartlite.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c index 5f90ef24d475..dce27f34937e 100644 --- a/drivers/tty/serial/uartlite.c +++ b/drivers/tty/serial/uartlite.c | |||
@@ -418,14 +418,23 @@ static struct uart_ops ulite_ops = { | |||
418 | #ifdef CONFIG_SERIAL_UARTLITE_CONSOLE | 418 | #ifdef CONFIG_SERIAL_UARTLITE_CONSOLE |
419 | static void ulite_console_wait_tx(struct uart_port *port) | 419 | static void ulite_console_wait_tx(struct uart_port *port) |
420 | { | 420 | { |
421 | int i; | ||
422 | u8 val; | 421 | u8 val; |
423 | 422 | unsigned long timeout; | |
424 | /* Spin waiting for TX fifo to have space available */ | 423 | |
425 | for (i = 0; i < 100000; i++) { | 424 | /* |
425 | * Spin waiting for TX fifo to have space available. | ||
426 | * When using the Microblaze Debug Module this can take up to 1s | ||
427 | */ | ||
428 | timeout = jiffies + msecs_to_jiffies(1000); | ||
429 | while (1) { | ||
426 | val = uart_in32(ULITE_STATUS, port); | 430 | val = uart_in32(ULITE_STATUS, port); |
427 | if ((val & ULITE_STATUS_TXFULL) == 0) | 431 | if ((val & ULITE_STATUS_TXFULL) == 0) |
428 | break; | 432 | break; |
433 | if (time_after(jiffies, timeout)) { | ||
434 | dev_warn(port->dev, | ||
435 | "timeout waiting for TX buffer empty\n"); | ||
436 | break; | ||
437 | } | ||
429 | cpu_relax(); | 438 | cpu_relax(); |
430 | } | 439 | } |
431 | } | 440 | } |