]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
serial: sh: Improve FIFO empty check on RX
authorMarek Vasut <marek.vasut+renesas@gmail.com>
Sat, 9 May 2020 20:30:05 +0000 (22:30 +0200)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Tue, 1 Sep 2020 12:46:41 +0000 (14:46 +0200)
If the SCIF is receiving data quickly enough, it may happen that the
SCxSR_RDxF flag is cleared in sh_serial_getc_generic(), while the
FIFO still contains data. If that happens, the serial_getc_check()
reports no data in the FIFO as the flag is no longer set. Add one
more check, if the SCxSR_RDxF is not set, read out the FIFO level
and if there are still characters in the FIFO, permit reading them
out.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
drivers/serial/serial_sh.c

index 13b179f03ded3a768e99b85181ae1fd2942e0b15..e27d256574f01a08dd7211baab005542a71caa7d 100644 (file)
@@ -116,7 +116,10 @@ static int serial_getc_check(struct uart_port *port)
                handle_error(port);
        if (sci_in(port, SCLSR) & SCxSR_ORER(port))
                handle_error(port);
-       return status & (SCIF_DR | SCxSR_RDxF(port));
+       status &= (SCIF_DR | SCxSR_RDxF(port));
+       if (status)
+               return status;
+       return scif_rxfill(port);
 }
 
 static int sh_serial_getc_generic(struct uart_port *port)