X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fserial%2Fuartlite.c;h=3f593247c41e0d5e9b255720506bd2da2b872249;hb=444ad82bc3eaa554be40d22dc248e58aeefd54d9;hp=dfef83f14960d58de1c9ac7eb793f4aa105dcc72;hpb=4fa435018d740cb83d74c92306aa1f796da91ddd;p=linux-2.6 diff --git a/drivers/serial/uartlite.c b/drivers/serial/uartlite.c index dfef83f149..3f593247c4 100644 --- a/drivers/serial/uartlite.c +++ b/drivers/serial/uartlite.c @@ -329,12 +329,14 @@ static struct uart_ops ulite_ops = { static void ulite_console_wait_tx(struct uart_port *port) { int i; + u8 val; - /* wait up to 10ms for the character(s) to be sent */ - for (i = 0; i < 10000; i++) { - if (readb(port->membase + ULITE_STATUS) & ULITE_STATUS_TXEMPTY) + /* Spin waiting for TX fifo to have space available */ + for (i = 0; i < 100000; i++) { + val = readb(port->membase + ULITE_STATUS); + if ((val & ULITE_STATUS_TXFULL) == 0) break; - udelay(1); + cpu_relax(); } } @@ -391,6 +393,7 @@ static inline void __init ulite_console_of_find_device(int id) continue; ulite_ports[id].mapbase = res.start; + of_node_put(np); return; } }