You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07: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:
committed by
Greg Kroah-Hartman
parent
755dd8aa12
commit
5fd2b6ee7a
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user