(Optional?) DMA vs. PIO

Stephen Warren swarren at nvidia.com
Thu Oct 8 17:29:36 CEST 2020


Andy Shevchenko wrote at Thursday, October 8, 2020 9:06 AM:
> During internal review of one patch I have been puzzled with the following code
> and Pierre suggested to ask mailing list for help.
> 
> My main concern is what was the idea behind? Does it mean we support optional
> DMA in such case? If now, why not to return an error code directly?
> 
> ---8<---8<---8<---
> 
> > Why ASoC core has the following code in the first place:
> >
> > 387              chan = dma_request_chan(dev, name);
> > 388              if (IS_ERR(chan)) {
> > 389                      if (PTR_ERR(chan) == -EPROBE_DEFER)
> > 390                              return -EPROBE_DEFER;
> > 391                      pcm->chan[i] = NULL;
> > 392              } else {
> > 393                      pcm->chan[i] = chan;
> > 394              }
> >
> > (note lines 389-391).
> > If PIO fallback is not okay, why not to return an error there?
> 
> no idea, the code has been this way since 2013
> (5eda87b890f867b098e5566b5543642851e8b9c3)

It's been there a bit longer, in fact since the file was created:

commit 28c4468b00a1e55e08cc20117de968f7c6275441
Author: Lars-Peter Clausen <lars at metafoo.de>
Date:   Mon Apr 15 19:19:50 2013 +0200

    ASoC: Add a generic dmaengine_pcm driver

+               pcm->chan[i] = of_dma_request_slave_channel(dev->of_node,
+                                       dmaengine_pcm_dma_channel_names[i]);

The commit you mentioned above simply prevents the code from taking the "no DMA
available" path if deferred probe occurs.

> It's worth asking the question on the mailing list, I don't know if this is a
> bug or a feature.

This does seem like a bug, but there are a few places in the code which explicitly check
for a NULL chan or dma_dev (derived from chan) object, so it seems deliberate.


More information about the Alsa-devel mailing list