• Vladimir Oltean's avatar
    tty: serial: fsl_lpuart: LS1021A has a FIFO size of 16 words, like LS1028A · c97f2a6f
    Vladimir Oltean authored
    Prior to the commit that this one fixes, the FIFO size was derived from
    the read-only register LPUARTx_FIFO[TXFIFOSIZE] using the following
    formula:
    
    TX FIFO size = 2 ^ (LPUARTx_FIFO[TXFIFOSIZE] - 1)
    
    The documentation for LS1021A is a mess. Under chapter 26.1.3 LS1021A
    LPUART module special consideration, it mentions TXFIFO_SZ and RXFIFO_SZ
    being equal to 4, and in the register description for LPUARTx_FIFO, it
    shows the out-of-reset value of TXFIFOSIZE and RXFIFOSIZE fields as "011",
    even though these registers read as "101" in reality.
    
    And when LPUART on LS1021A was working, the "101" value did correspond
    to "16 datawords", by applying the formula above, even though the
    documentation is wrong again (!!!!) and says that "101" means 64 datawords
    (hint: it doesn't).
    
    So the "new" formula created by commit f77ebb24 has all the premises
    of being wrong for LS1021A, because it relied only on false data and no
    actual experimentation.
    
    Interestingly, in commit c2f448cf ("tty: serial: fsl_lpuart: add
    LS1028A support"), Michael Walle applied a workaround to this by manually
    setting the FIFO widths for LS1028A. It looks like the same values are
    used by LS1021A as well, in fact.
    
    When the driver thinks that it has a deeper FIFO than it really has,
    getty (user space) output gets truncated.
    
    Many thanks to Michael for pointing out where to look.
    
    Fixes: f77ebb24 ("tty: serial: fsl_lpuart: correct the FIFO depth size")
    Suggested-by: default avatarMichael Walle <michael@walle.cc>
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://lore.kernel.org/r/20201023013429.3551026-1-vladimir.oltean@nxp.com
    Reviewed-by:Fugang Duan <fugang.duan@nxp.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c97f2a6f
fsl_lpuart.c 72.4 KB