serial: imx: stop using USR2 in FIFO reading loop

The chip provides all the needed bits in the URXD0 register that we read
anyway for data, so get rid of reading USR2 and use only URXD0 bits
instead.

Signed-off-by: Sergey Organov <sorganov@gmail.com>
Link: https://lore.kernel.org/r/20230201142700.4346-7-sorganov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Sergey Organov 2023-02-01 17:26:59 +03:00 коммит произвёл Greg Kroah-Hartman
Родитель 0fbca4798a
Коммит 53701b6d2c
1 изменённых файлов: 6 добавлений и 12 удалений

Просмотреть файл

@ -894,27 +894,21 @@ static irqreturn_t __imx_uart_rxint(int irq, void *dev_id)
struct tty_port *port = &sport->port.state->port;
u32 usr2;
usr2 = imx_uart_readl(sport, USR2);
/* If we received something, check for 0xff flood */
usr2 = imx_uart_readl(sport, USR2);
if (usr2 & USR2_RDR)
imx_uart_check_flood(sport, usr2);
for ( ; usr2 & USR2_RDR; usr2 = imx_uart_readl(sport, USR2)) {
while ((rx = imx_uart_readl(sport, URXD0)) & URXD_CHARRDY) {
flg = TTY_NORMAL;
sport->port.icount.rx++;
rx = imx_uart_readl(sport, URXD0);
if (usr2 & USR2_BRCD) {
imx_uart_writel(sport, USR2_BRCD, USR2);
if (uart_handle_break(&sport->port))
continue;
}
if (unlikely(rx & URXD_ERR)) {
if (rx & URXD_BRK)
if (rx & URXD_BRK) {
sport->port.icount.brk++;
if (uart_handle_break(&sport->port))
continue;
}
else if (rx & URXD_PRERR)
sport->port.icount.parity++;
else if (rx & URXD_FRMERR)