• Andrew Klossner's avatar
    powerpc/udbg: Fix lost byte during console handover; change LFCR to CRLF · af9c7249
    Andrew Klossner authored
    When the console is on a serial port to be driven by serial8250, a
    character can be lost from the end of the first line in the two-line
    sequence
    
    	serial8250.0: ttyS0 at MMIO 0xe0004500 (irq = 42) is a 16550A
    	console handover: boot [udbg0] -> real [ttyS0]
    
    This happens because udbg_puts or udbg_write stuff the last byte of
    the line into the Tx FIFO and return, whereupon the serial8250
    initialization code immediately empties that FIFO.  The fix: udbg_puts
    and udbg_write now wait for the Tx FIFO to clear before returning.
    This delays the system by one additional serial frame time for each
    line written by udbg, but the effect is not noticeable, a cumulative
    17 milliseconds for 200 lines of early printk output at 115200 baud.
    
    Also, the routines in udbg_16550.c now emit CRLF instead of LFCR.
    Linux makes a point of emitting CRLF because, when serial output is
    captured to a file, LFCR sequences can confuse text editors.  See
    http://lkml.org/lkml/2006/2/4/50 for some history.
    Signed-off-by: default avatarAndrew Klossner <andrew@cesa.opbu.xerox.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    af9c7249
udbg_16550.c 6.41 KB