[PATCH 01/15] dmaengine: pxa: use a dma slave map

Robert Jarzmik robert.jarzmik at free.fr
Sat Apr 21 12:23:05 PDT 2018


Robert Jarzmik <robert.jarzmik at free.fr> writes:

> In order to remove the specific knowledge of the dma mapping from PXA
> drivers, add a default slave map for pxa architectures.
>
> This won't impact MMP architecture, but is aimed only at all PXA boards.
>
> This is the first step, and once all drivers are converted,
> pxad_filter_fn() will be made static, and the DMA resources removed from
> device.c.
>
> Signed-off-by: Robert Jarzmik <robert.jarzmik at free.fr>
> Reported-by: Arnd Bergmann <arnd at arndb.de>

Vinod, could I have your ack please ?

Cheers.

--
Robert

PS: The submitted patch
> ---
>  drivers/dma/pxa_dma.c                 | 10 +++++++++-
>  include/linux/platform_data/mmp_dma.h |  4 ++++
>  2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/dma/pxa_dma.c b/drivers/dma/pxa_dma.c
> index b53fb618bbf6..9505334f9c6e 100644
> --- a/drivers/dma/pxa_dma.c
> +++ b/drivers/dma/pxa_dma.c
> @@ -179,6 +179,8 @@ static unsigned int pxad_drcmr(unsigned int line)
>  	return 0x1000 + line * 4;
>  }
>  
> +bool pxad_filter_fn(struct dma_chan *chan, void *param);
> +
>  /*
>   * Debug fs
>   */
> @@ -1396,9 +1398,10 @@ static int pxad_probe(struct platform_device *op)
>  {
>  	struct pxad_device *pdev;
>  	const struct of_device_id *of_id;
> +	const struct dma_slave_map *slave_map = NULL;
>  	struct mmp_dma_platdata *pdata = dev_get_platdata(&op->dev);
>  	struct resource *iores;
> -	int ret, dma_channels = 0, nb_requestors = 0;
> +	int ret, dma_channels = 0, nb_requestors = 0, slave_map_cnt = 0;
>  	const enum dma_slave_buswidth widths =
>  		DMA_SLAVE_BUSWIDTH_1_BYTE   | DMA_SLAVE_BUSWIDTH_2_BYTES |
>  		DMA_SLAVE_BUSWIDTH_4_BYTES;
> @@ -1429,6 +1432,8 @@ static int pxad_probe(struct platform_device *op)
>  	} else if (pdata && pdata->dma_channels) {
>  		dma_channels = pdata->dma_channels;
>  		nb_requestors = pdata->nb_requestors;
> +		slave_map = pdata->slave_map;
> +		slave_map_cnt = pdata->slave_map_cnt;
>  	} else {
>  		dma_channels = 32;	/* default 32 channel */
>  	}
> @@ -1440,6 +1445,9 @@ static int pxad_probe(struct platform_device *op)
>  	pdev->slave.device_prep_dma_memcpy = pxad_prep_memcpy;
>  	pdev->slave.device_prep_slave_sg = pxad_prep_slave_sg;
>  	pdev->slave.device_prep_dma_cyclic = pxad_prep_dma_cyclic;
> +	pdev->slave.filter.map = slave_map;
> +	pdev->slave.filter.mapcnt = slave_map_cnt;
> +	pdev->slave.filter.fn = pxad_filter_fn;
>  
>  	pdev->slave.copy_align = PDMA_ALIGNMENT;
>  	pdev->slave.src_addr_widths = widths;
> diff --git a/include/linux/platform_data/mmp_dma.h b/include/linux/platform_data/mmp_dma.h
> index d1397c8ed94e..6397b9c8149a 100644
> --- a/include/linux/platform_data/mmp_dma.h
> +++ b/include/linux/platform_data/mmp_dma.h
> @@ -12,9 +12,13 @@
>  #ifndef MMP_DMA_H
>  #define MMP_DMA_H
>  
> +struct dma_slave_map;
> +
>  struct mmp_dma_platdata {
>  	int dma_channels;
>  	int nb_requestors;
> +	int slave_map_cnt;
> +	const struct dma_slave_map *slave_map;
>  };
>  
>  #endif /* MMP_DMA_H */

-- 
Robert



More information about the linux-arm-kernel mailing list