Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 973e5d52 authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt
Browse files

serial: sh-sci: console drainage



Modify the serial console code to wait for the transmit FIFO,
make sure all bits have been put on the wire before returning.

Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent a73090ff
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -139,7 +139,7 @@ static void sci_poll_put_char(struct uart_port *port, unsigned char c)
	} while (!(status & SCxSR_TDxE(port)));

	sci_in(port, SCxSR);            /* Dummy read */
	sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
	sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port) & ~SCxSR_TEND(port));
	sci_out(port, SCxTDR, c);
}
#endif /* CONFIG_CONSOLE_POLL || CONFIG_SERIAL_SH_SCI_CONSOLE */
@@ -1095,6 +1095,7 @@ static void serial_console_write(struct console *co, const char *s,
				 unsigned count)
{
	struct uart_port *port = &serial_console_port->port;
	unsigned short bits;
	int i;

	for (i = 0; i < count; i++) {
@@ -1103,6 +1104,11 @@ static void serial_console_write(struct console *co, const char *s,

		sci_poll_put_char(port, *s++);
	}

	/* wait until fifo is empty and last bit has been transmitted */
	bits = SCxSR_TDxE(port) | SCxSR_TEND(port);
	while ((sci_in(port, SCxSR) & bits) != bits)
		cpu_relax();
}

static int __init serial_console_setup(struct console *co, char *options)