Skip to content

Commit

Permalink
serial: clps711x: Give a chance to perform useful tasks during wait loop
Browse files Browse the repository at this point in the history
This patch adds cond_sched() calls during wait loop to perform
other tasks.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Alexander Shiyan authored and Greg Kroah-Hartman committed Mar 17, 2014
1 parent 015355b commit 63e3ad3
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions drivers/tty/serial/clps711x.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,11 +368,16 @@ static const struct uart_ops uart_clps711x_ops = {
static void uart_clps711x_console_putchar(struct uart_port *port, int ch)
{
struct clps711x_port *s = dev_get_drvdata(port->dev);
u32 sysflg = 0;

do {
/* Wait for FIFO is not full */
while (1) {
u32 sysflg = 0;

regmap_read(s->syscon, SYSFLG_OFFSET, &sysflg);
} while (sysflg & SYSFLG_UTXFF);
if (!(sysflg & SYSFLG_UTXFF))
break;
cond_resched();
}

writew(ch, port->membase + UARTDR_OFFSET);
}
Expand All @@ -382,14 +387,18 @@ static void uart_clps711x_console_write(struct console *co, const char *c,
{
struct uart_port *port = clps711x_uart.state[co->index].uart_port;
struct clps711x_port *s = dev_get_drvdata(port->dev);
u32 sysflg = 0;

uart_console_write(port, c, n, uart_clps711x_console_putchar);

/* Wait for transmitter to become empty */
do {
while (1) {
u32 sysflg = 0;

regmap_read(s->syscon, SYSFLG_OFFSET, &sysflg);
} while (sysflg & SYSFLG_UBUSY);
if (!(sysflg & SYSFLG_UBUSY))
break;
cond_resched();
}
}

static int uart_clps711x_console_setup(struct console *co, char *options)
Expand Down

0 comments on commit 63e3ad3

Please sign in to comment.