[PATCH 0/8] Add and implement gen_pool_dma_alloc()

2013-11-01 Thread Nicolin Chen
Previously, we don't have a specific gen_pool_alloc() for DMA usage;
Instead, we need to use gen_pool_virt_to_phys() to convert the addr
returned from gen_pool_alloc(). So each implementation of this has
duplicated code. Thus add new helper function -- gen_pool_dma_alloc().

After gen_pool_dma_alloc() is introduced, we can replace the original
combination of gen_pool_alloc()+gen_pool_virt_to_phys() with this new
helper function. Thus this patch implement the helper function to all
the current drivers which use gen_pool_virt_to_phys().

!!---important--!!

The later 7 patches need all related driver owner to test. We can
here define a simple rule:
1, If one driver owner or maintainer doesn't like the mofication
   to his/her driver, just let me know. I would drop that patch.
2, If there's a bug and issue found after patch-testing, please
   reply the mail so that I can fix and refine the patch.
3, If one driver owner or maintainer is too busy and doesn't have
   bandwidth to test the patch, I would drop that patch from this
   series. We can reimplement it till there's someone test it.

!!---current progress---!!

  lib/genalloc: [Okay]
  ARM: davinci: [Untested]
  dma: mmp_tdma: [Untested]
  [media] coda: [Untested]
  uio: uio_pruss: [Untested]
  ALSA: memalloc: [Tested] by Nicolin Chen with i.MX6Q SabreSD
  ASoC: davinci: [Untested]
  ASoC: pxa: use [Untested]


Nicolin Chen (8):
  lib/genalloc: add a helper function for DMA buffer allocation
  ARM: davinci: use gen_pool_dma_alloc() to sram.c
  dma: mmp_tdma: use gen_pool_dma_alloc() to allocate descriptor
  [media] coda: use gen_pool_dma_alloc() to allocate iram buffer
  uio: uio_pruss: use gen_pool_dma_alloc() to allocate sram memory
  ALSA: memalloc: use gen_pool_dma_alloc() to allocate iram buffer
  ASoC: davinci: use gen_pool_dma_alloc() in davinci-pcm.c
  ASoC: pxa: use gen_pool_dma_alloc() to allocate dma buffer

 arch/arm/mach-davinci/sram.c|  9 +
 drivers/dma/mmp_tdma.c  |  7 +--
 drivers/media/platform/coda.c   |  5 ++---
 drivers/uio/uio_pruss.c |  6 ++
 include/linux/genalloc.h|  2 ++
 lib/genalloc.c  | 28 
 sound/core/memalloc.c   |  6 +-
 sound/soc/davinci/davinci-pcm.c |  3 +--
 sound/soc/pxa/mmp-pcm.c |  3 +--
 9 files changed, 39 insertions(+), 30 deletions(-)

-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 6/8] ALSA: memalloc: use gen_pool_dma_alloc() to allocate iram buffer

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 sound/core/memalloc.c | 6 +-
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
index 9d93f02..5e1c7bc 100644
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -184,11 +184,7 @@ static void snd_malloc_dev_iram(struct snd_dma_buffer 
*dmab, size_t size)
/* Assign the pool into private_data field */
dmab-private_data = pool;
 
-   dmab-area = (void *)gen_pool_alloc(pool, size);
-   if (!dmab-area)
-   return;
-
-   dmab-addr = gen_pool_virt_to_phys(pool, (unsigned long)dmab-area);
+   dmab-area = gen_pool_dma_alloc(pool, size, dmab-addr);
 }
 
 /**
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 5/8] uio: uio_pruss: use gen_pool_dma_alloc() to allocate sram memory

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 drivers/uio/uio_pruss.c | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/uio/uio_pruss.c b/drivers/uio/uio_pruss.c
index f519da9..96c4a19 100644
--- a/drivers/uio/uio_pruss.c
+++ b/drivers/uio/uio_pruss.c
@@ -158,14 +158,12 @@ static int pruss_probe(struct platform_device *dev)
if (pdata-sram_pool) {
gdev-sram_pool = pdata-sram_pool;
gdev-sram_vaddr =
-   gen_pool_alloc(gdev-sram_pool, sram_pool_sz);
+   (unsigned long)gen_pool_dma_alloc(gdev-sram_pool,
+   sram_pool_sz, gdev-sram_paddr);
if (!gdev-sram_vaddr) {
dev_err(dev-dev, Could not allocate SRAM pool\n);
goto out_free;
}
-   gdev-sram_paddr =
-   gen_pool_virt_to_phys(gdev-sram_pool,
- gdev-sram_vaddr);
}
 
gdev-ddr_vaddr = dma_alloc_coherent(dev-dev, extram_pool_sz,
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 8/8] ASoC: pxa: use gen_pool_dma_alloc() to allocate dma buffer

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 sound/soc/pxa/mmp-pcm.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sound/soc/pxa/mmp-pcm.c b/sound/soc/pxa/mmp-pcm.c
index 8235e23..7929e19 100644
--- a/sound/soc/pxa/mmp-pcm.c
+++ b/sound/soc/pxa/mmp-pcm.c
@@ -201,10 +201,9 @@ static int mmp_pcm_preallocate_dma_buffer(struct 
snd_pcm_substream *substream,
if (!gpool)
return -ENOMEM;
 
-   buf-area = (unsigned char *)gen_pool_alloc(gpool, size);
+   buf-area = gen_pool_dma_alloc(gpool, size, buf-addr);
if (!buf-area)
return -ENOMEM;
-   buf-addr = gen_pool_virt_to_phys(gpool, (unsigned long)buf-area);
buf-bytes = size;
return 0;
 }
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 7/8] ASoC: davinci: use gen_pool_dma_alloc() in davinci-pcm.c

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 sound/soc/davinci/davinci-pcm.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sound/soc/davinci/davinci-pcm.c b/sound/soc/davinci/davinci-pcm.c
index 84a63c6..fa64cd8 100644
--- a/sound/soc/davinci/davinci-pcm.c
+++ b/sound/soc/davinci/davinci-pcm.c
@@ -267,10 +267,9 @@ static int allocate_sram(struct snd_pcm_substream 
*substream,
return 0;
 
ppcm-period_bytes_max = size;
-   iram_virt = (void *)gen_pool_alloc(sram_pool, size);
+   iram_virt = gen_pool_dma_alloc(sram_pool, size, iram_phys);
if (!iram_virt)
goto exit1;
-   iram_phys = gen_pool_virt_to_phys(sram_pool, (unsigned)iram_virt);
iram_dma = kzalloc(sizeof(*iram_dma), GFP_KERNEL);
if (!iram_dma)
goto exit2;
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 3/8] dma: mmp_tdma: use gen_pool_dma_alloc() to allocate descriptor

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 drivers/dma/mmp_tdma.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/dma/mmp_tdma.c b/drivers/dma/mmp_tdma.c
index 2b4026d..3ddacc1 100644
--- a/drivers/dma/mmp_tdma.c
+++ b/drivers/dma/mmp_tdma.c
@@ -378,12 +378,7 @@ struct mmp_tdma_desc *mmp_tdma_alloc_descriptor(struct 
mmp_tdma_chan *tdmac)
if (!gpool)
return NULL;
 
-   tdmac-desc_arr = (void *)gen_pool_alloc(gpool, size);
-   if (!tdmac-desc_arr)
-   return NULL;
-
-   tdmac-desc_arr_phys = gen_pool_virt_to_phys(gpool,
-   (unsigned long)tdmac-desc_arr);
+   tdmac-desc_arr = gen_pool_dma_alloc(gpool, size, 
tdmac-desc_arr_phys);
 
return tdmac-desc_arr;
 }
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 4/8] [media] coda: use gen_pool_dma_alloc() to allocate iram buffer

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 drivers/media/platform/coda.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c
index ed4998c..bd72fb9 100644
--- a/drivers/media/platform/coda.c
+++ b/drivers/media/platform/coda.c
@@ -3298,13 +3298,12 @@ static int coda_probe(struct platform_device *pdev)
dev-iram_size = CODA7_IRAM_SIZE;
break;
}
-   dev-iram_vaddr = gen_pool_alloc(dev-iram_pool, dev-iram_size);
+   dev-iram_vaddr = (unsigned long)gen_pool_dma_alloc(dev-iram_pool,
+   dev-iram_size, (dma_addr_t *)dev-iram_paddr);
if (!dev-iram_vaddr) {
dev_err(pdev-dev, unable to alloc iram\n);
return -ENOMEM;
}
-   dev-iram_paddr = gen_pool_virt_to_phys(dev-iram_pool,
-   dev-iram_vaddr);
 
platform_set_drvdata(pdev, dev);
 
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/8] ARM: davinci: use gen_pool_dma_alloc() to sram.c

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 arch/arm/mach-davinci/sram.c | 9 +
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/arch/arm/mach-davinci/sram.c b/arch/arm/mach-davinci/sram.c
index f18928b..8540ddd 100644
--- a/arch/arm/mach-davinci/sram.c
+++ b/arch/arm/mach-davinci/sram.c
@@ -25,7 +25,6 @@ struct gen_pool *sram_get_gen_pool(void)
 
 void *sram_alloc(size_t len, dma_addr_t *dma)
 {
-   unsigned long vaddr;
dma_addr_t dma_base = davinci_soc_info.sram_dma;
 
if (dma)
@@ -33,13 +32,7 @@ void *sram_alloc(size_t len, dma_addr_t *dma)
if (!sram_pool || (dma  !dma_base))
return NULL;
 
-   vaddr = gen_pool_alloc(sram_pool, len);
-   if (!vaddr)
-   return NULL;
-
-   if (dma)
-   *dma = gen_pool_virt_to_phys(sram_pool, vaddr);
-   return (void *)vaddr;
+   return gen_pool_dma_alloc(sram_pool, len, dma);
 
 }
 EXPORT_SYMBOL(sram_alloc);
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/8] lib/genalloc: add a helper function for DMA buffer allocation

2013-11-01 Thread Nicolin Chen
When using pool space for DMA buffer, there might be duplicated calling
of gen_pool_alloc() and gen_pool_virt_to_phys() in each implementation.

Thus it's better to add a simple helper function, a compatible one to
the common dma_alloc_coherent(), to save some code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 include/linux/genalloc.h |  2 ++
 lib/genalloc.c   | 28 
 2 files changed, 30 insertions(+)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index f8d41cb..1eda33d 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -94,6 +94,8 @@ static inline int gen_pool_add(struct gen_pool *pool, 
unsigned long addr,
 }
 extern void gen_pool_destroy(struct gen_pool *);
 extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
+extern void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size,
+   dma_addr_t *dma);
 extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
 extern void gen_pool_for_each_chunk(struct gen_pool *,
void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index 26cf20b..dda3116 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -313,6 +313,34 @@ retry:
 EXPORT_SYMBOL(gen_pool_alloc);
 
 /**
+ * gen_pool_dma_alloc - allocate special memory from the pool for DMA usage
+ * @pool: pool to allocate from
+ * @size: number of bytes to allocate from the pool
+ * @dma: dma-view physical address
+ *
+ * Allocate the requested number of bytes from the specified pool.
+ * Uses the pool allocation function (with first-fit algorithm by default).
+ * Can not be used in NMI handler on architectures without
+ * NMI-safe cmpxchg implementation.
+ */
+void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size, dma_addr_t *dma)
+{
+   unsigned long vaddr;
+
+   if (!pool)
+   return NULL;
+
+   vaddr = gen_pool_alloc(pool, size);
+   if (!vaddr)
+   return NULL;
+
+   *dma = gen_pool_virt_to_phys(pool, vaddr);
+
+   return (void *)vaddr;
+}
+EXPORT_SYMBOL(gen_pool_dma_alloc);
+
+/**
  * gen_pool_free - free allocated special memory back to the pool
  * @pool: pool to free to
  * @addr: starting address of memory to free back to pool
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 0/8] Add and implement gen_pool_dma_alloc()

2013-11-01 Thread Nicolin Chen
Previously, we don't have a specific gen_pool_alloc() for DMA usage;
Instead, we need to use gen_pool_virt_to_phys() to convert the addr
returned from gen_pool_alloc(). So each implementation of this has
duplicated code. Thus add new helper function -- gen_pool_dma_alloc().

After gen_pool_dma_alloc() is introduced, we can replace the original
combination of gen_pool_alloc()+gen_pool_virt_to_phys() with this new
helper function. Thus this patch implement the helper function to all
the current drivers which use gen_pool_virt_to_phys().

!!---important--!!

The later 7 patches need all related driver owner to test. We can
here define a simple rule:
1, If one driver owner or maintainer doesn't like the mofication
   to his/her driver, just let me know. I would drop that patch.
2, If there's a bug and issue found after patch-testing, please
   reply the mail so that I can fix and refine the patch.
3, If one driver owner or maintainer is too busy and doesn't have
   bandwidth to test the patch, I would drop that patch from this
   series. We can reimplement it till there's someone test it.

!!---current progress---!!

  lib/genalloc: [Okay]
  ARM: davinci: [Untested]
  dma: mmp_tdma: [Untested]
  [media] coda: [Untested]
  uio: uio_pruss: [Untested]
  ALSA: memalloc: [Tested] by Nicolin Chen with i.MX6Q SabreSD
  ASoC: davinci: [Untested]
  ASoC: pxa: use [Untested]


Nicolin Chen (8):
  lib/genalloc: add a helper function for DMA buffer allocation
  ARM: davinci: use gen_pool_dma_alloc() to sram.c
  dma: mmp_tdma: use gen_pool_dma_alloc() to allocate descriptor
  [media] coda: use gen_pool_dma_alloc() to allocate iram buffer
  uio: uio_pruss: use gen_pool_dma_alloc() to allocate sram memory
  ALSA: memalloc: use gen_pool_dma_alloc() to allocate iram buffer
  ASoC: davinci: use gen_pool_dma_alloc() in davinci-pcm.c
  ASoC: pxa: use gen_pool_dma_alloc() to allocate dma buffer

 arch/arm/mach-davinci/sram.c|  9 +
 drivers/dma/mmp_tdma.c  |  7 +--
 drivers/media/platform/coda.c   |  5 ++---
 drivers/uio/uio_pruss.c |  6 ++
 include/linux/genalloc.h|  2 ++
 lib/genalloc.c  | 28 
 sound/core/memalloc.c   |  6 +-
 sound/soc/davinci/davinci-pcm.c |  3 +--
 sound/soc/pxa/mmp-pcm.c |  3 +--
 9 files changed, 39 insertions(+), 30 deletions(-)

-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 2/8] ARM: davinci: use gen_pool_dma_alloc() to sram.c

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 arch/arm/mach-davinci/sram.c | 9 +
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/arch/arm/mach-davinci/sram.c b/arch/arm/mach-davinci/sram.c
index f18928b..8540ddd 100644
--- a/arch/arm/mach-davinci/sram.c
+++ b/arch/arm/mach-davinci/sram.c
@@ -25,7 +25,6 @@ struct gen_pool *sram_get_gen_pool(void)
 
 void *sram_alloc(size_t len, dma_addr_t *dma)
 {
-   unsigned long vaddr;
dma_addr_t dma_base = davinci_soc_info.sram_dma;
 
if (dma)
@@ -33,13 +32,7 @@ void *sram_alloc(size_t len, dma_addr_t *dma)
if (!sram_pool || (dma  !dma_base))
return NULL;
 
-   vaddr = gen_pool_alloc(sram_pool, len);
-   if (!vaddr)
-   return NULL;
-
-   if (dma)
-   *dma = gen_pool_virt_to_phys(sram_pool, vaddr);
-   return (void *)vaddr;
+   return gen_pool_dma_alloc(sram_pool, len, dma);
 
 }
 EXPORT_SYMBOL(sram_alloc);
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 8/8] ASoC: pxa: use gen_pool_dma_alloc() to allocate dma buffer

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 sound/soc/pxa/mmp-pcm.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sound/soc/pxa/mmp-pcm.c b/sound/soc/pxa/mmp-pcm.c
index 8235e23..7929e19 100644
--- a/sound/soc/pxa/mmp-pcm.c
+++ b/sound/soc/pxa/mmp-pcm.c
@@ -201,10 +201,9 @@ static int mmp_pcm_preallocate_dma_buffer(struct 
snd_pcm_substream *substream,
if (!gpool)
return -ENOMEM;
 
-   buf-area = (unsigned char *)gen_pool_alloc(gpool, size);
+   buf-area = gen_pool_dma_alloc(gpool, size, buf-addr);
if (!buf-area)
return -ENOMEM;
-   buf-addr = gen_pool_virt_to_phys(gpool, (unsigned long)buf-area);
buf-bytes = size;
return 0;
 }
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 7/8] ASoC: davinci: use gen_pool_dma_alloc() in davinci-pcm.c

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 sound/soc/davinci/davinci-pcm.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sound/soc/davinci/davinci-pcm.c b/sound/soc/davinci/davinci-pcm.c
index 84a63c6..fa64cd8 100644
--- a/sound/soc/davinci/davinci-pcm.c
+++ b/sound/soc/davinci/davinci-pcm.c
@@ -267,10 +267,9 @@ static int allocate_sram(struct snd_pcm_substream 
*substream,
return 0;
 
ppcm-period_bytes_max = size;
-   iram_virt = (void *)gen_pool_alloc(sram_pool, size);
+   iram_virt = gen_pool_dma_alloc(sram_pool, size, iram_phys);
if (!iram_virt)
goto exit1;
-   iram_phys = gen_pool_virt_to_phys(sram_pool, (unsigned)iram_virt);
iram_dma = kzalloc(sizeof(*iram_dma), GFP_KERNEL);
if (!iram_dma)
goto exit2;
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 6/8] ALSA: memalloc: use gen_pool_dma_alloc() to allocate iram buffer

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 sound/core/memalloc.c | 6 +-
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
index 9d93f02..5e1c7bc 100644
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -184,11 +184,7 @@ static void snd_malloc_dev_iram(struct snd_dma_buffer 
*dmab, size_t size)
/* Assign the pool into private_data field */
dmab-private_data = pool;
 
-   dmab-area = (void *)gen_pool_alloc(pool, size);
-   if (!dmab-area)
-   return;
-
-   dmab-addr = gen_pool_virt_to_phys(pool, (unsigned long)dmab-area);
+   dmab-area = gen_pool_dma_alloc(pool, size, dmab-addr);
 }
 
 /**
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 5/8] uio: uio_pruss: use gen_pool_dma_alloc() to allocate sram memory

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 drivers/uio/uio_pruss.c | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/uio/uio_pruss.c b/drivers/uio/uio_pruss.c
index f519da9..96c4a19 100644
--- a/drivers/uio/uio_pruss.c
+++ b/drivers/uio/uio_pruss.c
@@ -158,14 +158,12 @@ static int pruss_probe(struct platform_device *dev)
if (pdata-sram_pool) {
gdev-sram_pool = pdata-sram_pool;
gdev-sram_vaddr =
-   gen_pool_alloc(gdev-sram_pool, sram_pool_sz);
+   (unsigned long)gen_pool_dma_alloc(gdev-sram_pool,
+   sram_pool_sz, gdev-sram_paddr);
if (!gdev-sram_vaddr) {
dev_err(dev-dev, Could not allocate SRAM pool\n);
goto out_free;
}
-   gdev-sram_paddr =
-   gen_pool_virt_to_phys(gdev-sram_pool,
- gdev-sram_vaddr);
}
 
gdev-ddr_vaddr = dma_alloc_coherent(dev-dev, extram_pool_sz,
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 3/8] dma: mmp_tdma: use gen_pool_dma_alloc() to allocate descriptor

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 drivers/dma/mmp_tdma.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/dma/mmp_tdma.c b/drivers/dma/mmp_tdma.c
index 2b4026d..3ddacc1 100644
--- a/drivers/dma/mmp_tdma.c
+++ b/drivers/dma/mmp_tdma.c
@@ -378,12 +378,7 @@ struct mmp_tdma_desc *mmp_tdma_alloc_descriptor(struct 
mmp_tdma_chan *tdmac)
if (!gpool)
return NULL;
 
-   tdmac-desc_arr = (void *)gen_pool_alloc(gpool, size);
-   if (!tdmac-desc_arr)
-   return NULL;
-
-   tdmac-desc_arr_phys = gen_pool_virt_to_phys(gpool,
-   (unsigned long)tdmac-desc_arr);
+   tdmac-desc_arr = gen_pool_dma_alloc(gpool, size, 
tdmac-desc_arr_phys);
 
return tdmac-desc_arr;
 }
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 4/8] [media] coda: use gen_pool_dma_alloc() to allocate iram buffer

2013-11-01 Thread Nicolin Chen
Since gen_pool_dma_alloc() is introduced, we implement it to simplify code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 drivers/media/platform/coda.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c
index ed4998c..bd72fb9 100644
--- a/drivers/media/platform/coda.c
+++ b/drivers/media/platform/coda.c
@@ -3298,13 +3298,12 @@ static int coda_probe(struct platform_device *pdev)
dev-iram_size = CODA7_IRAM_SIZE;
break;
}
-   dev-iram_vaddr = gen_pool_alloc(dev-iram_pool, dev-iram_size);
+   dev-iram_vaddr = (unsigned long)gen_pool_dma_alloc(dev-iram_pool,
+   dev-iram_size, (dma_addr_t *)dev-iram_paddr);
if (!dev-iram_vaddr) {
dev_err(pdev-dev, unable to alloc iram\n);
return -ENOMEM;
}
-   dev-iram_paddr = gen_pool_virt_to_phys(dev-iram_pool,
-   dev-iram_vaddr);
 
platform_set_drvdata(pdev, dev);
 
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH][RESEND 1/8] lib/genalloc: add a helper function for DMA buffer allocation

2013-11-01 Thread Nicolin Chen
When using pool space for DMA buffer, there might be duplicated calling
of gen_pool_alloc() and gen_pool_virt_to_phys() in each implementation.

Thus it's better to add a simple helper function, a compatible one to
the common dma_alloc_coherent(), to save some code.

Signed-off-by: Nicolin Chen b42...@freescale.com
---
 include/linux/genalloc.h |  2 ++
 lib/genalloc.c   | 28 
 2 files changed, 30 insertions(+)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index f8d41cb..1eda33d 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -94,6 +94,8 @@ static inline int gen_pool_add(struct gen_pool *pool, 
unsigned long addr,
 }
 extern void gen_pool_destroy(struct gen_pool *);
 extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
+extern void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size,
+   dma_addr_t *dma);
 extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
 extern void gen_pool_for_each_chunk(struct gen_pool *,
void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index 26cf20b..dda3116 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -313,6 +313,34 @@ retry:
 EXPORT_SYMBOL(gen_pool_alloc);
 
 /**
+ * gen_pool_dma_alloc - allocate special memory from the pool for DMA usage
+ * @pool: pool to allocate from
+ * @size: number of bytes to allocate from the pool
+ * @dma: dma-view physical address
+ *
+ * Allocate the requested number of bytes from the specified pool.
+ * Uses the pool allocation function (with first-fit algorithm by default).
+ * Can not be used in NMI handler on architectures without
+ * NMI-safe cmpxchg implementation.
+ */
+void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size, dma_addr_t *dma)
+{
+   unsigned long vaddr;
+
+   if (!pool)
+   return NULL;
+
+   vaddr = gen_pool_alloc(pool, size);
+   if (!vaddr)
+   return NULL;
+
+   *dma = gen_pool_virt_to_phys(pool, vaddr);
+
+   return (void *)vaddr;
+}
+EXPORT_SYMBOL(gen_pool_dma_alloc);
+
+/**
  * gen_pool_free - free allocated special memory back to the pool
  * @pool: pool to free to
  * @addr: starting address of memory to free back to pool
-- 
1.8.4


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html