On 2018-10-09 14:22, Peter Ujfalusi wrote: > > > On 2018-10-09 13:49, Vinod wrote: >> On 24-09-18, 16:00, Peter Ujfalusi wrote: >>> dma_get_any_slave_channel() would skip using the filter function, which >>> in some cases needed to be executed before the alloc_chan_resources >>> callback to make sure that all parameters are provided for the slave >>> channel. >> >> Another request API, i though you had solved that last time around :( > > Yes, I thought so, but this time it is different. > I want to drop this patch myself also, but I need to figure out a way to > do what the dmadev_get_slave_channel() allows me to do. > > In path 4, udma_of_xlate() and the udma_dma_filter_fn() > > It might be possible that I look up a free udma_chan, do the setup via > the filter_fn() and finally call the dma_get_slave_channel(). > Might work fine, but I wanted to avoid to implement my own find free > channel code when we have it already in DMAengine core. It is going to be racy against parallel channel requests, but >>> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h >>> index 16c9d021988a..32010c6ae13a 100644 >>> --- a/include/linux/dmaengine.h >>> +++ b/include/linux/dmaengine.h >>> @@ -1542,6 +1542,8 @@ void dma_async_device_unregister(struct dma_device *device); >>> void dma_run_dependencies(struct dma_async_tx_descriptor *tx); >>> struct dma_chan *dma_get_slave_channel(struct dma_chan *chan); >>> struct dma_chan *dma_get_any_slave_channel(struct dma_device *device); >>> +struct dma_chan *dmadev_get_slave_channel(struct dma_device *device, >>> + dma_filter_fn fn, void *fn_param); -struct dma_chan *dma_get_any_slave_channel(struct dma_device *device); +struct dma_chan *dmadev_get_slave_channel(struct dma_device *device, dma_filter_fn fn, void *fn_param); +#define dma_get_any_slave_channel(device)\ dmadev_get_slave_channel(device, NULL, NULL) Should cut down on duplicated code at least. >>> #define dma_request_channel(mask, x, y) __dma_request_channel(&(mask), x, y) >>> #define dma_request_slave_channel_compat(mask, x, y, dev, name) \ >>> __dma_request_slave_channel_compat(&(mask), x, y, dev, name) >>> -- >>> Peter >>> >>> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. >>> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki >> > > - Péter > > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. > Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki > - Péter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki