[PATCH v1 RESEND 0/7] serial: imx: work-around for hardware RX flood, and then isr improvements
Sergey Organov
sorganov at gmail.com
Wed Feb 1 06:26:53 PST 2023
These series contain a work-around for hardware RX flood in first 2
commits, and then further cleanups and optimizations of the receive IRQ
handler.
WARNING: the flood fix is extensively tested with older version of the
kernel with DMA turned off. The DMA path is tested only a bit, as DMA has
receive problems on my kernel version.
Changes in v1:
* Missing braces fixed.
* Withdrawn patch optimizing imx_uart_readl() -> readl(), on request of
Uwe Kleine-König.
Sergey Organov (7):
serial: imx: factor-out common code to imx_uart_soft_reset()
serial: imx: work-around for hardware RX flood
serial: imx: do not sysrq broken chars
serial: imx: do not break from FIFO reading loop prematurely
serial: imx: remove redundant USR2 read from FIFO reading loop
serial: imx: stop using USR2 in FIFO reading loop
serial: imx: refine local variables in rxint()
drivers/tty/serial/imx.c | 225 ++++++++++++++++++++++++---------------
1 file changed, 140 insertions(+), 85 deletions(-)
Interdiff against v0:
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 45327ff6dd14..447b9060d9df 100644
--- b/drivers/tty/serial/imx.c
+++ a/drivers/tty/serial/imx.c
@@ -889,14 +889,15 @@
{
struct imx_port *sport = dev_id;
struct tty_port *port = &sport->port.state->port;
+ typeof(sport->port.membase) membase = sport->port.membase;
u32 usr2, rx;
/* If we received something, check for 0xff flood */
- usr2 = imx_uart_readl(sport, USR2);
+ usr2 = readl(membase + USR2);
if (usr2 & USR2_RDR)
imx_uart_check_flood(sport, usr2);
- while ((rx = imx_uart_readl(sport, URXD0)) & URXD_CHARRDY) {
+ while ((rx = readl(membase + URXD0)) & URXD_CHARRDY) {
unsigned int flg = TTY_NORMAL;
sport->port.icount.rx++;
@@ -928,9 +929,8 @@
flg = TTY_OVERRUN;
sport->port.sysrq = 0;
- } else if (uart_handle_sysrq_char(&sport->port, (unsigned char)rx)) {
+ } else if (uart_handle_sysrq_char(&sport->port, (unsigned char)rx))
continue;
- }
if (sport->port.ignore_status_mask & URXD_DUMMY_READ)
continue;
+-
2.30.1
More information about the linux-arm-kernel
mailing list