On Mon, Aug 17, 2015 at 03:08:55PM +0200, Geert Uytterhoeven wrote: > dma_request_slave_channel_compat() is meant for drivers that support > both DT and legacy platform device based probing: if DT channel DMA > setup fails, it will fall back to platform data based DMA channel setup, > using hardcoded DMA channel IDs and a filter function. > > However, if the DTS doesn't provide a "dmas" property for the device, > the fallback is also used. If the legacy filter function is not > hardcoded in the DMA slave driver, but comes from platform data, it will > be NULL. Then dma_request_slave_channel_compat() will succeed > incorrectly, and return a DMA channel, as a NULL legacy filter function > actually means "all channels are OK", not "do not match". > > Later, when trying to use that DMA channel, it will fail with: > > rcar-dmac e6700000.dma-controller: rcar_dmac_prep_slave_sg: bad > parameter: len=1, id=-22 > > To fix this, ensure that both the filter function and the DMA channel ID > are not NULL before using the legacy fallback. > > Note that some DMA slave drivers can handle this failure, and will fall > back to PIO. > > See also commit 056f6c87028544de ("dmaengine: shdma: Make dummy > shdma_chan_filter() always return false"), which fixed the same issue > for the case where shdma_chan_filter() is hardcoded in a DMA slave > driver.
Applied, thanks -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/