All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai
@ 2015-06-23 10:23 ` Shengjiu Wang
  0 siblings, 0 replies; 7+ messages in thread
From: Shengjiu Wang @ 2015-06-23 10:23 UTC (permalink / raw)
  To: timur, nicoleotsuka, Xiubo.Lee, lgirdwood, broonie, perex, tiwai
  Cc: alsa-devel, linuxppc-dev

As the ssi is not the only cpu dai, there are esai, spdif, sai.
and imx_pcm_dma can be used by all of them. Especially ESAI need
a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
dai.

Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
---
 sound/soc/fsl/fsl_esai.c    |    2 +-
 sound/soc/fsl/fsl_sai.c     |    2 +-
 sound/soc/fsl/fsl_spdif.c   |    2 +-
 sound/soc/fsl/fsl_ssi.c     |    2 +-
 sound/soc/fsl/imx-pcm-dma.c |   25 +++++++++++++++++++++----
 sound/soc/fsl/imx-pcm.h     |    9 +++++++--
 sound/soc/fsl/imx-ssi.c     |    2 +-
 7 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 5c75971..8c2ddc1 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = imx_pcm_dma_init(pdev);
+	ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
 	if (ret)
 		dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
 
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 5c73bea..a18fd92 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
 		return ret;
 
 	if (sai->sai_on_imx)
-		return imx_pcm_dma_init(pdev);
+		return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
 	else
 		return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
 }
diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
index 8e93221..d1e9be7 100644
--- a/sound/soc/fsl/fsl_spdif.c
+++ b/sound/soc/fsl/fsl_spdif.c
@@ -1255,7 +1255,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = imx_pcm_dma_init(pdev);
+	ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
 	if (ret)
 		dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret);
 
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index c7647e0..e122dab 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
 		if (ret)
 			goto error_pcm;
 	} else {
-		ret = imx_pcm_dma_init(pdev);
+		ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
 		if (ret)
 			goto error_pcm;
 	}
diff --git a/sound/soc/fsl/imx-pcm-dma.c b/sound/soc/fsl/imx-pcm-dma.c
index 0db94f49..1fc01ed 100644
--- a/sound/soc/fsl/imx-pcm-dma.c
+++ b/sound/soc/fsl/imx-pcm-dma.c
@@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
 		SNDRV_PCM_INFO_MMAP_VALID |
 		SNDRV_PCM_INFO_PAUSE |
 		SNDRV_PCM_INFO_RESUME,
-	.buffer_bytes_max = IMX_SSI_DMABUF_SIZE,
+	.buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
 	.period_bytes_min = 128,
 	.period_bytes_max = 65535, /* Limited by SDMA engine */
 	.periods_min = 2,
@@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config imx_dmaengine_pcm_config = {
 	.pcm_hardware = &imx_pcm_hardware,
 	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
 	.compat_filter_fn = filter,
-	.prealloc_buffer_size = IMX_SSI_DMABUF_SIZE,
+	.prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
 };
 
-int imx_pcm_dma_init(struct platform_device *pdev)
+int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
 {
+	struct snd_dmaengine_pcm_config *config;
+	struct snd_pcm_hardware *pcm_hardware;
+
+	config = devm_kzalloc(&pdev->dev,
+			sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
+	*config = imx_dmaengine_pcm_config;
+	if (size)
+		config->prealloc_buffer_size = size;
+
+	pcm_hardware = devm_kzalloc(&pdev->dev,
+			sizeof(struct snd_pcm_hardware), GFP_KERNEL);
+	*pcm_hardware = imx_pcm_hardware;
+	if (size)
+		pcm_hardware->buffer_bytes_max = size;
+
+	config->pcm_hardware = pcm_hardware;
+
 	return devm_snd_dmaengine_pcm_register(&pdev->dev,
-		&imx_dmaengine_pcm_config,
+		config,
 		SND_DMAENGINE_PCM_FLAG_COMPAT);
 }
 EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
diff --git a/sound/soc/fsl/imx-pcm.h b/sound/soc/fsl/imx-pcm.h
index c79cb27..133c4470a 100644
--- a/sound/soc/fsl/imx-pcm.h
+++ b/sound/soc/fsl/imx-pcm.h
@@ -20,6 +20,11 @@
  */
 #define IMX_SSI_DMABUF_SIZE	(64 * 1024)
 
+#define IMX_DEFAULT_DMABUF_SIZE	(64 * 1024)
+#define IMX_SAI_DMABUF_SIZE	(64 * 1024)
+#define IMX_SPDIF_DMABUF_SIZE	(64 * 1024)
+#define IMX_ESAI_DMABUF_SIZE	(256 * 1024)
+
 static inline void
 imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
 	int dma, enum sdma_peripheral_type peripheral_type)
@@ -39,9 +44,9 @@ struct imx_pcm_fiq_params {
 };
 
 #if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
-int imx_pcm_dma_init(struct platform_device *pdev);
+int imx_pcm_dma_init(struct platform_device *pdev, size_t size);
 #else
-static inline int imx_pcm_dma_init(struct platform_device *pdev)
+static inline int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
 {
 	return -ENODEV;
 }
diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c
index 461ce27..48b2d24 100644
--- a/sound/soc/fsl/imx-ssi.c
+++ b/sound/soc/fsl/imx-ssi.c
@@ -603,7 +603,7 @@ static int imx_ssi_probe(struct platform_device *pdev)
 	ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
 
 	ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
-	ssi->dma_init = imx_pcm_dma_init(pdev);
+	ssi->dma_init = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
 
 	if (ssi->fiq_init && ssi->dma_init) {
 		ret = ssi->fiq_init;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai
@ 2015-06-23 10:23 ` Shengjiu Wang
  0 siblings, 0 replies; 7+ messages in thread
From: Shengjiu Wang @ 2015-06-23 10:23 UTC (permalink / raw)
  To: timur, nicoleotsuka, Xiubo.Lee, lgirdwood, broonie, perex, tiwai
  Cc: alsa-devel, linuxppc-dev

As the ssi is not the only cpu dai, there are esai, spdif, sai.
and imx_pcm_dma can be used by all of them. Especially ESAI need
a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
dai.

Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
---
 sound/soc/fsl/fsl_esai.c    |    2 +-
 sound/soc/fsl/fsl_sai.c     |    2 +-
 sound/soc/fsl/fsl_spdif.c   |    2 +-
 sound/soc/fsl/fsl_ssi.c     |    2 +-
 sound/soc/fsl/imx-pcm-dma.c |   25 +++++++++++++++++++++----
 sound/soc/fsl/imx-pcm.h     |    9 +++++++--
 sound/soc/fsl/imx-ssi.c     |    2 +-
 7 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 5c75971..8c2ddc1 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = imx_pcm_dma_init(pdev);
+	ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
 	if (ret)
 		dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
 
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 5c73bea..a18fd92 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
 		return ret;
 
 	if (sai->sai_on_imx)
-		return imx_pcm_dma_init(pdev);
+		return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
 	else
 		return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
 }
diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
index 8e93221..d1e9be7 100644
--- a/sound/soc/fsl/fsl_spdif.c
+++ b/sound/soc/fsl/fsl_spdif.c
@@ -1255,7 +1255,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = imx_pcm_dma_init(pdev);
+	ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
 	if (ret)
 		dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret);
 
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index c7647e0..e122dab 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
 		if (ret)
 			goto error_pcm;
 	} else {
-		ret = imx_pcm_dma_init(pdev);
+		ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
 		if (ret)
 			goto error_pcm;
 	}
diff --git a/sound/soc/fsl/imx-pcm-dma.c b/sound/soc/fsl/imx-pcm-dma.c
index 0db94f49..1fc01ed 100644
--- a/sound/soc/fsl/imx-pcm-dma.c
+++ b/sound/soc/fsl/imx-pcm-dma.c
@@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
 		SNDRV_PCM_INFO_MMAP_VALID |
 		SNDRV_PCM_INFO_PAUSE |
 		SNDRV_PCM_INFO_RESUME,
-	.buffer_bytes_max = IMX_SSI_DMABUF_SIZE,
+	.buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
 	.period_bytes_min = 128,
 	.period_bytes_max = 65535, /* Limited by SDMA engine */
 	.periods_min = 2,
@@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config imx_dmaengine_pcm_config = {
 	.pcm_hardware = &imx_pcm_hardware,
 	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
 	.compat_filter_fn = filter,
-	.prealloc_buffer_size = IMX_SSI_DMABUF_SIZE,
+	.prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
 };
 
-int imx_pcm_dma_init(struct platform_device *pdev)
+int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
 {
+	struct snd_dmaengine_pcm_config *config;
+	struct snd_pcm_hardware *pcm_hardware;
+
+	config = devm_kzalloc(&pdev->dev,
+			sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
+	*config = imx_dmaengine_pcm_config;
+	if (size)
+		config->prealloc_buffer_size = size;
+
+	pcm_hardware = devm_kzalloc(&pdev->dev,
+			sizeof(struct snd_pcm_hardware), GFP_KERNEL);
+	*pcm_hardware = imx_pcm_hardware;
+	if (size)
+		pcm_hardware->buffer_bytes_max = size;
+
+	config->pcm_hardware = pcm_hardware;
+
 	return devm_snd_dmaengine_pcm_register(&pdev->dev,
-		&imx_dmaengine_pcm_config,
+		config,
 		SND_DMAENGINE_PCM_FLAG_COMPAT);
 }
 EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
diff --git a/sound/soc/fsl/imx-pcm.h b/sound/soc/fsl/imx-pcm.h
index c79cb27..133c4470a 100644
--- a/sound/soc/fsl/imx-pcm.h
+++ b/sound/soc/fsl/imx-pcm.h
@@ -20,6 +20,11 @@
  */
 #define IMX_SSI_DMABUF_SIZE	(64 * 1024)
 
+#define IMX_DEFAULT_DMABUF_SIZE	(64 * 1024)
+#define IMX_SAI_DMABUF_SIZE	(64 * 1024)
+#define IMX_SPDIF_DMABUF_SIZE	(64 * 1024)
+#define IMX_ESAI_DMABUF_SIZE	(256 * 1024)
+
 static inline void
 imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
 	int dma, enum sdma_peripheral_type peripheral_type)
@@ -39,9 +44,9 @@ struct imx_pcm_fiq_params {
 };
 
 #if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
-int imx_pcm_dma_init(struct platform_device *pdev);
+int imx_pcm_dma_init(struct platform_device *pdev, size_t size);
 #else
-static inline int imx_pcm_dma_init(struct platform_device *pdev)
+static inline int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
 {
 	return -ENODEV;
 }
diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c
index 461ce27..48b2d24 100644
--- a/sound/soc/fsl/imx-ssi.c
+++ b/sound/soc/fsl/imx-ssi.c
@@ -603,7 +603,7 @@ static int imx_ssi_probe(struct platform_device *pdev)
 	ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
 
 	ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
-	ssi->dma_init = imx_pcm_dma_init(pdev);
+	ssi->dma_init = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
 
 	if (ssi->fiq_init && ssi->dma_init) {
 		ret = ssi->fiq_init;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai
  2015-06-23 10:23 ` Shengjiu Wang
@ 2015-06-24  7:00   ` Nicolin Chen
  -1 siblings, 0 replies; 7+ messages in thread
From: Nicolin Chen @ 2015-06-24  7:00 UTC (permalink / raw)
  To: Shengjiu Wang
  Cc: alsa-devel, timur, Xiubo.Lee, tiwai, lgirdwood, broonie, linuxppc-dev

On Tue, Jun 23, 2015 at 06:23:53PM +0800, Shengjiu Wang wrote:
> As the ssi is not the only cpu dai, there are esai, spdif, sai.
> and imx_pcm_dma can be used by all of them. Especially ESAI need
> a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
> dai.
> 
> Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>

Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>

Thanks

> ---
>  sound/soc/fsl/fsl_esai.c    |    2 +-
>  sound/soc/fsl/fsl_sai.c     |    2 +-
>  sound/soc/fsl/fsl_spdif.c   |    2 +-
>  sound/soc/fsl/fsl_ssi.c     |    2 +-
>  sound/soc/fsl/imx-pcm-dma.c |   25 +++++++++++++++++++++----
>  sound/soc/fsl/imx-pcm.h     |    9 +++++++--
>  sound/soc/fsl/imx-ssi.c     |    2 +-
>  7 files changed, 33 insertions(+), 11 deletions(-)
> 
> diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
> index 5c75971..8c2ddc1 100644
> --- a/sound/soc/fsl/fsl_esai.c
> +++ b/sound/soc/fsl/fsl_esai.c
> @@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
>  		return ret;
>  	}
>  
> -	ret = imx_pcm_dma_init(pdev);
> +	ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
>  	if (ret)
>  		dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
>  
> diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
> index 5c73bea..a18fd92 100644
> --- a/sound/soc/fsl/fsl_sai.c
> +++ b/sound/soc/fsl/fsl_sai.c
> @@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
>  		return ret;
>  
>  	if (sai->sai_on_imx)
> -		return imx_pcm_dma_init(pdev);
> +		return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
>  	else
>  		return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
>  }
> diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
> index 8e93221..d1e9be7 100644
> --- a/sound/soc/fsl/fsl_spdif.c
> +++ b/sound/soc/fsl/fsl_spdif.c
> @@ -1255,7 +1255,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
>  		return ret;
>  	}
>  
> -	ret = imx_pcm_dma_init(pdev);
> +	ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
>  	if (ret)
>  		dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret);
>  
> diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
> index c7647e0..e122dab 100644
> --- a/sound/soc/fsl/fsl_ssi.c
> +++ b/sound/soc/fsl/fsl_ssi.c
> @@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
>  		if (ret)
>  			goto error_pcm;
>  	} else {
> -		ret = imx_pcm_dma_init(pdev);
> +		ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
>  		if (ret)
>  			goto error_pcm;
>  	}
> diff --git a/sound/soc/fsl/imx-pcm-dma.c b/sound/soc/fsl/imx-pcm-dma.c
> index 0db94f49..1fc01ed 100644
> --- a/sound/soc/fsl/imx-pcm-dma.c
> +++ b/sound/soc/fsl/imx-pcm-dma.c
> @@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
>  		SNDRV_PCM_INFO_MMAP_VALID |
>  		SNDRV_PCM_INFO_PAUSE |
>  		SNDRV_PCM_INFO_RESUME,
> -	.buffer_bytes_max = IMX_SSI_DMABUF_SIZE,
> +	.buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
>  	.period_bytes_min = 128,
>  	.period_bytes_max = 65535, /* Limited by SDMA engine */
>  	.periods_min = 2,
> @@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config imx_dmaengine_pcm_config = {
>  	.pcm_hardware = &imx_pcm_hardware,
>  	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
>  	.compat_filter_fn = filter,
> -	.prealloc_buffer_size = IMX_SSI_DMABUF_SIZE,
> +	.prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
>  };
>  
> -int imx_pcm_dma_init(struct platform_device *pdev)
> +int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
>  {
> +	struct snd_dmaengine_pcm_config *config;
> +	struct snd_pcm_hardware *pcm_hardware;
> +
> +	config = devm_kzalloc(&pdev->dev,
> +			sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
> +	*config = imx_dmaengine_pcm_config;
> +	if (size)
> +		config->prealloc_buffer_size = size;
> +
> +	pcm_hardware = devm_kzalloc(&pdev->dev,
> +			sizeof(struct snd_pcm_hardware), GFP_KERNEL);
> +	*pcm_hardware = imx_pcm_hardware;
> +	if (size)
> +		pcm_hardware->buffer_bytes_max = size;
> +
> +	config->pcm_hardware = pcm_hardware;
> +
>  	return devm_snd_dmaengine_pcm_register(&pdev->dev,
> -		&imx_dmaengine_pcm_config,
> +		config,
>  		SND_DMAENGINE_PCM_FLAG_COMPAT);
>  }
>  EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
> diff --git a/sound/soc/fsl/imx-pcm.h b/sound/soc/fsl/imx-pcm.h
> index c79cb27..133c4470a 100644
> --- a/sound/soc/fsl/imx-pcm.h
> +++ b/sound/soc/fsl/imx-pcm.h
> @@ -20,6 +20,11 @@
>   */
>  #define IMX_SSI_DMABUF_SIZE	(64 * 1024)
>  
> +#define IMX_DEFAULT_DMABUF_SIZE	(64 * 1024)
> +#define IMX_SAI_DMABUF_SIZE	(64 * 1024)
> +#define IMX_SPDIF_DMABUF_SIZE	(64 * 1024)
> +#define IMX_ESAI_DMABUF_SIZE	(256 * 1024)
> +
>  static inline void
>  imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
>  	int dma, enum sdma_peripheral_type peripheral_type)
> @@ -39,9 +44,9 @@ struct imx_pcm_fiq_params {
>  };
>  
>  #if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
> -int imx_pcm_dma_init(struct platform_device *pdev);
> +int imx_pcm_dma_init(struct platform_device *pdev, size_t size);
>  #else
> -static inline int imx_pcm_dma_init(struct platform_device *pdev)
> +static inline int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
>  {
>  	return -ENODEV;
>  }
> diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c
> index 461ce27..48b2d24 100644
> --- a/sound/soc/fsl/imx-ssi.c
> +++ b/sound/soc/fsl/imx-ssi.c
> @@ -603,7 +603,7 @@ static int imx_ssi_probe(struct platform_device *pdev)
>  	ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
>  
>  	ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
> -	ssi->dma_init = imx_pcm_dma_init(pdev);
> +	ssi->dma_init = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
>  
>  	if (ssi->fiq_init && ssi->dma_init) {
>  		ret = ssi->fiq_init;
> -- 
> 1.7.9.5
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai
@ 2015-06-24  7:00   ` Nicolin Chen
  0 siblings, 0 replies; 7+ messages in thread
From: Nicolin Chen @ 2015-06-24  7:00 UTC (permalink / raw)
  To: Shengjiu Wang
  Cc: timur, Xiubo.Lee, lgirdwood, broonie, perex, tiwai, alsa-devel,
	linuxppc-dev

On Tue, Jun 23, 2015 at 06:23:53PM +0800, Shengjiu Wang wrote:
> As the ssi is not the only cpu dai, there are esai, spdif, sai.
> and imx_pcm_dma can be used by all of them. Especially ESAI need
> a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
> dai.
> 
> Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>

Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>

Thanks

> ---
>  sound/soc/fsl/fsl_esai.c    |    2 +-
>  sound/soc/fsl/fsl_sai.c     |    2 +-
>  sound/soc/fsl/fsl_spdif.c   |    2 +-
>  sound/soc/fsl/fsl_ssi.c     |    2 +-
>  sound/soc/fsl/imx-pcm-dma.c |   25 +++++++++++++++++++++----
>  sound/soc/fsl/imx-pcm.h     |    9 +++++++--
>  sound/soc/fsl/imx-ssi.c     |    2 +-
>  7 files changed, 33 insertions(+), 11 deletions(-)
> 
> diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
> index 5c75971..8c2ddc1 100644
> --- a/sound/soc/fsl/fsl_esai.c
> +++ b/sound/soc/fsl/fsl_esai.c
> @@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
>  		return ret;
>  	}
>  
> -	ret = imx_pcm_dma_init(pdev);
> +	ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
>  	if (ret)
>  		dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
>  
> diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
> index 5c73bea..a18fd92 100644
> --- a/sound/soc/fsl/fsl_sai.c
> +++ b/sound/soc/fsl/fsl_sai.c
> @@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
>  		return ret;
>  
>  	if (sai->sai_on_imx)
> -		return imx_pcm_dma_init(pdev);
> +		return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
>  	else
>  		return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
>  }
> diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
> index 8e93221..d1e9be7 100644
> --- a/sound/soc/fsl/fsl_spdif.c
> +++ b/sound/soc/fsl/fsl_spdif.c
> @@ -1255,7 +1255,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
>  		return ret;
>  	}
>  
> -	ret = imx_pcm_dma_init(pdev);
> +	ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
>  	if (ret)
>  		dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret);
>  
> diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
> index c7647e0..e122dab 100644
> --- a/sound/soc/fsl/fsl_ssi.c
> +++ b/sound/soc/fsl/fsl_ssi.c
> @@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
>  		if (ret)
>  			goto error_pcm;
>  	} else {
> -		ret = imx_pcm_dma_init(pdev);
> +		ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
>  		if (ret)
>  			goto error_pcm;
>  	}
> diff --git a/sound/soc/fsl/imx-pcm-dma.c b/sound/soc/fsl/imx-pcm-dma.c
> index 0db94f49..1fc01ed 100644
> --- a/sound/soc/fsl/imx-pcm-dma.c
> +++ b/sound/soc/fsl/imx-pcm-dma.c
> @@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
>  		SNDRV_PCM_INFO_MMAP_VALID |
>  		SNDRV_PCM_INFO_PAUSE |
>  		SNDRV_PCM_INFO_RESUME,
> -	.buffer_bytes_max = IMX_SSI_DMABUF_SIZE,
> +	.buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
>  	.period_bytes_min = 128,
>  	.period_bytes_max = 65535, /* Limited by SDMA engine */
>  	.periods_min = 2,
> @@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config imx_dmaengine_pcm_config = {
>  	.pcm_hardware = &imx_pcm_hardware,
>  	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
>  	.compat_filter_fn = filter,
> -	.prealloc_buffer_size = IMX_SSI_DMABUF_SIZE,
> +	.prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
>  };
>  
> -int imx_pcm_dma_init(struct platform_device *pdev)
> +int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
>  {
> +	struct snd_dmaengine_pcm_config *config;
> +	struct snd_pcm_hardware *pcm_hardware;
> +
> +	config = devm_kzalloc(&pdev->dev,
> +			sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
> +	*config = imx_dmaengine_pcm_config;
> +	if (size)
> +		config->prealloc_buffer_size = size;
> +
> +	pcm_hardware = devm_kzalloc(&pdev->dev,
> +			sizeof(struct snd_pcm_hardware), GFP_KERNEL);
> +	*pcm_hardware = imx_pcm_hardware;
> +	if (size)
> +		pcm_hardware->buffer_bytes_max = size;
> +
> +	config->pcm_hardware = pcm_hardware;
> +
>  	return devm_snd_dmaengine_pcm_register(&pdev->dev,
> -		&imx_dmaengine_pcm_config,
> +		config,
>  		SND_DMAENGINE_PCM_FLAG_COMPAT);
>  }
>  EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
> diff --git a/sound/soc/fsl/imx-pcm.h b/sound/soc/fsl/imx-pcm.h
> index c79cb27..133c4470a 100644
> --- a/sound/soc/fsl/imx-pcm.h
> +++ b/sound/soc/fsl/imx-pcm.h
> @@ -20,6 +20,11 @@
>   */
>  #define IMX_SSI_DMABUF_SIZE	(64 * 1024)
>  
> +#define IMX_DEFAULT_DMABUF_SIZE	(64 * 1024)
> +#define IMX_SAI_DMABUF_SIZE	(64 * 1024)
> +#define IMX_SPDIF_DMABUF_SIZE	(64 * 1024)
> +#define IMX_ESAI_DMABUF_SIZE	(256 * 1024)
> +
>  static inline void
>  imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
>  	int dma, enum sdma_peripheral_type peripheral_type)
> @@ -39,9 +44,9 @@ struct imx_pcm_fiq_params {
>  };
>  
>  #if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
> -int imx_pcm_dma_init(struct platform_device *pdev);
> +int imx_pcm_dma_init(struct platform_device *pdev, size_t size);
>  #else
> -static inline int imx_pcm_dma_init(struct platform_device *pdev)
> +static inline int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
>  {
>  	return -ENODEV;
>  }
> diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c
> index 461ce27..48b2d24 100644
> --- a/sound/soc/fsl/imx-ssi.c
> +++ b/sound/soc/fsl/imx-ssi.c
> @@ -603,7 +603,7 @@ static int imx_ssi_probe(struct platform_device *pdev)
>  	ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
>  
>  	ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
> -	ssi->dma_init = imx_pcm_dma_init(pdev);
> +	ssi->dma_init = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
>  
>  	if (ssi->fiq_init && ssi->dma_init) {
>  		ret = ssi->fiq_init;
> -- 
> 1.7.9.5
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai
  2015-06-24  7:00   ` Nicolin Chen
@ 2015-06-24 12:34     ` Timur Tabi
  -1 siblings, 0 replies; 7+ messages in thread
From: Timur Tabi @ 2015-06-24 12:34 UTC (permalink / raw)
  To: Nicolin Chen, Shengjiu Wang
  Cc: alsa-devel, Xiubo.Lee, tiwai, lgirdwood, broonie, linuxppc-dev

Nicolin Chen wrote:
>> >As the ssi is not the only cpu dai, there are esai, spdif, sai.
>> >and imx_pcm_dma can be used by all of them. Especially ESAI need
>> >a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
>> >dai.
>> >
>> >Signed-off-by: Shengjiu Wang<shengjiu.wang@freescale.com>
> Acked-by: Nicolin Chen<nicoleotsuka@gmail.com>

Acked-by: Timur Tabi <timur@tabi.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai
@ 2015-06-24 12:34     ` Timur Tabi
  0 siblings, 0 replies; 7+ messages in thread
From: Timur Tabi @ 2015-06-24 12:34 UTC (permalink / raw)
  To: Nicolin Chen, Shengjiu Wang
  Cc: Xiubo.Lee, lgirdwood, broonie, perex, tiwai, alsa-devel, linuxppc-dev

Nicolin Chen wrote:
>> >As the ssi is not the only cpu dai, there are esai, spdif, sai.
>> >and imx_pcm_dma can be used by all of them. Especially ESAI need
>> >a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
>> >dai.
>> >
>> >Signed-off-by: Shengjiu Wang<shengjiu.wang@freescale.com>
> Acked-by: Nicolin Chen<nicoleotsuka@gmail.com>

Acked-by: Timur Tabi <timur@tabi.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Applied "ASoC: fsl: Add dedicated DMA buffer size for each cpu dai" to the asoc tree
  2015-06-23 10:23 ` Shengjiu Wang
  (?)
  (?)
@ 2015-07-07 13:58 ` Mark Brown
  -1 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2015-07-07 13:58 UTC (permalink / raw)
  To: Shengjiu Wang, Nicolin Chen, Timur Tabi, Mark Brown; +Cc: alsa-devel

The patch

   ASoC: fsl: Add dedicated DMA buffer size for each cpu dai

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 0d69e0dddf5fe86675c56bc0f0520ffb0cbf1fcd Mon Sep 17 00:00:00 2001
From: Shengjiu Wang <shengjiu.wang@freescale.com>
Date: Tue, 23 Jun 2015 18:23:53 +0800
Subject: [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai

As the ssi is not the only cpu dai, there are esai, spdif, sai.
and imx_pcm_dma can be used by all of them. Especially ESAI need
a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
dai.

Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>
Acked-by: Timur Tabi <timur@tabi.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/fsl/fsl_esai.c    |  2 +-
 sound/soc/fsl/fsl_sai.c     |  2 +-
 sound/soc/fsl/fsl_spdif.c   |  2 +-
 sound/soc/fsl/fsl_ssi.c     |  2 +-
 sound/soc/fsl/imx-pcm-dma.c | 25 +++++++++++++++++++++----
 sound/soc/fsl/imx-pcm.h     |  9 +++++++--
 sound/soc/fsl/imx-ssi.c     |  2 +-
 7 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 5c75971..8c2ddc1 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = imx_pcm_dma_init(pdev);
+	ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
 	if (ret)
 		dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
 
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 5c73bea..a18fd92 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
 		return ret;
 
 	if (sai->sai_on_imx)
-		return imx_pcm_dma_init(pdev);
+		return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
 	else
 		return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
 }
diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
index 8e93221..d1e9be7 100644
--- a/sound/soc/fsl/fsl_spdif.c
+++ b/sound/soc/fsl/fsl_spdif.c
@@ -1255,7 +1255,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = imx_pcm_dma_init(pdev);
+	ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
 	if (ret)
 		dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret);
 
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index c7647e0..e122dab 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
 		if (ret)
 			goto error_pcm;
 	} else {
-		ret = imx_pcm_dma_init(pdev);
+		ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
 		if (ret)
 			goto error_pcm;
 	}
diff --git a/sound/soc/fsl/imx-pcm-dma.c b/sound/soc/fsl/imx-pcm-dma.c
index 0db94f49..1fc01ed 100644
--- a/sound/soc/fsl/imx-pcm-dma.c
+++ b/sound/soc/fsl/imx-pcm-dma.c
@@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
 		SNDRV_PCM_INFO_MMAP_VALID |
 		SNDRV_PCM_INFO_PAUSE |
 		SNDRV_PCM_INFO_RESUME,
-	.buffer_bytes_max = IMX_SSI_DMABUF_SIZE,
+	.buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
 	.period_bytes_min = 128,
 	.period_bytes_max = 65535, /* Limited by SDMA engine */
 	.periods_min = 2,
@@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config imx_dmaengine_pcm_config = {
 	.pcm_hardware = &imx_pcm_hardware,
 	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
 	.compat_filter_fn = filter,
-	.prealloc_buffer_size = IMX_SSI_DMABUF_SIZE,
+	.prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
 };
 
-int imx_pcm_dma_init(struct platform_device *pdev)
+int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
 {
+	struct snd_dmaengine_pcm_config *config;
+	struct snd_pcm_hardware *pcm_hardware;
+
+	config = devm_kzalloc(&pdev->dev,
+			sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
+	*config = imx_dmaengine_pcm_config;
+	if (size)
+		config->prealloc_buffer_size = size;
+
+	pcm_hardware = devm_kzalloc(&pdev->dev,
+			sizeof(struct snd_pcm_hardware), GFP_KERNEL);
+	*pcm_hardware = imx_pcm_hardware;
+	if (size)
+		pcm_hardware->buffer_bytes_max = size;
+
+	config->pcm_hardware = pcm_hardware;
+
 	return devm_snd_dmaengine_pcm_register(&pdev->dev,
-		&imx_dmaengine_pcm_config,
+		config,
 		SND_DMAENGINE_PCM_FLAG_COMPAT);
 }
 EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
diff --git a/sound/soc/fsl/imx-pcm.h b/sound/soc/fsl/imx-pcm.h
index c79cb27..133c4470a 100644
--- a/sound/soc/fsl/imx-pcm.h
+++ b/sound/soc/fsl/imx-pcm.h
@@ -20,6 +20,11 @@
  */
 #define IMX_SSI_DMABUF_SIZE	(64 * 1024)
 
+#define IMX_DEFAULT_DMABUF_SIZE	(64 * 1024)
+#define IMX_SAI_DMABUF_SIZE	(64 * 1024)
+#define IMX_SPDIF_DMABUF_SIZE	(64 * 1024)
+#define IMX_ESAI_DMABUF_SIZE	(256 * 1024)
+
 static inline void
 imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
 	int dma, enum sdma_peripheral_type peripheral_type)
@@ -39,9 +44,9 @@ struct imx_pcm_fiq_params {
 };
 
 #if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
-int imx_pcm_dma_init(struct platform_device *pdev);
+int imx_pcm_dma_init(struct platform_device *pdev, size_t size);
 #else
-static inline int imx_pcm_dma_init(struct platform_device *pdev)
+static inline int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
 {
 	return -ENODEV;
 }
diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c
index 461ce27..48b2d24 100644
--- a/sound/soc/fsl/imx-ssi.c
+++ b/sound/soc/fsl/imx-ssi.c
@@ -603,7 +603,7 @@ static int imx_ssi_probe(struct platform_device *pdev)
 	ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
 
 	ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
-	ssi->dma_init = imx_pcm_dma_init(pdev);
+	ssi->dma_init = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
 
 	if (ssi->fiq_init && ssi->dma_init) {
 		ret = ssi->fiq_init;
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-07-07 13:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-23 10:23 [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai Shengjiu Wang
2015-06-23 10:23 ` Shengjiu Wang
2015-06-24  7:00 ` Nicolin Chen
2015-06-24  7:00   ` Nicolin Chen
2015-06-24 12:34   ` Timur Tabi
2015-06-24 12:34     ` Timur Tabi
2015-07-07 13:58 ` Applied "ASoC: fsl: Add dedicated DMA buffer size for each cpu dai" to the asoc tree Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.