From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from xavier.telenet-ops.be ([195.130.132.52]:50712 "EHLO xavier.telenet-ops.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753637AbcEZSSp (ORCPT ); Thu, 26 May 2016 14:18:45 -0400 From: Geert Uytterhoeven To: Greg Kroah-Hartman , Jiri Slaby , Magnus Damm Cc: linux-serial@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH 3/4] serial: sh-sci: Clear RX, error, and break flags during reset Date: Thu, 26 May 2016 20:18:37 +0200 Message-Id: <1464286718-10745-4-git-send-email-geert+renesas@glider.be> In-Reply-To: <1464286718-10745-1-git-send-email-geert+renesas@glider.be> References: <1464286718-10745-1-git-send-email-geert+renesas@glider.be> Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Setting the FIFO reset bits is not sufficient to reset the RX FIFO. After this the status register's RDF flag bit may still be set, causing the reception of one stale byte of data. To fix this, clear all status flag bits related to reception, error, and break handling, cfr. the initialization flowchart in the datasheet. Signed-off-by: Geert Uytterhoeven --- drivers/tty/serial/sh-sci.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index 4d2f916f45277e20..549d799cb18fafe7 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -2052,6 +2052,10 @@ static void sci_reset(struct uart_port *port) reg = sci_getreg(port, SCFCR); if (reg->size) serial_port_out(port, SCFCR, SCFCR_RFRST | SCFCR_TFRST); + + sci_clear_SCxSR(port, + SCxSR_RDxF_CLEAR(port) & SCxSR_ERROR_CLEAR(port) & + SCxSR_BREAK_CLEAR(port)); } static void sci_set_termios(struct uart_port *port, struct ktermios *termios, -- 1.9.1