In a mixed DMA/IRQ use-case (e.g.: DMA for TX, IRQ for RX), interrupt handler might try to handle Rx/Tx condition it shouldn't. Change the code to only handle TX/RX event if corresponding path isn't being handled by DMA.
Signed-off-by: Andrey Smirnov <andrew.smir...@gmail.com> Cc: Stefan Agner <ste...@agner.ch> Cc: Bhuvanchandra DV <bhuvanchandra...@toradex.com> Cc: Chris Healy <cphe...@gmail.com> Cc: Cory Tusar <cory.tu...@zii.aero> Cc: Lucas Stach <l.st...@pengutronix.de> Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org> Cc: Jiri Slaby <jsl...@suse.com> Cc: linux-...@nxp.com Cc: linux-ser...@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- drivers/tty/serial/fsl_lpuart.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 53b98065f9c5..b74027964b45 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -966,10 +966,10 @@ static irqreturn_t lpuart_int(int irq, void *dev_id) sts = readb(sport->port.membase + UARTSR1); - if (sts & UARTSR1_RDRF) + if (sts & UARTSR1_RDRF && !sport->lpuart_dma_rx_use) lpuart_rxint(sport); - if (sts & UARTSR1_TDRE) + if (sts & UARTSR1_TDRE && !sport->lpuart_dma_tx_use) lpuart_txint(sport); return IRQ_HANDLED; -- 2.21.0