From 96e1e0201126b95ea3fbaa2594369f8041cde28a Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 18 Nov 2009 15:21:44 +0100 Subject: [PATCH] --- yaml --- r: 172503 b: refs/heads/master c: 4998f1a30cf8e21c5bc0766fde4fa58e1adabd72 h: refs/heads/master i: 172501: f97961c3132922548ef3075065ada6b2a8a337cb 172499: 02a6f6c8df7bbeb660a5555b8815c2effd2fe02a 172495: 7ae2be27397a0693381d77ac57609f3eead3214b v: v3 --- [refs] | 2 +- trunk/arch/arm/plat-mxc/dma-mx1-mx2.c | 3 ++- trunk/arch/arm/plat-mxc/include/mach/dma-mx1-mx2.h | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index dcdbee55ffe6..396ec28608c1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 74b2a70e34c69687f82b1319a358b21afeea497c +refs/heads/master: 4998f1a30cf8e21c5bc0766fde4fa58e1adabd72 diff --git a/trunk/arch/arm/plat-mxc/dma-mx1-mx2.c b/trunk/arch/arm/plat-mxc/dma-mx1-mx2.c index 77646436c00e..9c1b3f9c4f4d 100644 --- a/trunk/arch/arm/plat-mxc/dma-mx1-mx2.c +++ b/trunk/arch/arm/plat-mxc/dma-mx1-mx2.c @@ -156,7 +156,8 @@ static inline int imx_dma_sg_next(int channel, struct scatterlist *sg) } now = min(imxdma->resbytes, sg->length); - imxdma->resbytes -= now; + if (imxdma->resbytes != IMX_DMA_LENGTH_LOOP) + imxdma->resbytes -= now; if ((imxdma->dma_mode & DMA_MODE_MASK) == DMA_MODE_READ) __raw_writel(sg->dma_address, DMA_BASE + DMA_DAR(channel)); diff --git a/trunk/arch/arm/plat-mxc/include/mach/dma-mx1-mx2.h b/trunk/arch/arm/plat-mxc/include/mach/dma-mx1-mx2.h index b3876cc238ca..07be8ad7ec37 100644 --- a/trunk/arch/arm/plat-mxc/include/mach/dma-mx1-mx2.h +++ b/trunk/arch/arm/plat-mxc/include/mach/dma-mx1-mx2.h @@ -58,6 +58,14 @@ imx_dma_setup_single(int channel, dma_addr_t dma_address, unsigned int dma_length, unsigned int dev_addr, unsigned int dmamode); + +/* + * Use this flag as the dma_length argument to imx_dma_setup_sg() + * to create an endless running dma loop. The end of the scatterlist + * must be linked to the beginning for this to work. + */ +#define IMX_DMA_LENGTH_LOOP ((unsigned int)-1) + int imx_dma_setup_sg(int channel, struct scatterlist *sg, unsigned int sgcount, unsigned int dma_length,