mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
serial: sh-sci: Stop transfers in sci_shutdown()
Make sure the transmitter and receiver are stopped when shutting down the port, and related interrupts are disabled. Without this: - New input data may be received into the RX FIFO, possibly triggering a new RX DMA completion, - Transfers will still be enabled on a subsequent startup of the UART, before the UART's FIFOs have been reset, causing reading of stale data. Inspired by a patch in the BSP by Koji Matsuoka <koji.matsuoka.xm@renesas.com>. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
755dd8aa12
commit
5fd2b6ee7a
1 changed files with 4 additions and 0 deletions
|
@ -1989,6 +1989,7 @@ static void sci_shutdown(struct uart_port *port)
|
|||
{
|
||||
struct sci_port *s = to_sci_port(port);
|
||||
unsigned long flags;
|
||||
u16 scr;
|
||||
|
||||
dev_dbg(port->dev, "%s(%d)\n", __func__, port->line);
|
||||
|
||||
|
@ -1998,6 +1999,9 @@ static void sci_shutdown(struct uart_port *port)
|
|||
spin_lock_irqsave(&port->lock, flags);
|
||||
sci_stop_rx(port);
|
||||
sci_stop_tx(port);
|
||||
/* Stop RX and TX, disable related interrupts, keep clock source */
|
||||
scr = serial_port_in(port, SCSCR);
|
||||
serial_port_out(port, SCSCR, scr & (SCSCR_CKE1 | SCSCR_CKE0));
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
#ifdef CONFIG_SERIAL_SH_SCI_DMA
|
||||
|
|
Loading…
Reference in a new issue