Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964950AbbLCQcX (ORCPT ); Thu, 3 Dec 2015 11:32:23 -0500 Received: from mail-vk0-f54.google.com ([209.85.213.54]:36266 "EHLO mail-vk0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752486AbbLCQcV (ORCPT ); Thu, 3 Dec 2015 11:32:21 -0500 MIME-Version: 1.0 In-Reply-To: <1449153192-9082-1-git-send-email-peter.ujfalusi@ti.com> References: <1449153192-9082-1-git-send-email-peter.ujfalusi@ti.com> Date: Thu, 3 Dec 2015 18:32:20 +0200 Message-ID: Subject: Re: [PATCH 0/4] dmaengine: New 'universal' API for requesting channel From: Andy Shevchenko To: Peter Ujfalusi Cc: Vinod Koul , Arnd Bergmann , "linux-kernel@vger.kernel.org" , dmaengine , Linux OMAP Mailing List , linux-arm Mailing List , Sekhar Nori , Tony Lindgren Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3735 Lines: 80 On Thu, Dec 3, 2015 at 4:33 PM, Peter Ujfalusi wrote: > Hi, > As it has been discussed in the following thread: > http://www.gossamer-threads.com/lists/linux/kernel/2181487#2181487 > > With this series I have taken a path which would result two new API, which can > be used to convert most of the current users already and with some work all > users might be able to move to this set. > With this set the filter_fn used for legacy (non DT/ACPI) channel request is no > longer needed to be exported to client drivers since the selection of the > correct filter_fn will be done in the core. > > So, the first proposal is to have: > > struct dma_chan *dma_request_chan(struct device *dev, const char *name); > struct dma_chan *dma_request_chan_by_mask(const dma_cap_mask_t *mask); > > The dma_request_chan_by_mask() is to request any channel matching with the > requested capabilities, can be used to request channel for memcpy, memset, xor, > etc where no hardware synchronization is needed. > > The dma_request_chan() is to request a slave channel. The dma_request_chan() > will try to find the channel via DT, ACPI or in case if the kernel booted in non > DT/ACPI mode it will use a filter lookup table and retrieves the needed > information from the dma_slave_map provided by the DMA drivers. > This legacy mode needs changes in platform code, in dmaengine drivers and > finally the dmaengine user drivers can be converted: > > For each dmaengine driver an array of DMA device, slave and the parameter > for the filter function needs to be added: > > static const struct dma_slave_map da830_edma_map[] = { > { "davinci-mcasp.0", "rx", EDMA_FILTER_PARAM(0, 0) }, > { "davinci-mcasp.0", "tx", EDMA_FILTER_PARAM(0, 1) }, > { "davinci-mcasp.1", "rx", EDMA_FILTER_PARAM(0, 2) }, > { "davinci-mcasp.1", "tx", EDMA_FILTER_PARAM(0, 3) }, > { "davinci-mcasp.2", "rx", EDMA_FILTER_PARAM(0, 4) }, > { "davinci-mcasp.2", "tx", EDMA_FILTER_PARAM(0, 5) }, > { "spi_davinci.0", "rx", EDMA_FILTER_PARAM(0, 14) }, > { "spi_davinci.0", "tx", EDMA_FILTER_PARAM(0, 15) }, > { "da830-mmc.0", "rx", EDMA_FILTER_PARAM(0, 16) }, > { "da830-mmc.0", "tx", EDMA_FILTER_PARAM(0, 17) }, > { "spi_davinci.1", "rx", EDMA_FILTER_PARAM(0, 18) }, > { "spi_davinci.1", "tx", EDMA_FILTER_PARAM(0, 19) }, > }; > > This information is going to be used by the dmaengine driver, so > modification to the platform_data is needed, and the driver map should be > added to the pdata of the DMA driver: > > da8xx_edma0_pdata.slave_map = da830_edma_map; > da8xx_edma0_pdata.slavecnt = ARRAY_SIZE(da830_edma_map); > > The DMA driver then needs to configure the needed device -> filter_fn > mapping before it registers with dma_async_device_register() : > > if (info->slave_map) { > ecc->dma_slave.filter_map.map = info->slave_map; > ecc->dma_slave.filter_map.mapcnt = info->slavecnt; > ecc->dma_slave.filter_map.filter_fn = edma_filter_fn; > } > > When neither DT or ACPI lookup is available the dma_request_chan() will > try to match the requester's device name with the filter_map's list of > device names, when a match found it will use the information from the > dma_slave_map to get the channel with the dma_get_channel() internal > function. For patches 1-3 with regard to comment on 3: Reviewed-by: Andy Shevchenko -- With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/