linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* ASoC: imx dma tx burst size set to 6 and to 4 ?
@ 2011-06-30  6:25 Lambrecht Jürgen
  2011-07-04  7:28 ` Sascha Hauer
  0 siblings, 1 reply; 4+ messages in thread
From: Lambrecht Jürgen @ 2011-06-30  6:25 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

There is an inconsistency in this code:

/sound/soc/imx/imx-ssi.c:         ssi->dma_params_tx.burstsize = 4;
/sound/soc/imx/imx-pcm-dma-mx2.c: ssi->dma_params_tx.burstsize = 6;

Datasheet:
This sets the field TFWM0 in register SFCSR (SSI_SFCSR_TFWM0): the 
number of data words needed to set the empty flag (TFE0). Can be set 
from 1 to 8; FIFO size is 8 words (of 24b). And this is also the DMA 
burst size.

Which is best depends on the application (the higher the more efficient, 
but the more risk for a FIFO underrun). I would take 4.

But I guess it should only be set at 1 place, and what is then the best 
place?

Regards,
J?rgen

details:

/sound/soc/imx/imx-ssi.c: ssi->dma_params_tx.burstsize = 4;
Set in commit
commit 0a93421b6adf8ba127b3eafc4c16e3a14017e2ae
Author: Javier Martin <javier.martin@vista-silicon.com>
Date:   Tue Mar 1 15:02:06 2011 +0100

     ASoC: Fix burstsize and DSP_B format problems in imx-ssi.

     When choosing IMX_DMA flag, burtsizes are set to its default
     value (0) which leads to driver malfunction. Change them to 4.

     DSP_B interface needs additional flag to match DSP_B formats
     as described in several codecs as wm8741 and aic3205.

     Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
     Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
     Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

Index in diff:
diff --git a/sound/soc/imx/imx-ssi.c b/sound/soc/imx/imx-ssi.c
index 30894ea..bc92ec6 100644

/sound/soc/imx/imx-pcm-dma-mx2.c: ssi->dma_params_tx.burstsize = 6;
Set in commit
commit 2c4cf17a52f04fbe929977252d5b8ab81d2c6e9b
Author: Wolfram Sang <w.sang@pengutronix.de>
Date:   Fri Mar 25 16:51:44 2011 +0100

     ASoC: imx: set watermarks for mx2-dma

     They got accidently removed by f0fba2a (ASoC: multi-component - ASoC
     Multi-Component Support). Reintroduce them and get rid of the
     superfluous defines because the fiq-driver has its own hardcoded 
values.

     Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
     Acked-by: Liam Girdwood <lrg@ti.com>
     Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
     Cc: stable at kernel.org

Index in diff:
diff --git a/sound/soc/imx/imx-pcm-dma-mx2.c 
b/sound/soc/imx/imx-pcm-dma-mx2.c
index 671ef8d..b2ed764 100644
-- 

J?rgen Lambrecht
R&D Associate
Tel: +32 (0)51 303045    Fax: +32 (0)51 310670
http://www.televic-rail.com
Televic Rail NV - Leo Bekaertlaan 1 - 8870 Izegem - Belgium
Company number 0825.539.581 - RPR Kortrijk

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

* ASoC: imx dma tx burst size set to 6 and to 4 ?
  2011-06-30  6:25 ASoC: imx dma tx burst size set to 6 and to 4 ? Lambrecht Jürgen
@ 2011-07-04  7:28 ` Sascha Hauer
  2011-07-04  8:00   ` javier Martin
  0 siblings, 1 reply; 4+ messages in thread
From: Sascha Hauer @ 2011-07-04  7:28 UTC (permalink / raw)
  To: linux-arm-kernel

(Added Javier to Cc)

On Thu, Jun 30, 2011 at 08:25:29AM +0200, Lambrecht J?rgen wrote:
> Hello,
> 
> There is an inconsistency in this code:
> 
> /sound/soc/imx/imx-ssi.c:         ssi->dma_params_tx.burstsize = 4;
> /sound/soc/imx/imx-pcm-dma-mx2.c: ssi->dma_params_tx.burstsize = 6;
> 
> Datasheet:
> This sets the field TFWM0 in register SFCSR (SSI_SFCSR_TFWM0): the 
> number of data words needed to set the empty flag (TFE0). Can be set 
> from 1 to 8; FIFO size is 8 words (of 24b). And this is also the DMA 
> burst size.
> 
> Which is best depends on the application (the higher the more efficient, 
> but the more risk for a FIFO underrun). I would take 4.
> 
> But I guess it should only be set at 1 place, and what is then the best 
> place?

We need different burstsize settings for the FIQ driver and for the DMA
driver. For this reason the original intention was to set these values
in sound/soc/imx/imx-pcm-dma-mx2.c and in sound/soc/imx/imx-pcm-fiq.c.


> commit 0a93421b6adf8ba127b3eafc4c16e3a14017e2ae
> Author: Javier Martin <javier.martin@vista-silicon.com>
> Date:   Tue Mar 1 15:02:06 2011 +0100
> 
>     ASoC: Fix burstsize and DSP_B format problems in imx-ssi.
>     
>     When choosing IMX_DMA flag, burtsizes are set to its default
>     value (0) which leads to driver malfunction. Change them to 4.
>     
>     DSP_B interface needs additional flag to match DSP_B formats
>     as described in several codecs as wm8741 and aic3205.
>     
>     Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
>     Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
>     Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> 
> diff --git a/sound/soc/imx/imx-ssi.c b/sound/soc/imx/imx-ssi.c
> index 30894ea..bc92ec6 100644
> --- a/sound/soc/imx/imx-ssi.c
> +++ b/sound/soc/imx/imx-ssi.c
> @@ -108,7 +108,7 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
>  		break;
>  	case SND_SOC_DAIFMT_DSP_B:
>  		/* data on rising edge of bclk, frame high with data */
> -		strcr |= SSI_STCR_TFSL;
> +		strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0;
>  		break;
>  	case SND_SOC_DAIFMT_DSP_A:
>  		/* data on rising edge of bclk, frame high 1clk before data */
> @@ -656,6 +656,9 @@ static int imx_ssi_probe(struct platform_device *pdev)
>  	ssi->dma_params_rx.dma_addr = res->start + SSI_SRX0;
>  	ssi->dma_params_tx.dma_addr = res->start + SSI_STX0;
>  
> +	ssi->dma_params_tx.burstsize = 4;
> +	ssi->dma_params_rx.burstsize = 4;
> +

Javier, is this hunk necessary? From what I see these values should be
overwritten later anyway.

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

* ASoC: imx dma tx burst size set to 6 and to 4 ?
  2011-07-04  7:28 ` Sascha Hauer
@ 2011-07-04  8:00   ` javier Martin
  2011-07-04  8:21     ` Sascha Hauer
  0 siblings, 1 reply; 4+ messages in thread
From: javier Martin @ 2011-07-04  8:00 UTC (permalink / raw)
  To: linux-arm-kernel

2011/7/4 Sascha Hauer <s.hauer@pengutronix.de>:
> (Added Javier to Cc)
>
> On Thu, Jun 30, 2011 at 08:25:29AM +0200, Lambrecht J?rgen wrote:
>> Hello,
>>
>> There is an inconsistency in this code:
>>
>> /sound/soc/imx/imx-ssi.c: ? ? ? ? ssi->dma_params_tx.burstsize = 4;
>> /sound/soc/imx/imx-pcm-dma-mx2.c: ssi->dma_params_tx.burstsize = 6;
>>
>> Datasheet:
>> This sets the field TFWM0 in register SFCSR (SSI_SFCSR_TFWM0): the
>> number of data words needed to set the empty flag (TFE0). Can be set
>> from 1 to 8; FIFO size is 8 words (of 24b). And this is also the DMA
>> burst size.
>>
>> Which is best depends on the application (the higher the more efficient,
>> but the more risk for a FIFO underrun). I would take 4.
>>
>> But I guess it should only be set at 1 place, and what is then the best
>> place?
>
> We need different burstsize settings for the FIQ driver and for the DMA
> driver. For this reason the original intention was to set these values
> in sound/soc/imx/imx-pcm-dma-mx2.c and in sound/soc/imx/imx-pcm-fiq.c.
>
>
>> commit 0a93421b6adf8ba127b3eafc4c16e3a14017e2ae
>> Author: Javier Martin <javier.martin@vista-silicon.com>
>> Date: ? Tue Mar 1 15:02:06 2011 +0100
>>
>> ? ? ASoC: Fix burstsize and DSP_B format problems in imx-ssi.
>>
>> ? ? When choosing IMX_DMA flag, burtsizes are set to its default
>> ? ? value (0) which leads to driver malfunction. Change them to 4.
>>
>> ? ? DSP_B interface needs additional flag to match DSP_B formats
>> ? ? as described in several codecs as wm8741 and aic3205.
>>
>> ? ? Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
>> ? ? Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
>> ? ? Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
>>
>> diff --git a/sound/soc/imx/imx-ssi.c b/sound/soc/imx/imx-ssi.c
>> index 30894ea..bc92ec6 100644
>> --- a/sound/soc/imx/imx-ssi.c
>> +++ b/sound/soc/imx/imx-ssi.c
>> @@ -108,7 +108,7 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
>> ? ? ? ? ? ? ? break;
>> ? ? ? case SND_SOC_DAIFMT_DSP_B:
>> ? ? ? ? ? ? ? /* data on rising edge of bclk, frame high with data */
>> - ? ? ? ? ? ? strcr |= SSI_STCR_TFSL;
>> + ? ? ? ? ? ? strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0;
>> ? ? ? ? ? ? ? break;
>> ? ? ? case SND_SOC_DAIFMT_DSP_A:
>> ? ? ? ? ? ? ? /* data on rising edge of bclk, frame high 1clk before data */
>> @@ -656,6 +656,9 @@ static int imx_ssi_probe(struct platform_device *pdev)
>> ? ? ? ssi->dma_params_rx.dma_addr = res->start + SSI_SRX0;
>> ? ? ? ssi->dma_params_tx.dma_addr = res->start + SSI_STX0;
>>
>> + ? ? ssi->dma_params_tx.burstsize = 4;
>> + ? ? ssi->dma_params_rx.burstsize = 4;
>> +
>
> Javier, is this hunk necessary? From what I see these values should be
> overwritten later anyway.
>
> Sascha

Hi,
without this hunk, both burstsizes where set to 0. This was checked
experimentally:

- Audio didn't work properly.
- Some runtime printk's showed that burstsizes where set to 0.

It seems assignments in imx-pcm-dma-mx2.c file are done at a place
they do not take effect.


-- 
Javier Martin
Vista Silicon S.L.
CDTUC - FASE C - Oficina S-345
Avda de los Castros s/n
39005- Santander. Cantabria. Spain
+34 942 25 32 60
www.vista-silicon.com

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

* ASoC: imx dma tx burst size set to 6 and to 4 ?
  2011-07-04  8:00   ` javier Martin
@ 2011-07-04  8:21     ` Sascha Hauer
  0 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2011-07-04  8:21 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Jul 04, 2011 at 10:00:34AM +0200, javier Martin wrote:
> 2011/7/4 Sascha Hauer <s.hauer@pengutronix.de>:
> > (Added Javier to Cc)
> >
> > On Thu, Jun 30, 2011 at 08:25:29AM +0200, Lambrecht J?rgen wrote:
> >> Hello,
> >>
> >> There is an inconsistency in this code:
> >>
> >> /sound/soc/imx/imx-ssi.c: ? ? ? ? ssi->dma_params_tx.burstsize = 4;
> >> /sound/soc/imx/imx-pcm-dma-mx2.c: ssi->dma_params_tx.burstsize = 6;
> >>
> >> Datasheet:
> >> This sets the field TFWM0 in register SFCSR (SSI_SFCSR_TFWM0): the
> >> number of data words needed to set the empty flag (TFE0). Can be set
> >> from 1 to 8; FIFO size is 8 words (of 24b). And this is also the DMA
> >> burst size.
> >>
> >> Which is best depends on the application (the higher the more efficient,
> >> but the more risk for a FIFO underrun). I would take 4.
> >>
> >> But I guess it should only be set at 1 place, and what is then the best
> >> place?
> >
> > We need different burstsize settings for the FIQ driver and for the DMA
> > driver. For this reason the original intention was to set these values
> > in sound/soc/imx/imx-pcm-dma-mx2.c and in sound/soc/imx/imx-pcm-fiq.c.
> >
> >
> >> commit 0a93421b6adf8ba127b3eafc4c16e3a14017e2ae
> >> Author: Javier Martin <javier.martin@vista-silicon.com>
> >> Date: ? Tue Mar 1 15:02:06 2011 +0100
> >>
> >> ? ? ASoC: Fix burstsize and DSP_B format problems in imx-ssi.
> >>
> >> ? ? When choosing IMX_DMA flag, burtsizes are set to its default
> >> ? ? value (0) which leads to driver malfunction. Change them to 4.
> >>
> >> ? ? DSP_B interface needs additional flag to match DSP_B formats
> >> ? ? as described in several codecs as wm8741 and aic3205.
> >>
> >> ? ? Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
> >> ? ? Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
> >> ? ? Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> >>
> >> diff --git a/sound/soc/imx/imx-ssi.c b/sound/soc/imx/imx-ssi.c
> >> index 30894ea..bc92ec6 100644
> >> --- a/sound/soc/imx/imx-ssi.c
> >> +++ b/sound/soc/imx/imx-ssi.c
> >> @@ -108,7 +108,7 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
> >> ? ? ? ? ? ? ? break;
> >> ? ? ? case SND_SOC_DAIFMT_DSP_B:
> >> ? ? ? ? ? ? ? /* data on rising edge of bclk, frame high with data */
> >> - ? ? ? ? ? ? strcr |= SSI_STCR_TFSL;
> >> + ? ? ? ? ? ? strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0;
> >> ? ? ? ? ? ? ? break;
> >> ? ? ? case SND_SOC_DAIFMT_DSP_A:
> >> ? ? ? ? ? ? ? /* data on rising edge of bclk, frame high 1clk before data */
> >> @@ -656,6 +656,9 @@ static int imx_ssi_probe(struct platform_device *pdev)
> >> ? ? ? ssi->dma_params_rx.dma_addr = res->start + SSI_SRX0;
> >> ? ? ? ssi->dma_params_tx.dma_addr = res->start + SSI_STX0;
> >>
> >> + ? ? ssi->dma_params_tx.burstsize = 4;
> >> + ? ? ssi->dma_params_rx.burstsize = 4;
> >> +
> >
> > Javier, is this hunk necessary? From what I see these values should be
> > overwritten later anyway.
> >
> > Sascha
> 
> Hi,
> without this hunk, both burstsizes where set to 0. This was checked
> experimentally:
> 
> - Audio didn't work properly.
> - Some runtime printk's showed that burstsizes where set to 0.
> 
> It seems assignments in imx-pcm-dma-mx2.c file are done at a place
> they do not take effect.

I just did a quick test. In imx_ssi_dai_probe where the values are
actually used they are correctly initialized.
Anyway, the current way to initialize these values seems a bit strange.
Maybe we should pass the burstsize parameters in imx_pcm_new instead.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

end of thread, other threads:[~2011-07-04  8:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-30  6:25 ASoC: imx dma tx burst size set to 6 and to 4 ? Lambrecht Jürgen
2011-07-04  7:28 ` Sascha Hauer
2011-07-04  8:00   ` javier Martin
2011-07-04  8:21     ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).