|
@@ -418,14 +418,23 @@ static struct uart_ops ulite_ops = {
|
|
|
#ifdef CONFIG_SERIAL_UARTLITE_CONSOLE
|
|
|
static void ulite_console_wait_tx(struct uart_port *port)
|
|
|
{
|
|
|
- int i;
|
|
|
u8 val;
|
|
|
-
|
|
|
- /* Spin waiting for TX fifo to have space available */
|
|
|
- for (i = 0; i < 100000; i++) {
|
|
|
+ unsigned long timeout;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Spin waiting for TX fifo to have space available.
|
|
|
+ * When using the Microblaze Debug Module this can take up to 1s
|
|
|
+ */
|
|
|
+ timeout = jiffies + msecs_to_jiffies(1000);
|
|
|
+ while (1) {
|
|
|
val = uart_in32(ULITE_STATUS, port);
|
|
|
if ((val & ULITE_STATUS_TXFULL) == 0)
|
|
|
break;
|
|
|
+ if (time_after(jiffies, timeout)) {
|
|
|
+ dev_warn(port->dev,
|
|
|
+ "timeout waiting for TX buffer empty\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
cpu_relax();
|
|
|
}
|
|
|
}
|