Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1670899

[PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP

From Clemens Gruber <clemens.gruber@pqgruber.com>
Newsgroups linux.kernel
Subject [PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP
Date 2017-06-20 17:50 +0200
Message-ID <tUtzJ-238-45@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


DMA support for half-duplex RS-485 never worked correctly on i.MX6Q/D
due to an undiscovered SMP-related bug, instead of the real data being
sent out, the rest of the transmit buffer is sent (xmit->tail jumps over
xmit->head in imx_transmit_buffer and UART_XMIT_SIZE bytes are sent out)
More details: https://lkml.org/lkml/2017/1/4/579

Disable it for that configuration until the bug is found and fixed.

We need to know at probe time if we can enable DMA. (RS-485 could be
enabled after that). Let's therefore only enable DMA if it is not an
i.MX6Q/D UART with uart-has-rtscts in the DT and CONFIG_SMP enabled.

Fixes: 17b8f2a3fdca ("serial: imx: add support for half duplex rs485")
Cc: <stable@vger.kernel.org>
Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
---
 drivers/tty/serial/imx.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index bbefddd92bfe..000949f686a4 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -1277,8 +1277,14 @@ static int imx_startup(struct uart_port *port)
 
 	writel(temp & ~UCR4_DREN, sport->port.membase + UCR4);
 
-	/* Can we enable the DMA support? */
-	if (!uart_console(port) && !sport->dma_is_inited)
+	/*
+	 * Can we enable the DMA support?
+	 * RS-485 DMA is broken on i.MX6D/Q SMP systems. Do not use DMA on
+	 * UARTs with RTS/CTS to prevent misbehavior until the bug is fixed.
+	 */
+	if (!uart_console(port) && !sport->dma_is_inited &&
+	    !(sport->have_rtscts && is_imx6q_uart(sport) &&
+	      IS_ENABLED(CONFIG_SMP)))
 		imx_uart_dma_init(sport);
 
 	spin_lock_irqsave(&sport->port.lock, flags);
-- 
2.13.1

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP Clemens Gruber <clemens.gruber@pqgruber.com> - 2017-06-20 17:50 +0200
  Re: [PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP Fabio Estevam <festevam@gmail.com> - 2017-06-20 18:20 +0200
    Re: [PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP Fabio Estevam <festevam@gmail.com> - 2017-06-21 01:50 +0200
      Re: serial: imx: disable DMA for RS-485 on i.MX6 SMP Clemens Gruber <clemens.gruber@pqgruber.com> - 2017-07-02 22:50 +0200
        Re: serial: imx: disable DMA for RS-485 on i.MX6 SMP Fabio Estevam <festevam@gmail.com> - 2017-07-03 01:10 +0200
    Re: [PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP Clemens Gruber <clemens.gruber@pqgruber.com> - 2017-06-21 16:10 +0200
      Re: [PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP Fabio Estevam <festevam@gmail.com> - 2017-06-21 16:20 +0200
        Re: [PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP Fabio Estevam <festevam@gmail.com> - 2017-06-30 14:20 +0200
          Re: [PATCH] serial: imx: disable DMA for RS-485 on i.MX6 SMP Clemens Gruber <clemens.gruber@pqgruber.com> - 2017-07-02 22:20 +0200
  AW: [Customers.Eckelmann] [PATCH] serial: imx: disable DMA for  RS-485 on i.MX6 SMP "Schenk, Gavin" <G.Schenk@eckelmann.de> - 2017-06-23 11:40 +0200

csiph-web