serial: liteuart: rx loop should only ack rx events
authorGabriel Somlo <gsomlo@gmail.com>
Wed, 23 Nov 2022 13:04:53 +0000 (08:04 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Jan 2023 13:59:40 +0000 (14:59 +0100)
While receiving characters, it is necessary to acknowledge each one
by writing to the EV_PENDING register's EV_RX bit. Ensure we do not
also gratuitously set the EV_TX bit in the process.

Signed-off-by: Gabriel Somlo <gsomlo@gmail.com>
Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
Link: https://lore.kernel.org/r/20221123130500.1030189-8-gsomlo@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/liteuart.c

index 81a86c5..c90ab65 100644 (file)
@@ -82,7 +82,7 @@ static void liteuart_timer(struct timer_list *t)
                port->icount.rx++;
 
                /* necessary for RXEMPTY to refresh its value */
-               litex_write8(membase + OFF_EV_PENDING, EV_TX | EV_RX);
+               litex_write8(membase + OFF_EV_PENDING, EV_RX);
 
                /* no overflow bits in status */
                if (!(uart_handle_sysrq_char(port, ch)))