2014-01-08 08:45:34

by Nicolin Chen

[permalink] [raw]
Subject: [PATCH 0/2] Fix SSI audio function regression when using ROM firmware

Previously we added dual-fifo script support for SSI and SDMA, meanwhile, we
switched the default script in DT to this new script. However, there're still
quite a few people using the old version or even ROM firmware which means they
don't provide any firmware to SDMA driver. In these cases, the SDMA driver'd
fail to load essential script then the audio function broken.

This series of patches mainly fix this issue by assigning a default script
number for ROM firmware case and reverting the default script in DT so that
all kinds of users would continue to run it with or without firmware.

We might later need to figure out a better solution to ensure both SDMA driver
and SSI driver could adaptively switch the new script to the old one when V2
firmware isn't provided.

This series of patches are based on Vinod's repository.

Nicolin Chen (2):
Revert "ARM: dts: imx: use dual-fifo sdma script for ssi"
dma: imx-sdma: Assign a default script number for ROM firmware cases

arch/arm/boot/dts/imx51.dtsi | 4 ++--
arch/arm/boot/dts/imx53.dtsi | 4 ++--
arch/arm/boot/dts/imx6qdl.dtsi | 12 ++++++------
arch/arm/boot/dts/imx6sl.dtsi | 12 ++++++------
drivers/dma/imx-sdma.c | 4 ++++
5 files changed, 20 insertions(+), 16 deletions(-)

--
1.8.4


2014-01-08 08:45:46

by Nicolin Chen

[permalink] [raw]
Subject: [PATCH 1/2] Revert "ARM: dts: imx: use dual-fifo sdma script for ssi"

This reverts commit b1d27c79c8377df1880447375deffa3bb82c7bd3.

Previously we switched the SSI scriprt to dual-fifo mode to reduce playback
underrun issue, which is only included by SDMA firmware version 2. However,
there are quite a lot people still using version 1 or default firmware in
the ROM code of SoC while these two kinds of firmwares do not support the
dual-fifo script and the audio function on their platform would be broken.

Thus this patch provisionally reverts the dual-fifo script to the original
single fifo script to meet all kinds of users' requirements, including the
version 1/2 or inner ROM firmware.

Reported-by: Fabio Estevam <[email protected]>
Signed-off-by: Nicolin Chen <[email protected]>
---
arch/arm/boot/dts/imx51.dtsi | 4 ++--
arch/arm/boot/dts/imx53.dtsi | 4 ++--
arch/arm/boot/dts/imx6qdl.dtsi | 12 ++++++------
arch/arm/boot/dts/imx6sl.dtsi | 12 ++++++------
4 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi
index 5be2837..4bcdd3a 100644
--- a/arch/arm/boot/dts/imx51.dtsi
+++ b/arch/arm/boot/dts/imx51.dtsi
@@ -159,8 +159,8 @@
reg = <0x70014000 0x4000>;
interrupts = <30>;
clocks = <&clks 49>;
- dmas = <&sdma 24 22 0>,
- <&sdma 25 22 0>;
+ dmas = <&sdma 24 1 0>,
+ <&sdma 25 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
fsl,ssi-dma-events = <25 24 23 22>; /* TX0 RX0 TX1 RX1 */
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi
index 7208fde..4307e80 100644
--- a/arch/arm/boot/dts/imx53.dtsi
+++ b/arch/arm/boot/dts/imx53.dtsi
@@ -153,8 +153,8 @@
reg = <0x50014000 0x4000>;
interrupts = <30>;
clocks = <&clks 49>;
- dmas = <&sdma 24 22 0>,
- <&sdma 25 22 0>;
+ dmas = <&sdma 24 1 0>,
+ <&sdma 25 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
fsl,ssi-dma-events = <25 24 23 22>; /* TX0 RX0 TX1 RX1 */
diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
index e9534f2..fb28b2e 100644
--- a/arch/arm/boot/dts/imx6qdl.dtsi
+++ b/arch/arm/boot/dts/imx6qdl.dtsi
@@ -236,8 +236,8 @@
reg = <0x02028000 0x4000>;
interrupts = <0 46 0x04>;
clocks = <&clks 178>;
- dmas = <&sdma 37 22 0>,
- <&sdma 38 22 0>;
+ dmas = <&sdma 37 1 0>,
+ <&sdma 38 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
fsl,ssi-dma-events = <38 37>;
@@ -249,8 +249,8 @@
reg = <0x0202c000 0x4000>;
interrupts = <0 47 0x04>;
clocks = <&clks 179>;
- dmas = <&sdma 41 22 0>,
- <&sdma 42 22 0>;
+ dmas = <&sdma 41 1 0>,
+ <&sdma 42 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
fsl,ssi-dma-events = <42 41>;
@@ -262,8 +262,8 @@
reg = <0x02030000 0x4000>;
interrupts = <0 48 0x04>;
clocks = <&clks 180>;
- dmas = <&sdma 45 22 0>,
- <&sdma 46 22 0>;
+ dmas = <&sdma 45 1 0>,
+ <&sdma 46 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
fsl,ssi-dma-events = <46 45>;
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
index 7b57fec..28558f1 100644
--- a/arch/arm/boot/dts/imx6sl.dtsi
+++ b/arch/arm/boot/dts/imx6sl.dtsi
@@ -199,8 +199,8 @@
reg = <0x02028000 0x4000>;
interrupts = <0 46 0x04>;
clocks = <&clks IMX6SL_CLK_SSI1>;
- dmas = <&sdma 37 22 0>,
- <&sdma 38 22 0>;
+ dmas = <&sdma 37 1 0>,
+ <&sdma 38 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
status = "disabled";
@@ -211,8 +211,8 @@
reg = <0x0202c000 0x4000>;
interrupts = <0 47 0x04>;
clocks = <&clks IMX6SL_CLK_SSI2>;
- dmas = <&sdma 41 22 0>,
- <&sdma 42 22 0>;
+ dmas = <&sdma 41 1 0>,
+ <&sdma 42 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
status = "disabled";
@@ -223,8 +223,8 @@
reg = <0x02030000 0x4000>;
interrupts = <0 48 0x04>;
clocks = <&clks IMX6SL_CLK_SSI3>;
- dmas = <&sdma 45 22 0>,
- <&sdma 46 22 0>;
+ dmas = <&sdma 45 1 0>,
+ <&sdma 46 1 0>;
dma-names = "rx", "tx";
fsl,fifo-depth = <15>;
status = "disabled";
--
1.8.4

2014-01-08 08:45:56

by Nicolin Chen

[permalink] [raw]
Subject: [PATCH 2/2] dma: imx-sdma: Assign a default script number for ROM firmware cases

i.MX series have inner firmware in its ROM code: when SDMA isn't provided
any firmware from Kernel or rootfs, the default inner ROM firmware will be
activated. However the current driver doesn't assign any script number to
this situation, and those platform running in this case would be broken.

Thus this patch adds a default script number when no external firmware being
loaded so that people would continue to be able to use basic scripts to run
their platform without any firmware.

Reported-by: Fabio Estevam <[email protected]>
Signed-off-by: Nicolin Chen <[email protected]>
---
drivers/dma/imx-sdma.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index 1522476..4e79183 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -1252,6 +1252,10 @@ static void sdma_add_scripts(struct sdma_engine *sdma,
s32 *saddr_arr = (u32 *)sdma->script_addrs;
int i;

+ /* use the default firmware in ROM if missing external firmware */
+ if (!sdma->script_number)
+ sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1;
+
for (i = 0; i < sdma->script_number; i++)
if (addr_arr[i] > 0)
saddr_arr[i] = addr_arr[i];
--
1.8.4

2014-01-08 12:03:31

by Fabio Estevam

[permalink] [raw]
Subject: Re: [PATCH 1/2] Revert "ARM: dts: imx: use dual-fifo sdma script for ssi"

On Wed, Jan 8, 2014 at 6:45 AM, Nicolin Chen <[email protected]> wrote:
> This reverts commit b1d27c79c8377df1880447375deffa3bb82c7bd3.
>
> Previously we switched the SSI scriprt to dual-fifo mode to reduce playback
> underrun issue, which is only included by SDMA firmware version 2. However,
> there are quite a lot people still using version 1 or default firmware in
> the ROM code of SoC while these two kinds of firmwares do not support the
> dual-fifo script and the audio function on their platform would be broken.
>
> Thus this patch provisionally reverts the dual-fifo script to the original
> single fifo script to meet all kinds of users' requirements, including the
> version 1/2 or inner ROM firmware.
>
> Reported-by: Fabio Estevam <[email protected]>
> Signed-off-by: Nicolin Chen <[email protected]>

Thanks, Nicolin.

This fixes audio playback without additional SDMA firmware:

Tested-by: Fabio Estevam <[email protected]>

2014-01-08 12:03:55

by Fabio Estevam

[permalink] [raw]
Subject: Re: [PATCH 2/2] dma: imx-sdma: Assign a default script number for ROM firmware cases

On Wed, Jan 8, 2014 at 6:45 AM, Nicolin Chen <[email protected]> wrote:
> i.MX series have inner firmware in its ROM code: when SDMA isn't provided
> any firmware from Kernel or rootfs, the default inner ROM firmware will be
> activated. However the current driver doesn't assign any script number to
> this situation, and those platform running in this case would be broken.
>
> Thus this patch adds a default script number when no external firmware being
> loaded so that people would continue to be able to use basic scripts to run
> their platform without any firmware.
>
> Reported-by: Fabio Estevam <[email protected]>
> Signed-off-by: Nicolin Chen <[email protected]>

Thanks, Nicolin.

This fixes audio playback without additional SDMA firmware:

Tested-by: Fabio Estevam <[email protected]>

2014-01-10 02:43:14

by Shawn Guo

[permalink] [raw]
Subject: Re: [PATCH 1/2] Revert "ARM: dts: imx: use dual-fifo sdma script for ssi"

On Wed, Jan 08, 2014 at 04:45:55PM +0800, Nicolin Chen wrote:
> This reverts commit b1d27c79c8377df1880447375deffa3bb82c7bd3.
>
> Previously we switched the SSI scriprt to dual-fifo mode to reduce playback
> underrun issue, which is only included by SDMA firmware version 2. However,
> there are quite a lot people still using version 1 or default firmware in
> the ROM code of SoC while these two kinds of firmwares do not support the
> dual-fifo script and the audio function on their platform would be broken.
>
> Thus this patch provisionally reverts the dual-fifo script to the original
> single fifo script to meet all kinds of users' requirements, including the
> version 1/2 or inner ROM firmware.
>
> Reported-by: Fabio Estevam <[email protected]>
> Signed-off-by: Nicolin Chen <[email protected]>

If Vinod's tree can be rebased, the patch can just be dropped.
Otherwise,

Acked-by: Shawn Guo <[email protected]>

2014-01-13 10:21:33

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH 1/2] Revert "ARM: dts: imx: use dual-fifo sdma script for ssi"

On Fri, Jan 10, 2014 at 10:44:03AM +0800, Shawn Guo wrote:
> On Wed, Jan 08, 2014 at 04:45:55PM +0800, Nicolin Chen wrote:
> > This reverts commit b1d27c79c8377df1880447375deffa3bb82c7bd3.
> >
> > Previously we switched the SSI scriprt to dual-fifo mode to reduce playback
> > underrun issue, which is only included by SDMA firmware version 2. However,
> > there are quite a lot people still using version 1 or default firmware in
> > the ROM code of SoC while these two kinds of firmwares do not support the
> > dual-fifo script and the audio function on their platform would be broken.
> >
> > Thus this patch provisionally reverts the dual-fifo script to the original
> > single fifo script to meet all kinds of users' requirements, including the
> > version 1/2 or inner ROM firmware.
> >
> > Reported-by: Fabio Estevam <[email protected]>
> > Signed-off-by: Nicolin Chen <[email protected]>
>
> If Vinod's tree can be rebased, the patch can just be dropped.
Nope dont want Linus's ire due to rebaseing tree so late in cyle!

--
~Vinod
> Otherwise,
>
> Acked-by: Shawn Guo <[email protected]>
>

--

2014-01-13 10:23:34

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH 0/2] Fix SSI audio function regression when using ROM firmware

On Wed, Jan 08, 2014 at 04:45:54PM +0800, Nicolin Chen wrote:
> Previously we added dual-fifo script support for SSI and SDMA, meanwhile, we
> switched the default script in DT to this new script. However, there're still
> quite a few people using the old version or even ROM firmware which means they
> don't provide any firmware to SDMA driver. In these cases, the SDMA driver'd
> fail to load essential script then the audio function broken.
>
> This series of patches mainly fix this issue by assigning a default script
> number for ROM firmware case and reverting the default script in DT so that
> all kinds of users would continue to run it with or without firmware.
>
> We might later need to figure out a better solution to ensure both SDMA driver
> and SSI driver could adaptively switch the new script to the old one when V2
> firmware isn't provided.

Applied both,

Thanks

--
~Vinod
>
> This series of patches are based on Vinod's repository.
>
> Nicolin Chen (2):
> Revert "ARM: dts: imx: use dual-fifo sdma script for ssi"
> dma: imx-sdma: Assign a default script number for ROM firmware cases
>
> arch/arm/boot/dts/imx51.dtsi | 4 ++--
> arch/arm/boot/dts/imx53.dtsi | 4 ++--
> arch/arm/boot/dts/imx6qdl.dtsi | 12 ++++++------
> arch/arm/boot/dts/imx6sl.dtsi | 12 ++++++------
> drivers/dma/imx-sdma.c | 4 ++++
> 5 files changed, 20 insertions(+), 16 deletions(-)
>
> --
> 1.8.4
>
>

--