All of lore.kernel.org
 help / color / mirror / Atom feed
* Unable to open hostless PCM device after introduction of commit - ASoC: Stop dummy from overriding hwparams
@ 2022-11-18 17:17 Patrick Lai
  2022-11-21 15:29 ` Amadeusz Sławiński
  0 siblings, 1 reply; 3+ messages in thread
From: Patrick Lai @ 2022-11-18 17:17 UTC (permalink / raw)
  To: Amadeusz Sławiński, Mark Brown
  Cc: alsa-devel, srinivas.kandagatla, vinod.koul, quic_rohkumar

Hi Amadeusz,

On the product I am working on, a hostless PCM device is defined for 
purpose of activating CODEC driver to setup the path inside CODEC. So, 
CPU DAI and PCM Platform are defined to use dummy dai & DMA supplied by 
sound/soc/soc-utils.c.

After upgrading to newer kernel, hostless PCM device failed to open. 
After doing a bit of digging, the root cause is that dummy_dma_hardware 
is not set in dummy_dma_open() due to new conditional check logic 
introduced in this commit - 6c504663ba2ee2abeaf5622e27082819326c1bd4.

In order to fix problem I am encountering properly without regressing 
your scenario, I would like to get a better understanding of problem you 
were addressing. My understanding, from looking through other drivers 
under sound/soc, is that pcm hardware info is usually set by PCM 
platform/DMA drivers. For your scenario, do you have other component e.g 
CPU/CODEC DAI, set PCM hardware definition? I am not sure conditional 
check logic from 6c504663ba2ee2abeaf5622e27082819326c1bd4 guarantees 
that other component would be setting pcm hardware info. Appreciate if 
you can provide more insight to your scenario?

Thanks
Patrick

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

* Re: Unable to open hostless PCM device after introduction of commit - ASoC: Stop dummy from overriding hwparams
  2022-11-18 17:17 Unable to open hostless PCM device after introduction of commit - ASoC: Stop dummy from overriding hwparams Patrick Lai
@ 2022-11-21 15:29 ` Amadeusz Sławiński
  2022-11-25 17:22   ` Mark Brown
  0 siblings, 1 reply; 3+ messages in thread
From: Amadeusz Sławiński @ 2022-11-21 15:29 UTC (permalink / raw)
  To: Patrick Lai, Mark Brown
  Cc: Cezary Rojewski, alsa-devel, srinivas.kandagatla, vinod.koul,
	quic_rohkumar

On 11/18/2022 6:17 PM, Patrick Lai wrote:
> Hi Amadeusz,
> 
> On the product I am working on, a hostless PCM device is defined for 
> purpose of activating CODEC driver to setup the path inside CODEC. So, 
> CPU DAI and PCM Platform are defined to use dummy dai & DMA supplied by 
> sound/soc/soc-utils.c.
> 
> After upgrading to newer kernel, hostless PCM device failed to open. 
> After doing a bit of digging, the root cause is that dummy_dma_hardware 
> is not set in dummy_dma_open() due to new conditional check logic 
> introduced in this commit - 6c504663ba2ee2abeaf5622e27082819326c1bd4.
> 
> In order to fix problem I am encountering properly without regressing 
> your scenario, I would like to get a better understanding of problem you 
> were addressing. My understanding, from looking through other drivers 
> under sound/soc, is that pcm hardware info is usually set by PCM 
> platform/DMA drivers. For your scenario, do you have other component e.g 
> CPU/CODEC DAI, set PCM hardware definition? I am not sure conditional 
> check logic from 6c504663ba2ee2abeaf5622e27082819326c1bd4 guarantees 
> that other component would be setting pcm hardware info. Appreciate if 
> you can provide more insight to your scenario?
> 
> Thanks
> Patrick

Hi Patrick,

Call path is: ... -> __soc_pcm_open() -> soc_pcm_components_open -> 
snd_soc_component_open -> open callback, where for dummy device open 
callback is dummy_dma_open.

Expanding on the issue in question which was cause of the patch.

With following debug log:
diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c
index e12f8244242b..b086ec05da25 100644
--- a/sound/soc/soc-component.c
+++ b/sound/soc/soc-component.c
@@ -290,6 +290,8 @@ int snd_soc_component_open(struct snd_soc_component 
*component,
  {
         int ret = 0;

+       pr_err("%s\n", component->name);
+
         if (component->driver->open)
                 ret = component->driver->open(component, substream);

that's what I get in dmesg on one of our test platforms:
[   95.522577] avs_rt274.1-platform
[   95.526019] i2c-INT34C2:00
[   95.528837] snd_soc_core:dpcm_fe_dai_startup:  audio: ASoC: open FE audio
[   95.528849] avs_rt274.1-platform
[   95.532249] snd-soc-dummy
[   95.534989] snd-soc-dummy
[   95.537800] snd_soc_avs:avs_dai_fe_startup: snd_soc_avs 0000:00:1f.3: 
avs_dai_fe_startup fe STARTUP tag 1 str 0000000064defd29

"avs_rt274.1-platform" component is handled in sound/soc/intel/avs/pcm.c 
it calls avs_component_open() which sets hwparams to generic set 
supported by i2s devices in AVS driver.

"i2c-INT34C2:00" is codec driver sound/soc/codecs/rt274.c it does not 
have open callback.

And finally "snd-soc-dummy" which as mentioned above calls 
dummy_dma_open which originally overridden hwparams set in 
avs_component_open() with its own limited ones.

(When topology is loaded it also creates FEs, which further limit 
allowed hwparams, they are a subset of the ones set above).

As mentioned in the patch:
"Alternative approach would be to copy whole dummy handling and rename 
it to "snd-soc-null" or something similar. And remove hwparams 
assignment to make it really do nothing."

However, looking at it again, I would consider the existence of 
dummy_dma_open() to be scope creep. If component is really a dummy one 
it should not affect any other components in any way. And if any drivers 
depends on dummy setting parameters for it, I would consider it 
partially broken. And would say that issue should rather be fixed on 
driver side by making a dedicated component for it instead of using a 
dummy one.

I hope that I cleared up situation a bit.

Thanks,
Amadeusz


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

* Re: Unable to open hostless PCM device after introduction of commit - ASoC: Stop dummy from overriding hwparams
  2022-11-21 15:29 ` Amadeusz Sławiński
@ 2022-11-25 17:22   ` Mark Brown
  0 siblings, 0 replies; 3+ messages in thread
From: Mark Brown @ 2022-11-25 17:22 UTC (permalink / raw)
  To: Amadeusz Sławiński
  Cc: alsa-devel, vinod.koul, Cezary Rojewski, srinivas.kandagatla,
	quic_rohkumar, Patrick Lai

[-- Attachment #1: Type: text/plain, Size: 1582 bytes --]

On Mon, Nov 21, 2022 at 04:29:19PM +0100, Amadeusz Sławiński wrote:

> And finally "snd-soc-dummy" which as mentioned above calls dummy_dma_open
> which originally overridden hwparams set in avs_component_open() with its
> own limited ones.

...

> However, looking at it again, I would consider the existence of
> dummy_dma_open() to be scope creep. If component is really a dummy one it
> should not affect any other components in any way. And if any drivers
> depends on dummy setting parameters for it, I would consider it partially
> broken. And would say that issue should rather be fixed on driver side by
> making a dedicated component for it instead of using a dummy one.

That's not such a clear statement in this case.  The thing with the
hostless links Qualcomm are trying to use here is that we don't actually
want to do any DMA ops at all, these paths never go to memory.  Really
they're CODEC to CODEC links but done in an older way.  There's only DMA
ops there because we need something to keep userspace happy, they don't
actually mean anything and we'd never want them to be used if anything
else is providing actual parameters.

It would be cleaner if these systems were to use a CODEC to CODEC link
but I'm not sure how well that plays with DPCM - the whole thing is a
bit of a house of cards there.

In any case, any news on a fix for this?  The suggestion of a
custom/variant version of the dummy component that explicitly flags that
it's supposed to be used in a hostless configuration does seem like the
least fragile thing.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2022-11-25 17:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-18 17:17 Unable to open hostless PCM device after introduction of commit - ASoC: Stop dummy from overriding hwparams Patrick Lai
2022-11-21 15:29 ` Amadeusz Sławiński
2022-11-25 17:22   ` 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.