From: Andy Shevchenko <andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Peter Ujfalusi <peter.ujfalusi-l0cyMroinI0@public.gmane.org>
Cc: Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
dmaengine <dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Linux OMAP Mailing List
<linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
linux-arm Mailing List
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>,
linux-spi <linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
Subject: Re: [RFC v03 00/15] dmaengine: New 'universal' API for requesting channel
Date: Wed, 2 Dec 2015 16:38:30 +0200 [thread overview]
Message-ID: <CAHp75VevOJsYCgPtb-C11-JVLBjLr0bRxDOxFoconSje6BNpYA@mail.gmail.com> (raw)
In-Reply-To: <1449064765-27427-1-git-send-email-peter.ujfalusi-l0cyMroinI0@public.gmane.org>
On Wed, Dec 2, 2015 at 3:59 PM, Peter Ujfalusi <peter.ujfalusi-l0cyMroinI0@public.gmane.org> wrote:
> Hi,
>
> I keep this still as RFC.
>
> Changes since RFC v02:
> - Using has_acpi_companion() instead ACPI_HANDLE()
> - mask matching change within private_candidate()
> - Fallback in dma_request_chan() when DT/ACPI lookup fails.
> - Rename dma_get_channel() -> find_candidate()
> - Arch code changes as suggested by Arnd
> - Some documentation updated, more need to be done.
>
> Changes since RFC v01:
> - dma_request_chan(); lost the mask parameter
> - The new API does not rely on RESOURCE_DMA, instead the dma_filter_map table
> will be used to provide the needed information to the filter function in
> legacy mode
> - Extended the example patches to convert most of daVinci to use the new API to
> request the DMA channels.
>
> TODO: Documentation update ;)
>
> As it has been discussed in the following thread:
> http://www.gossamer-threads.com/lists/linux/kernel/2181487#2181487
>
> Andy: I did looked at the unified device properties, but I decided to not to use
> it as I don't see it to fit well and most of the legacy board files are using
> resources to specify at least their memory regions so adding the DMA resource
> to them would be more inline with the rest of the code.
>
> The ARM, mmc and spi patches are converting daVinci drivers board files to use
> the new method of requesting DMA channel.
>
> 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_filter_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_filter_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 needed 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_filter_map to get the channel with the dma_get_channel() internal
> function.
>
I like patches 1 & 2 in current shape.
Though few comments to patch 3.
> Regards,
> Peter
> ---
> Peter Ujfalusi (15):
> dmaengine: core: Skip mask matching when it is not provided to
> private_candidate
> dmaengine: core: Move and merge the code paths using private_candidate
> dmaengine: core: Introduce new, universal API to request a channel
> dmaengine: edma: Add support for DMA filter mapping to slave devices
> ARM: davinci: devices-da8xx: Add dma_filter_map to edma
> ARM: davinci: dm355: Add dma_filter_map to edma
> ARM: davinci: dm365: Add dma_filter_map to edma
> ARM: davinci: dm644x: Add dma_filter_map to edma
> ARM: davinci: dm646x: Add dma_filter_map to edma
> mmc: davinci_mmc: Use dma_request_chan() to requesting DMA channel
> spi: davinci: Use dma_request_chan() to requesting DMA channel
> ARM: davinci: devices-da8xx: Remove DMA resources for MMC and SPI
> ARM: davinci: devices: Remove DMA resources for MMC
> ARM: davinci: dm355: Remove DMA resources for SPI
> ARM: davinci: dm365: Remove DMA resources for SPI
>
> Documentation/dmaengine/client.txt | 23 ++---
> arch/arm/mach-davinci/devices-da8xx.c | 95 +++++++++---------
> arch/arm/mach-davinci/devices.c | 19 ----
> arch/arm/mach-davinci/dm355.c | 28 ++++--
> arch/arm/mach-davinci/dm365.c | 30 ++++--
> arch/arm/mach-davinci/dm644x.c | 12 +++
> arch/arm/mach-davinci/dm646x.c | 11 +++
> drivers/dma/dmaengine.c | 181 ++++++++++++++++++++++++++--------
> drivers/dma/edma.c | 6 ++
> drivers/mmc/host/davinci_mmc.c | 52 +++-------
> drivers/spi/spi-davinci.c | 76 +++++---------
> include/linux/dmaengine.h | 27 +++++
> include/linux/platform_data/edma.h | 7 ++
> 13 files changed, 336 insertions(+), 231 deletions(-)
>
> --
> 2.6.3
>
--
With Best Regards,
Andy Shevchenko
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
prev parent reply other threads:[~2015-12-02 14:38 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-02 13:59 [RFC v03 00/15] dmaengine: New 'universal' API for requesting channel Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 01/15] dmaengine: core: Skip mask matching when it is not provided to private_candidate Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 02/15] dmaengine: core: Move and merge the code paths using private_candidate Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 03/15] dmaengine: core: Introduce new, universal API to request a channel Peter Ujfalusi
[not found] ` <1449064765-27427-4-git-send-email-peter.ujfalusi-l0cyMroinI0@public.gmane.org>
2015-12-02 14:35 ` Andy Shevchenko
2015-12-03 10:34 ` Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 04/15] dmaengine: edma: Add support for DMA filter mapping to slave devices Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 05/15] ARM: davinci: devices-da8xx: Add dma_filter_map to edma Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 06/15] ARM: davinci: dm355: " Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 07/15] ARM: davinci: dm365: " Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 08/15] ARM: davinci: dm644x: " Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 09/15] ARM: davinci: dm646x: " Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 10/15] mmc: davinci_mmc: Use dma_request_chan() to requesting DMA channel Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 11/15] spi: davinci: " Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 12/15] ARM: davinci: devices-da8xx: Remove DMA resources for MMC and SPI Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 13/15] ARM: davinci: devices: Remove DMA resources for MMC Peter Ujfalusi
[not found] ` <1449064765-27427-1-git-send-email-peter.ujfalusi-l0cyMroinI0@public.gmane.org>
2015-12-02 13:59 ` [RFC v03 14/15] ARM: davinci: dm355: Remove DMA resources for SPI Peter Ujfalusi
2015-12-02 13:59 ` [RFC v03 15/15] ARM: davinci: dm365: " Peter Ujfalusi
2015-12-02 14:38 ` Andy Shevchenko [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAHp75VevOJsYCgPtb-C11-JVLBjLr0bRxDOxFoconSje6BNpYA@mail.gmail.com \
--to=andy.shevchenko-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=nsekhar-l0cyMroinI0@public.gmane.org \
--cc=peter.ujfalusi-l0cyMroinI0@public.gmane.org \
--cc=tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org \
--cc=vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).