• Sherry Sun's avatar
    tty: serial: fsl_lpuart: use UARTCTRL_TXINV to send break instead of UARTCTRL_SBK · 2474e054
    Sherry Sun authored
    LPUART IP now has two known bugs, one is that CTS has higher priority
    than the break signal, which causes the break signal sending through
    UARTCTRL_SBK may impacted by the CTS input if the HW flow control is
    enabled. It exists on all platforms we support in this driver.
    So we add a workaround patch for this issue: commit c4c81db5
    ("tty: serial: fsl_lpuart: disable the CTS when send break signal").
    
    Another IP bug is i.MX8QM LPUART may have an additional break character
    being sent after SBK was cleared. It may need to add some delay between
    clearing SBK and re-enabling CTS to ensure that the SBK latch are
    completely cleared.
    
    But we found that during the delay period before CTS is enabled, there
    is still a risk that Bluetooth data in TX FIFO may be sent out during
    this period because of break off and CTS disabled(even if BT sets CTS
    line deasserted, data is still sent to BT).
    
    Due to this risk, we have to drop the CTS-disabling workaround for SBK
    bugs, use TXINV seems to be a better way to replace SBK feature and
    avoid above risk. Also need to disable the transmitter to prevent any
    data from being sent out during break, then invert the TX line to send
    break. Then disable the TXINV when turn off break and re-enable
    transmitter.
    
    Fixes: c4c81db5 ("tty: serial: fsl_lpuart: disable the CTS when send break signal")
    Cc: stable <stable@kernel.org>
    Signed-off-by: default avatarSherry Sun <sherry.sun@nxp.com>
    Link: https://lore.kernel.org/r/20230519094751.28948-1-sherry.sun@nxp.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2474e054
fsl_lpuart.c 81.2 KB