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

Commit 8c0b254b authored by Sascha Hauer's avatar Sascha Hauer Committed by Russell King
Browse files

[ARM] i.MX serial: fix tx buffer overflows



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: default avatarSascha Hauer <s.hauer@pengutronix.de>
Acked-by: default avatarPavel Pisa <pisa@cmp.felk.cvut.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent ae0a846e
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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];
@@ -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);
@@ -178,7 +178,6 @@ 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);
}

@@ -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,
@@ -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,