summaryrefslogtreecommitdiff
path: root/target/linux/imx6/patches-4.4/113-serial-imx-make-sure-unhandled-irqs-are-disabled.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/imx6/patches-4.4/113-serial-imx-make-sure-unhandled-irqs-are-disabled.patch')
-rw-r--r--target/linux/imx6/patches-4.4/113-serial-imx-make-sure-unhandled-irqs-are-disabled.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/target/linux/imx6/patches-4.4/113-serial-imx-make-sure-unhandled-irqs-are-disabled.patch b/target/linux/imx6/patches-4.4/113-serial-imx-make-sure-unhandled-irqs-are-disabled.patch
new file mode 100644
index 0000000..8978d33
--- /dev/null
+++ b/target/linux/imx6/patches-4.4/113-serial-imx-make-sure-unhandled-irqs-are-disabled.patch
@@ -0,0 +1,61 @@
+From a58c6360b9eb3a2374b0b069ba9ce7baec0f26df Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
+Date: Thu, 24 Mar 2016 14:24:22 +0100
+Subject: [PATCH 3/3] serial: imx: make sure unhandled irqs are disabled
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Make sure that events that are not handled in the irq function don't
+trigger an interrupt.
+
+When the serial port is operated in DTE mode, the events for DCD and RI
+events are enabled after a system reset by default.
+
+Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Petr Štetiar <ynezz@true.cz>
+---
+ drivers/tty/serial/imx.c | 23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
+index 5ced61e..fcd48fd 100644
+--- a/drivers/tty/serial/imx.c
++++ b/drivers/tty/serial/imx.c
+@@ -1221,11 +1221,32 @@ static int imx_startup(struct uart_port *port)
+ temp |= (UCR2_RXEN | UCR2_TXEN);
+ if (!sport->have_rtscts)
+ temp |= UCR2_IRTS;
++ /*
++ * make sure the edge sensitive RTS-irq is disabled,
++ * we're using RTSD instead.
++ */
++ if (!is_imx1_uart(sport))
++ temp &= ~UCR2_RTSEN;
+ writel(temp, sport->port.membase + UCR2);
+
+ if (!is_imx1_uart(sport)) {
+ temp = readl(sport->port.membase + UCR3);
+- temp |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP;
++
++ /*
++ * The effect of RI and DCD differs depending on the UFCR_DCEDTE
++ * bit. In DCE mode they control the outputs, in DTE mode they
++ * enable the respective irqs. At least the DCD irq cannot be
++ * cleared on i.MX25 at least, so it's not usable and must be
++ * disabled. I don't have test hardware to check if RI has the
++ * same problem but I consider this likely so it's disabled for
++ * now, too.
++ */
++ temp |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP |
++ UCR3_RI | UCR3_DCD;
++
++ if (sport->dte_mode)
++ temp &= ~(UCR3_RI | UCR3_DCD);
++
+ writel(temp, sport->port.membase + UCR3);
+ }
+
+--
+1.9.1
+