Skip to content

Commit

Permalink
serial: sh-sci: console drainage
Browse files Browse the repository at this point in the history
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: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Magnus Damm authored and Paul Mundt committed Feb 27, 2009
1 parent a73090f commit 973e5d5
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/serial/sh-sci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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++) {
Expand All @@ -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)
Expand Down

0 comments on commit 973e5d5

Please sign in to comment.