aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch b/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch
new file mode 100644
index 0000000000..58f44e86b0
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch
@@ -0,0 +1,29 @@
+From 31a4e41820cdaad9d4c151beefe5ab0698f4865a Mon Sep 17 00:00:00 2001
+From: Fugang Duan <fugang.duan@nxp.com>
+Date: Thu, 15 Jun 2017 16:48:31 +0800
+Subject: [PATCH] MLK-15094 tty: serial: fsl_lpuart: check dma_tx_in_progress
+ in callback
+
+There have a corner case that tx DMA .callback() is coming after
+.flush_buffer(), then .callback() should check dma_tx_in_progress
+flag and return in directly.
+
+Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
+Signed-off-by: Vipul Kumar <vipul_kumar@mentor.com>
+---
+ drivers/tty/serial/fsl_lpuart.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/tty/serial/fsl_lpuart.c
++++ b/drivers/tty/serial/fsl_lpuart.c
+@@ -490,6 +490,10 @@ static void lpuart_dma_tx_complete(void
+ unsigned long flags;
+
+ spin_lock_irqsave(&sport->port.lock, flags);
++ if (!sport->dma_tx_in_progress) {
++ spin_unlock_irqrestore(&sport->port.lock, flags);
++ return;
++ }
+
+ dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
+