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/

Reply via email to