• Charanya Venkatraman's avatar
    tty:serial:msm:Do not restore Rx interrupts in DMA · 002eb41f
    Charanya Venkatraman authored
    Avoid data corruption issues that result in CRC errors during file
    transfers over serial ports at higher baud rates.
    
    The current msm_serial driver masks the FIFO Rx interrupts in
    msm_start_rx_dma() since Rx FIFO interrupts are not required in DMA
    mode. However, msm_complete_rx_dma() re-enables the Rx FIFO interrupts
    which could cause RXSTALE event to be processed when a TXLEV interrupt
    occurs.
    
    The following is the sequence of events that could occur resulting in
    data corruption.
    
    msm_start_rx_dma -> msm_complete_rx_dma -->
    spin_unlock_irqrestore(&port->lock) -->
    msm_uart_irq()(For TXLEV interrupt) -->  msm_handle_rx_dm() (Read from
    FIFO resulting in data corruption)
    
    The patch fixes the issue by not restoring the RXLEV and RXSTALE
    interrupts in msm_complete_rx_dma(). These interrupts are required only
    in FIFO mode.
    Signed-off-by: default avatarCharanya Venkatraman <charanya@codeaurora.org>
    Acked-by: default avatarAndy Gross <andy.gross@linaro.org>
    Reviewed-by: default avatarStephen Boyd <sboyd@codeaurora.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    002eb41f
msm_serial.c 43.6 KB