On Tue, Jun 09, 2020 at 07:23:40AM +0000, Schrempf Frieder wrote:
From: Uwe Kleine-König u.kleine-koenig@pengutronix.de
commit 1866541492641c02874bf51f9d8712b5510f2c64 upstream
When using RS485 half duplex the Transmitter Complete irq is needed to determine the moment when the transmitter can be disabled. When using DMA this irq must only be enabled when DMA has completed to transfer all data. Otherwise the CPU might busily trigger this irq which is not properly handled and so the also pending irq for the DMA transfer cannot trigger.
Cc: stable@vger.kernel.org # v4.14.x Signed-off-by: Uwe Kleine-König u.kleine-koenig@pengutronix.de Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org [Backport to v4.14] Signed-off-by: Frieder Schrempf frieder.schrempf@kontron.de
When using RS485 with DMA enabled simply transmitting some data on our i.MX6ULL based boards often freezes the system completely. The higher the baudrate, the easier it is to reproduce the issue. To test this I simply used:
stty -F /dev/ttymxc1 speed 115200 while true; do echo TEST > /dev/ttymxc1; done
Without the patch this leads to an almost immediate system freeze, with the patch applied, everything keeps working as expected.
drivers/tty/serial/imx.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-)
Now queued up, thanks.
greg k-h