On Fri, Apr 22, 2016 at 08:48:40AM +0200, Jean-Francois Moine wrote:
> Some DMA clients, as audio, don't set the maxburst size and bus width
> on the memory side when starting DMA transfers.
> This patch prevents such transfers to be aborted by providing system
> default values to the lacking ones.
> 
> Signed-off-by: Jean-Francois Moine <moin...@free.fr>
> ---
>  drivers/dma/sun6i-dma.c | 23 +++++++++++++++++++----
>  1 file changed, 19 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index b08245e..821fc4f 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -470,10 +470,25 @@ static int set_config(struct sun6i_dma_dev *sdev,
>  {
>       s8 src_width, dst_width, src_burst, dst_burst;
>  
> -     src_burst = convert_burst(sconfig->src_maxburst);
> -     src_width = convert_buswidth(sconfig->src_addr_width);
> -     dst_burst = convert_burst(sconfig->dst_maxburst);
> -     dst_width = convert_buswidth(sconfig->dst_addr_width);
> +     if (direction == DMA_MEM_TO_DEV) {
> +             src_burst = convert_burst(sconfig->src_maxburst ?
> +                                     sconfig->src_maxburst : 8);
> +             src_width = convert_buswidth(sconfig->src_addr_width !=
> +                                             DMA_SLAVE_BUSWIDTH_UNDEFINED ?
> +                             sconfig->src_addr_width :
> +                             DMA_SLAVE_BUSWIDTH_4_BYTES);
> +             dst_burst = convert_burst(sconfig->dst_maxburst);
> +             dst_width = convert_buswidth(sconfig->dst_addr_width);
> +     } else {        /* DMA_DEV_TO_MEM */

Else can be any other direction, I would prefer we check that. Also swicth
would be better

> +             src_burst = convert_burst(sconfig->src_maxburst);
> +             src_width = convert_buswidth(sconfig->src_addr_width);
> +             dst_burst = convert_burst(sconfig->dst_maxburst ?
> +                                     sconfig->dst_maxburst : 8);
> +             dst_width = convert_buswidth(sconfig->dst_addr_width !=
> +                                             DMA_SLAVE_BUSWIDTH_UNDEFINED ?
> +                             sconfig->dst_addr_width :
> +                             DMA_SLAVE_BUSWIDTH_4_BYTES);
> +     }
>  
>       if (src_burst < 0)
>               return src_burst;

-- 
~Vinod

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to