Re: [PATCH] serial: samsung: check DMA channel capabilities before using DMA mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 10, 2018 at 09:00:48AM +0200, Marek Szyprowski wrote:
> DMA engine driver might not always provide all the features needed by
> serial driver to properly operate in DMA mode, so check that before
> selecting DMA mode.
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> ---
>  drivers/tty/serial/samsung.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
> index 64e96926f1ad..334b53c6eb14 100644
> --- a/drivers/tty/serial/samsung.c
> +++ b/drivers/tty/serial/samsung.c
> @@ -856,6 +856,7 @@ static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state)
>  static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
>  {
>  	struct s3c24xx_uart_dma	*dma = p->dma;
> +	struct dma_slave_caps dma_caps;
>  	int ret;
>  
>  	/* Default slave configuration parameters */
> @@ -874,6 +875,13 @@ static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
>  	if (IS_ERR(dma->rx_chan))
>  		return PTR_ERR(dma->rx_chan);
>  
> +	ret = dma_get_slave_caps(dma->rx_chan, &dma_caps);
> +	if (ret < 0 ||
> +	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {

Let's print here reason of DMA setup failure? Later only generic message
about not using DMA would be shown.

The same in second path.

Best regards,
Krzysztof


> +		ret = -ENODEV;
> +		goto err_release_rx;
> +	}
> +
>  	dmaengine_slave_config(dma->rx_chan, &dma->rx_conf);
>  
>  	dma->tx_chan = dma_request_chan(p->port.dev, "tx");
> @@ -882,6 +890,13 @@ static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
>  		goto err_release_rx;
>  	}
>  
> +	ret = dma_get_slave_caps(dma->tx_chan, &dma_caps);
> +	if (ret < 0 ||
> +	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
> +		ret = -ENODEV;
> +		goto err_release_tx;
> +	}
> +
>  	dmaengine_slave_config(dma->tx_chan, &dma->tx_conf);
>  
>  	/* RX buffer */
> -- 
> 2.17.0
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  Powered by Linux