diff mbox

[v1,1/1] ASoC: rsnd: ssi: Fix issue in dma data address assignment

Message ID 5A3B5EFE.8070606@mentor.com (mailing list archive)
State New, archived
Headers show

Commit Message

Wang, Jiada Dec. 21, 2017, 7:13 a.m. UTC
Hi Morimoto-san

On 12/20/2017 10:42 PM, Kuninori Morimoto wrote:
> Hi Jiada
>
> Thank you for your patch
>
>> Same SSI device may be used in different dai links,
>> by only having one dma struct in rsnd_ssi, after the first
>> instance's dma config be initilized, the following instances
>> can no longer configure dma, this causes issue, when their
>> dma data address are different from the first instance.
>>
>> This patch by introduces two dma struct in rdai, each SSI
>> instance in a dai link is assigned with two dma struct,
>> to store dma configuration for playback and capture.
>>
>> Signed-off-by: Jiada Wang<jiada_wang@mentor.com>
>> ---
> (snip)
>> @@ -876,7 +876,7 @@ static int rsnd_ssi_dma_probe(struct rsnd_mod *mod,
>>   		return ret;
>>
>>   	/* SSI probe might be called many times in MUX multi path */
>> -	ret = rsnd_dma_attach(io, mod,&ssi->dma);
>> +	ret = rsnd_dma_attach(io, mod,&rdai->dma[is_play]);
>>
>>   	return ret;
>>   }
> Some cases, same SSI might be used on different dai links.
> In my understanding, it happen if you uses MIXer.
> But, are you using same SSI for both playback and capture ??
No, I am not using same SSI in both playback and capture of same dai-link,
without this patch, I am seeing issues when rcar sound is working in 
multi DAI mode,
for example with the following configuration

playing with dai1 will have issue.

Thanks,
Jiada

> Best regards
> ---
> Kuninori Morimoto

Comments

Kuninori Morimoto Dec. 21, 2017, 7:39 a.m. UTC | #1
Hi Jiada

> diff --git a/arch/arm64/boot/dts/renesas/salvator-common.dtsi
> b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
> index a298df7..16f3214 100644
> --- a/arch/arm64/boot/dts/renesas/salvator-common.dtsi
> +++ b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
> @@ -94,14 +94,24 @@
>         };
> 
>         rsnd_ak4613: sound {
> -               compatible = "simple-audio-card";
> +               compatible = "simple-scu-audio-card";
> 
>                 simple-audio-card,format = "left_j";
>                 simple-audio-card,bitclock-master = <&sndcpu>;
>                 simple-audio-card,frame-master = <&sndcpu>;
> 
> -               sndcpu: simple-audio-card,cpu {
> -                       sound-dai = <&rcar_sound>;
> +               simple-audio-card,prefix = "ak4613";
> +                simple-audio-card,routing =
> +                        "ak4613 Playback", "DAI0 Playback",
> +                        "DAI0 Capture", "ak4613 Capture",
> +                        "ak4613 Playback", "DAI1 Playback";
> +
> +               sndcpu: simple-audio-card,cpu@0 {
> +                       sound-dai = <&rcar_sound 0>;
> +               };
> +
> +               simple-audio-card,cpu@1 {
> +                       sound-dai = <&rcar_sound 1>;
>                 };
> 
>                 sndcodec: simple-audio-card,codec {
> @@ -517,7 +527,7 @@
>         pinctrl-names = "default";
> 
>         /* Single DAI */
> -       #sound-dai-cells = <0>;
> +       #sound-dai-cells = <1>;
> 
>         /* audio_clkout0/1/2/3 */
>  #clock-cells = <1>;
> @@ -549,6 +559,9 @@
>                         playback = <&ssi0 &src0 &dvc0>;
>                         capture  = <&ssi1 &src1 &dvc1>;
>                 };
> +               dai1 {
> +                       playback = <&ssi0>;
> +               };
>         };
>  };
> 
> playing with dai1 will have issue.

I guess so because you are using strange settings...
What do you want to do ?

Best regards
---
Kuninori Morimoto
Wang, Jiada Dec. 21, 2017, 9:16 a.m. UTC | #2
Hi Morimoto-san

On 12/20/2017 11:39 PM, Kuninori Morimoto wrote:
> Hi Jiada
>
>> diff --git a/arch/arm64/boot/dts/renesas/salvator-common.dtsi
>> b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
>> index a298df7..16f3214 100644
>> --- a/arch/arm64/boot/dts/renesas/salvator-common.dtsi
>> +++ b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
>> @@ -94,14 +94,24 @@
>>          };
>>
>>          rsnd_ak4613: sound {
>> -               compatible = "simple-audio-card";
>> +               compatible = "simple-scu-audio-card";
>>
>>                  simple-audio-card,format = "left_j";
>>                  simple-audio-card,bitclock-master =<&sndcpu>;
>>                  simple-audio-card,frame-master =<&sndcpu>;
>>
>> -               sndcpu: simple-audio-card,cpu {
>> -                       sound-dai =<&rcar_sound>;
>> +               simple-audio-card,prefix = "ak4613";
>> +                simple-audio-card,routing =
>> +                        "ak4613 Playback", "DAI0 Playback",
>> +                        "DAI0 Capture", "ak4613 Capture",
>> +                        "ak4613 Playback", "DAI1 Playback";
>> +
>> +               sndcpu: simple-audio-card,cpu@0 {
>> +                       sound-dai =<&rcar_sound 0>;
>> +               };
>> +
>> +               simple-audio-card,cpu@1 {
>> +                       sound-dai =<&rcar_sound 1>;
>>                  };
>>
>>                  sndcodec: simple-audio-card,codec {
>> @@ -517,7 +527,7 @@
>>          pinctrl-names = "default";
>>
>>          /* Single DAI */
>> -       #sound-dai-cells =<0>;
>> +       #sound-dai-cells =<1>;
>>
>>          /* audio_clkout0/1/2/3 */
>>   #clock-cells =<1>;
>> @@ -549,6 +559,9 @@
>>                          playback =<&ssi0&src0&dvc0>;
>>                          capture  =<&ssi1&src1&dvc1>;
>>                  };
>> +               dai1 {
>> +                       playback =<&ssi0>;
>> +               };
>>          };
>>   };
>>
>> playing with dai1 will have issue.
> I guess so because you are using strange settings...
> What do you want to do ?
this is just an example setting to reproduce the issue with current 
mainline kernel,

We have enabled TDM Split and Ex-Split mode in our kernel,
and SSI(U)'s dma address diffs based on the BUSIF it is using,
so have a single dma data struct per rsnd_ssi will cause issue when
SSI isn't working with BUSIF0.

Do you have any suggestion to address this issue?


Thanks,
Jiada
> Best regards
> ---
> Kuninori Morimoto
Kuninori Morimoto Dec. 22, 2017, 12:43 a.m. UTC | #3
Hi Jiada

Thank you for your feedback
I understand your situation

> We have enabled TDM Split and Ex-Split mode in our kernel,
> and SSI(U)'s dma address diffs based on the BUSIF it is using,
> so have a single dma data struct per rsnd_ssi will cause issue when
> SSI isn't working with BUSIF0.

First of all, "TDM (Ex) Split mode" is not yet supported.
And unfortunately, your patch is not enough for it.
I guess you enabled it with many local patches,
and posted one of them ?

It is very advanced feature, we need to consider about
channel/sampling rate/data width/settings/address etc etc etc...
Lots of things we need to solve/care !
DMA pointer is one of them.

If we focus only to DMA, your patch is still wrong I think.
"Playback/Capture direction" is not related to this topic.
1 DMA on 1 DAI is enough ?
And we need to update rsnd_gen2_dma_addr() too for DMA address.

> Do you have any suggestion to address this issue?

I have no idea at this point.
Missing part for TDM (Ex) Split mode is not only DMA pointer.

Why do you want to use it ?
If you want to do is only "use 2 DAIs for playback",
how about to use MIXer ? It is already supported on upstream.

Best regards
---
Kuninori Morimoto
Wang, Jiada Dec. 22, 2017, 2:27 a.m. UTC | #4
Hi Morimoto-san

On 12/21/2017 04:43 PM, Kuninori Morimoto wrote:
> Hi Jiada
>
> Thank you for your feedback
> I understand your situation
>
>> We have enabled TDM Split and Ex-Split mode in our kernel,
>> and SSI(U)'s dma address diffs based on the BUSIF it is using,
>> so have a single dma data struct per rsnd_ssi will cause issue when
>> SSI isn't working with BUSIF0.
> First of all, "TDM (Ex) Split mode" is not yet supported.
> And unfortunately, your patch is not enough for it.
> I guess you enabled it with many local patches,
> and posted one of them ?
>
> It is very advanced feature, we need to consider about
> channel/sampling rate/data width/settings/address etc etc etc...
> Lots of things we need to solve/care !
> DMA pointer is one of them.
>
> If we focus only to DMA, your patch is still wrong I think.
> "Playback/Capture direction" is not related to this topic.
> 1 DMA on 1 DAI is enough ?
> And we need to update rsnd_gen2_dma_addr() too for DMA address.
Yes, this patch is only one of a serial patch set to enable TDM (Ex) 
Split mode,
I submitted it alone because think it is independent,
but you are right, to make the background more clear,
I will submit the whole patch set together with this single patch in v2,
(this probably will take some time)

Thanks,
Jiada
>> Do you have any suggestion to address this issue?
> I have no idea at this point.
> Missing part for TDM (Ex) Split mode is not only DMA pointer.
>
> Why do you want to use it ?
> If you want to do is only "use 2 DAIs for playback",
> how about to use MIXer ? It is already supported on upstream.
> Best regards
> ---
> Kuninori Morimoto
diff mbox

Patch

diff --git a/arch/arm64/boot/dts/renesas/salvator-common.dtsi 
b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
index a298df7..16f3214 100644
--- a/arch/arm64/boot/dts/renesas/salvator-common.dtsi
+++ b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
@@ -94,14 +94,24 @@ 
         };

         rsnd_ak4613: sound {
-               compatible = "simple-audio-card";
+               compatible = "simple-scu-audio-card";

                 simple-audio-card,format = "left_j";
                 simple-audio-card,bitclock-master = <&sndcpu>;
                 simple-audio-card,frame-master = <&sndcpu>;

-               sndcpu: simple-audio-card,cpu {
-                       sound-dai = <&rcar_sound>;
+               simple-audio-card,prefix = "ak4613";
+                simple-audio-card,routing =
+                        "ak4613 Playback", "DAI0 Playback",
+                        "DAI0 Capture", "ak4613 Capture",
+                        "ak4613 Playback", "DAI1 Playback";
+
+               sndcpu: simple-audio-card,cpu@0 {
+                       sound-dai = <&rcar_sound 0>;
+               };
+
+               simple-audio-card,cpu@1 {
+                       sound-dai = <&rcar_sound 1>;
                 };

                 sndcodec: simple-audio-card,codec {
@@ -517,7 +527,7 @@ 
         pinctrl-names = "default";

         /* Single DAI */
-       #sound-dai-cells = <0>;
+       #sound-dai-cells = <1>;

         /* audio_clkout0/1/2/3 */
  #clock-cells = <1>;
@@ -549,6 +559,9 @@ 
                         playback = <&ssi0 &src0 &dvc0>;
                         capture  = <&ssi1 &src1 &dvc1>;
                 };
+               dai1 {
+                       playback = <&ssi0>;
+               };
         };
  };