Skip to content

Commit

Permalink
[ARM] i.MX serial: fix tx buffer overflows
Browse files Browse the repository at this point in the history
Fix occasional tx buffer overflows in the i.MX serial driver which came
from the fact that space in the buffer was checked after sending the first
byte.  Also, fifosize is 32 bytes, not 8.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de
Acked-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Sascha Hauer authored and Russell King committed Feb 11, 2007
1 parent ae0a846 commit 8c0b254
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions drivers/serial/imx.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ static inline void imx_transmit_buffer(struct imx_port *sport)
{
struct circ_buf *xmit = &sport->port.info->xmit;

do {
while (!(UTS((u32)sport->port.membase) & UTS_TXFULL)) {
/* send xmit->buf[xmit->tail]
* out the port here */
URTX0((u32)sport->port.membase) = xmit->buf[xmit->tail];
Expand All @@ -163,7 +163,7 @@ static inline void imx_transmit_buffer(struct imx_port *sport)
sport->port.icount.tx++;
if (uart_circ_empty(xmit))
break;
} while (!(UTS((u32)sport->port.membase) & UTS_TXFULL));
}

if (uart_circ_empty(xmit))
imx_stop_tx(&sport->port);
Expand All @@ -178,8 +178,7 @@ static void imx_start_tx(struct uart_port *port)

UCR1((u32)sport->port.membase) |= UCR1_TXMPTYEN;

if(UTS((u32)sport->port.membase) & UTS_TXEMPTY)
imx_transmit_buffer(sport);
imx_transmit_buffer(sport);
}

static irqreturn_t imx_rtsint(int irq, void *dev_id)
Expand Down Expand Up @@ -678,7 +677,7 @@ static struct imx_port imx_ports[] = {
.mapbase = IMX_UART1_BASE, /* FIXME */
.irq = UART1_MINT_RX,
.uartclk = 16000000,
.fifosize = 8,
.fifosize = 32,
.flags = UPF_BOOT_AUTOCONF,
.ops = &imx_pops,
.line = 0,
Expand All @@ -694,7 +693,7 @@ static struct imx_port imx_ports[] = {
.mapbase = IMX_UART2_BASE, /* FIXME */
.irq = UART2_MINT_RX,
.uartclk = 16000000,
.fifosize = 8,
.fifosize = 32,
.flags = UPF_BOOT_AUTOCONF,
.ops = &imx_pops,
.line = 1,
Expand Down

0 comments on commit 8c0b254

Please sign in to comment.