All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ASoC: pxa: remove duplicated snd_soc_component_driver ops
@ 2018-09-03 20:25 petrcvekcz
  2018-09-10 18:55 ` Robert Jarzmik
  0 siblings, 1 reply; 3+ messages in thread
From: petrcvekcz @ 2018-09-03 20:25 UTC (permalink / raw)
  To: daniel, haojian.zhuang, lgirdwood, broonie, marek.vasut
  Cc: alsa-devel, dbaryshkov, Petr Cvek, dirk, zhouqiao, philipp.zabel,
	lost.distance, robert.jarzmik

From: Petr Cvek <petrcvekcz@gmail.com>

The sound soc drivers which are using a platform driver pxa-pcm-audio and
cpu dai drivers from the pxa tree have defined pxa2xx_soc_pcm_new() twice.
The function will get called in soc_new_pcm() for two components (platform
and cpu dai) which causes a double allocation of DMA resources and later
during a close of the playback/capture a kernel warning:

 WARNING: CPU: 0 PID: 892 at drivers/dma/dmaengine.c:788 dma_release_channel+0x44/0xa0
 chan reference count 0 != 1
 Modules linked in: snd_soc_magician snd_soc_pxa2xx snd_pxa2xx_lib ...
 CPU: 0 PID: 892 Comm: aplay Tainted: G C 4.18.0-rc6-next-20180726-magician+ #16
 Hardware name: HTC Magician
 [<c0107d90>] (unwind_backtrace) from [<c010594c>] (show_stack+0x10/0x14)
 [<c010594c>] (show_stack) from [<c0111680>] (__warn+0xd4/0xec)
 [<c0111680>] (__warn) from [<c01112d0>] (warn_slowpath_fmt+0x44/0x6c)
 [<c01112d0>] (warn_slowpath_fmt) from [<c034908c>] (dma_release_channel+0x44/0xa0)
 [<c034908c>] (dma_release_channel) from [<bf330528>] (snd_dmaengine_pcm_close_release_chan+0x44/0xb1c [snd_pcm_dmaengine])
 [<bf330528>] (snd_dmaengine_pcm_close_release_chan [snd_pcm_dmaengine]) from [<bf26c29c>] (soc_pcm_components_close+0x8c/0xac [snd_soc_core])
 [<bf26c29c>] (soc_pcm_components_close [snd_soc_core]) from [<bf26c3a0>] (soc_pcm_close+0xe4/0xd44 [snd_soc_core])
 [<bf26c3a0>] (soc_pcm_close [snd_soc_core]) from [<bf167254>] (snd_pcm_release_substream+0x88/0x108 [snd_pcm])
 [<bf167254>] (snd_pcm_release_substream [snd_pcm]) from [<bf167330>] (snd_pcm_release+0x5c/0xd2c [snd_pcm])
 [<bf167330>] (snd_pcm_release [snd_pcm]) from [<c01c39e4>] (__fput+0xdc/0x1e8)
 [<c01c39e4>] (__fput) from [<c0129e7c>] (task_work_run+0xc4/0xd4)
 [<c0129e7c>] (task_work_run) from [<c01053ac>] (do_work_pending+0xc0/0xc8)
 [<c01053ac>] (do_work_pending) from [<c0101068>] (slow_work_pending+0xc/0x20)
 Exception stack(0xc2fdffb0 to 0xc2fdfff8)
 ffa0:                                     00000000 0154d1a0 01542a3c 00000000
 ffc0: 0154d150 00000000 0009283c 00000006 000003f0 0154d4c8 00000000 0154d4c8
 ffe0: b6ee7d70 bef13960 b6e547b8 b6cfe018 60000010 00000004

The problem was found for cpu dai drivers: pxa-i2s and pxa-ssp and by
a calltrace sent from Robert Jarzmik on pxa-ac97 (although there was no
observed kernel warning). The git grep shows these 3 cpu dai drivers are
the only one which assign the .pcm_new to pxa2xx_soc_pcm_new() and almost
every machine which is using one of these cpu dai drivers is using the
platform driver pxa-pcm-audio too. The only exception is TTC_DKB board
which is using a platform driver mmp-pcm-audio. A quick look in the code
of mmp-pcm-audio shows it allocates the DMA in the similar way as PXA.

The solution is to remove one of pxa2xx_soc_pcm_new() assignments and the
patch does it for 3 cpu dai drivers (SSP/I2S/AC97).

The result was tested on HTC Magician board (SSP for playback, I2S for
capture) and the DMA buffers are correctly allocated.

Signed-off-by: Petr Cvek <petrcvekcz@gmail.com>
---
 sound/soc/pxa/pxa-ssp.c     | 3 ---
 sound/soc/pxa/pxa2xx-ac97.c | 3 ---
 sound/soc/pxa/pxa2xx-i2s.c  | 3 ---
 3 files changed, 9 deletions(-)

diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index 69033e1a84e6..9689a1552d53 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -867,9 +867,6 @@ static struct snd_soc_dai_driver pxa_ssp_dai = {
 
 static const struct snd_soc_component_driver pxa_ssp_component = {
 	.name		= "pxa-ssp",
-	.ops		= &pxa2xx_pcm_ops,
-	.pcm_new	= pxa2xx_soc_pcm_new,
-	.pcm_free	= pxa2xx_pcm_free_dma_buffers,
 };
 
 #ifdef CONFIG_OF
diff --git a/sound/soc/pxa/pxa2xx-ac97.c b/sound/soc/pxa/pxa2xx-ac97.c
index 9f779657bc86..c52b33802bf2 100644
--- a/sound/soc/pxa/pxa2xx-ac97.c
+++ b/sound/soc/pxa/pxa2xx-ac97.c
@@ -214,9 +214,6 @@ static struct snd_soc_dai_driver pxa_ac97_dai_driver[] = {
 
 static const struct snd_soc_component_driver pxa_ac97_component = {
 	.name		= "pxa-ac97",
-	.ops		= &pxa2xx_pcm_ops,
-	.pcm_new	= pxa2xx_soc_pcm_new,
-	.pcm_free	= pxa2xx_pcm_free_dma_buffers,
 };
 
 #ifdef CONFIG_OF
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c
index 42820121e5b9..e7184de0de04 100644
--- a/sound/soc/pxa/pxa2xx-i2s.c
+++ b/sound/soc/pxa/pxa2xx-i2s.c
@@ -364,9 +364,6 @@ static struct snd_soc_dai_driver pxa_i2s_dai = {
 
 static const struct snd_soc_component_driver pxa_i2s_component = {
 	.name		= "pxa-i2s",
-	.ops		= &pxa2xx_pcm_ops,
-	.pcm_new	= pxa2xx_soc_pcm_new,
-	.pcm_free	= pxa2xx_pcm_free_dma_buffers,
 };
 
 static int pxa2xx_i2s_drv_probe(struct platform_device *pdev)
-- 
2.18.0

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

* Re: [PATCH] ASoC: pxa: remove duplicated snd_soc_component_driver ops
  2018-09-03 20:25 [PATCH] ASoC: pxa: remove duplicated snd_soc_component_driver ops petrcvekcz
@ 2018-09-10 18:55 ` Robert Jarzmik
  2018-09-11 20:57   ` Robert Jarzmik
  0 siblings, 1 reply; 3+ messages in thread
From: Robert Jarzmik @ 2018-09-10 18:55 UTC (permalink / raw)
  To: petrcvekcz
  Cc: alsa-devel, dbaryshkov, lgirdwood, haojian.zhuang, dirk,
	marek.vasut, zhouqiao, broonie, philipp.zabel, lost.distance,
	daniel

petrcvekcz@gmail.com writes:

> From: Petr Cvek <petrcvekcz@gmail.com>
>
> The sound soc drivers which are using a platform driver pxa-pcm-audio and
> cpu dai drivers from the pxa tree have defined pxa2xx_soc_pcm_new() twice.
> The function will get called in soc_new_pcm() for two components (platform
> and cpu dai) which causes a double allocation of DMA resources and later
> during a close of the playback/capture a kernel warning:
>
>  WARNING: CPU: 0 PID: 892 at drivers/dma/dmaengine.c:788 dma_release_channel+0x44/0xa0
>  chan reference count 0 != 1
>  Modules linked in: snd_soc_magician snd_soc_pxa2xx snd_pxa2xx_lib ...
>  CPU: 0 PID: 892 Comm: aplay Tainted: G C 4.18.0-rc6-next-20180726-magician+ #16
>  Hardware name: HTC Magician
>  [<c0107d90>] (unwind_backtrace) from [<c010594c>] (show_stack+0x10/0x14)
>  [<c010594c>] (show_stack) from [<c0111680>] (__warn+0xd4/0xec)
>  [<c0111680>] (__warn) from [<c01112d0>] (warn_slowpath_fmt+0x44/0x6c)
>  [<c01112d0>] (warn_slowpath_fmt) from [<c034908c>] (dma_release_channel+0x44/0xa0)
>  [<c034908c>] (dma_release_channel) from [<bf330528>] (snd_dmaengine_pcm_close_release_chan+0x44/0xb1c [snd_pcm_dmaengine])
>  [<bf330528>] (snd_dmaengine_pcm_close_release_chan [snd_pcm_dmaengine]) from [<bf26c29c>] (soc_pcm_components_close+0x8c/0xac [snd_soc_core])
>  [<bf26c29c>] (soc_pcm_components_close [snd_soc_core]) from [<bf26c3a0>] (soc_pcm_close+0xe4/0xd44 [snd_soc_core])
>  [<bf26c3a0>] (soc_pcm_close [snd_soc_core]) from [<bf167254>] (snd_pcm_release_substream+0x88/0x108 [snd_pcm])
>  [<bf167254>] (snd_pcm_release_substream [snd_pcm]) from [<bf167330>] (snd_pcm_release+0x5c/0xd2c [snd_pcm])
>  [<bf167330>] (snd_pcm_release [snd_pcm]) from [<c01c39e4>] (__fput+0xdc/0x1e8)
>  [<c01c39e4>] (__fput) from [<c0129e7c>] (task_work_run+0xc4/0xd4)
>  [<c0129e7c>] (task_work_run) from [<c01053ac>] (do_work_pending+0xc0/0xc8)
>  [<c01053ac>] (do_work_pending) from [<c0101068>] (slow_work_pending+0xc/0x20)
>  Exception stack(0xc2fdffb0 to 0xc2fdfff8)
>  ffa0:                                     00000000 0154d1a0 01542a3c 00000000
>  ffc0: 0154d150 00000000 0009283c 00000006 000003f0 0154d4c8 00000000 0154d4c8
>  ffe0: b6ee7d70 bef13960 b6e547b8 b6cfe018 60000010 00000004
>
> The problem was found for cpu dai drivers: pxa-i2s and pxa-ssp and by
> a calltrace sent from Robert Jarzmik on pxa-ac97 (although there was no
> observed kernel warning). The git grep shows these 3 cpu dai drivers are
> the only one which assign the .pcm_new to pxa2xx_soc_pcm_new() and almost
> every machine which is using one of these cpu dai drivers is using the
> platform driver pxa-pcm-audio too. The only exception is TTC_DKB board
> which is using a platform driver mmp-pcm-audio. A quick look in the code
> of mmp-pcm-audio shows it allocates the DMA in the similar way as PXA.
>
> The solution is to remove one of pxa2xx_soc_pcm_new() assignments and the
> patch does it for 3 cpu dai drivers (SSP/I2S/AC97).
>
> The result was tested on HTC Magician board (SSP for playback, I2S for
> capture) and the DMA buffers are correctly allocated.
>
> Signed-off-by: Petr Cvek <petrcvekcz@gmail.com>
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Tested-by: Robert Jarzmik <robert.jarzmik@free.fr>

Cheers.

-- 
Robert

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

* Re: [PATCH] ASoC: pxa: remove duplicated snd_soc_component_driver ops
  2018-09-10 18:55 ` Robert Jarzmik
@ 2018-09-11 20:57   ` Robert Jarzmik
  0 siblings, 0 replies; 3+ messages in thread
From: Robert Jarzmik @ 2018-09-11 20:57 UTC (permalink / raw)
  To: petrcvekcz
  Cc: alsa-devel, dbaryshkov, lgirdwood, haojian.zhuang, dirk,
	marek.vasut, zhouqiao, broonie, philipp.zabel, lost.distance,
	daniel

Robert Jarzmik <robert.jarzmik@free.fr> writes:

> Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
> Tested-by: Robert Jarzmik <robert.jarzmik@free.fr>

Mmh actually no, there is still a potential issue :
 - the ac97 aplay works in my platform_data mioa701 board
 - but it doesn't work anymore with the devicetree version ... until I revert
   this patch where it works again.

The error I get is :
	root@mioa701:~# aplay mp3/Avril\ Lavigne\ Joie.wav 
	aplay: main:722: audio open error: Invalid argument

The relevant devicetree extract is :
	sound {
		compatible = "simple-audio-card";
		simple-audio-card,name = "MioA701";
		simple-audio-card,widgets =
		"Speaker", "Front Speaker",
		"Speaker", "Rear Speaker",
		"Microphone", "Headset",
		"Microphone", "GSM Line Out",
		"Line", "GSM Line In",
		"Microphone", "Headset Mic",
		"Microphone", "Front Mic";
		simple-audio-card,routing =
			/* Call Mic */
			"Mic Bias", "Front Mic",
			"MIC1", "Mic Bias",
			/* Headset Mic */
			"LINEL", "Headset Mic",
			"LINER", "Headset Mic",
			/* GSM Module */
			"MONOIN", "GSM Line Out",
			"PCBEEP", "GSM Line Out",
			"GSM Line In", "MONO",
			/* headphone connected to HPL, HPR */
			"Headset", "HPL",
			"Headset", "HPR",
			/* front speaker connected to HPL, OUT3 */
			"Front Speaker", "HPL",
			"Front Speaker", "OUT3",
			/* rear speaker connected to SPKL, SPKR */
			"Rear Speaker", "SPKL",
			"Rear Speaker", "SPKR";

		simple-audio-card,cpu {
			sound-dai = <&ac97>;
		};
		simple-audio-card,codec {
			sound-dai = <&wm9713>;
		};
		simple-audio-card,plat {
			sound-dai = <&pxa_pcm_audio>;
		};
	};

Cheers.

-- 
Robert

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

end of thread, other threads:[~2018-09-11 20:57 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-03 20:25 [PATCH] ASoC: pxa: remove duplicated snd_soc_component_driver ops petrcvekcz
2018-09-10 18:55 ` Robert Jarzmik
2018-09-11 20:57   ` Robert Jarzmik

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.