[PATCH v2 1/2] serial: mxs-auart: set the FIFO size to DMA buffer size

Uwe Kleine-König u.kleine-koenig at pengutronix.de
Wed Oct 2 08:25:36 EDT 2013


Hallo Hector,

On Wed, Oct 02, 2013 at 02:02:43PM +0200, Hector Palacios wrote:
> When DMA is enabled (with hardware flow control enabled) the FIFO size
> must be set to the size of the DMA buffer, as this is the size the tty
> subsystem can use.
> 
> Signed-off-by: Hector Palacios <hector.palacios at digi.com>
> ---
>  drivers/tty/serial/mxs-auart.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
> index f85b8e6..9f046177 100644
> --- a/drivers/tty/serial/mxs-auart.c
> +++ b/drivers/tty/serial/mxs-auart.c
> @@ -40,6 +40,7 @@
>  #include <asm/cacheflush.h>
>  
>  #define MXS_AUART_PORTS 5
> +#define MXS_AUART_FIFO_SIZE		16
>  
>  #define AUART_CTRL0			0x00000000
>  #define AUART_CTRL0_SET			0x00000004
> @@ -549,6 +550,9 @@ static int mxs_auart_dma_init(struct mxs_auart_port *s)
>  	s->flags |= MXS_AUART_DMA_ENABLED;
>  	dev_dbg(s->dev, "enabled the DMA support.");
>  
> +	/* The DMA buffer is now the FIFO the TTY subsystem can use */
> +	s->port.fifosize = UART_XMIT_SIZE;
> +
>  	return 0;
>  
>  err_out:
> @@ -741,6 +745,9 @@ static int mxs_auart_startup(struct uart_port *u)
>  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
>  			u->membase + AUART_INTR);
>  
> +	/* Reset FIFO size (it could have changed if DMA was enabled) */
> +	u->fifosize = MXS_AUART_FIFO_SIZE;
> +
>  	/*
>  	 * Enable fifo so all four bytes of a DMA word are written to
>  	 * output (otherwise, only the LSB is written, ie. 1 in 4 bytes)
> @@ -1062,7 +1069,7 @@ static int mxs_auart_probe(struct platform_device *pdev)
>  	s->port.membase = ioremap(r->start, resource_size(r));
>  	s->port.ops = &mxs_auart_ops;
>  	s->port.iotype = UPIO_MEM;
> -	s->port.fifosize = 16;
> +	s->port.fifosize = MXS_AUART_FIFO_SIZE;
>  	s->port.uartclk = clk_get_rate(s->clk);
>  	s->port.type = PORT_IMX;
>  	s->port.dev = s->dev = &pdev->dev;
I don't know if something is surprised when fifosize is changed by
set_termios, but that's how it is. So:

Acked-by: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |



More information about the linux-arm-kernel mailing list