• Tim Kryger's avatar
    serial: 8250_dw: Report CTS asserted for auto flow · 33acbb82
    Tim Kryger authored
    When a serial port is configured for RTS/CTS flow control, serial core
    will disable the transmitter if it observes CTS is de-asserted. This is
    perfectly reasonable and appropriate when the UART lacks the ability to
    automatically perform CTS flow control.
    
    However, if the UART hardware can manage flow control automatically, it
    is important that software not get involved.  When the DesignWare UART
    enables 16C750 style auto-RTS/CTS it stops generating interrupts for
    changes in CTS state so software mostly stays out of the way.  However,
    it does report the true state of CTS in the MSR so software may notice
    it is de-asserted and respond by improperly disabling the transmitter.
    Once this happens the transmitter will be blocked forever.
    
    To avoid this situation, we simply lie to the 8250 and serial core by
    reporting that CTS is asserted whenever auto-RTS/CTS mode is enabled.
    Signed-off-by: default avatarTim Kryger <tim.kryger@linaro.org>
    Reviewed-by: default avatarMatt Porter <matt.porter@linaro.org>
    Reviewed-by: default avatarMarkus Mayer <markus.mayer@linaro.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    33acbb82
8250_dw.c 10.6 KB