Skip to content
  • Mauro Carvalho Chehab's avatar
    8250: fix boot hang with serial console when using with Serial Over Lan port · b6adea33
    Mauro Carvalho Chehab authored
    Intel 8257x Ethernet boards have a feature called Serial Over Lan.
    
    This feature works by emulating a serial port, and it is detected by
    kernel as a normal 8250 port.  However, this emulation is not perfect, as
    also noticed on changeset 7500b1f6
    
    .
    
    Before this patch, the kernel were trying to check if the serial TX is
    capable of work using IRQ's.
    
    This were done with a code similar this:
    
            serial_outp(up, UART_IER, UART_IER_THRI);
            lsr = serial_in(up, UART_LSR);
            iir = serial_in(up, UART_IIR);
            serial_outp(up, UART_IER, 0);
    
            if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT)
    		up->bugs |= UART_BUG_TXEN;
    
    This works fine for other 8250 ports, but, on 8250-emulated SoL port, the
    chip is a little lazy to down UART_IIR_NO_INT at UART_IIR register.
    
    Due to that, UART_BUG_TXEN is sometimes enabled.  However, as TX IRQ keeps
    working, and the TX polling is now enabled, the driver miss-interprets the
    IRQ received later, hanging up the machine until a key is pressed at the
    serial console.
    
    This is the 6 version of this patch.  Previous versions were trying to
    introduce a large enough delay between serial_outp and serial_in(up,
    UART_IIR), but not taking forever.  However, the needed delay couldn't be
    safely determined.
    
    At the experimental tests, a delay of 1us solves most of the cases, but
    still hangs sometimes.  Increasing the delay to 5us was better, but still
    doesn't solve.  A very high delay of 50 ms seemed to work every time.
    
    However, poking around with delays and pray for it to be enough doesn't
    seem to be a good approach, even for a quirk.
    
    So, instead of playing with random large arbitrary delays, let's just
    disable UART_BUG_TXEN for all SoL ports.
    
    [akpm@linux-foundation.org: fix warnings]
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b6adea33