[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20161218162602.GR25795@localhost>
Date: Sun, 18 Dec 2016 21:56:02 +0530
From: Vinod Koul <vinod.koul@...el.com>
To: Abhishek Sahu <absahu@...eaurora.org>
Cc: dan.j.williams@...el.com, andy.gross@...aro.org,
stanimir.varbanov@...aro.org, mcgrof@...e.com,
okaya@...eaurora.org, pramod.gurav@...aro.org, arnd@...db.de,
linux-kernel@...r.kernel.org, dmaengine@...r.kernel.org,
linux-arm-msm@...r.kernel.org
Subject: Re: [PATCH 2/5] dmaengine: Add support for custom data mapping
On Thu, Dec 15, 2016 at 03:25:52PM +0530, Abhishek Sahu wrote:
> The current DMA APIs only support SGL or data in generic format.
> The QCA BAM DMA engine data cannot be mapped with already
> available APIs due to following reasons.
>
> 1. The QCA BAM DMA engine uses custom flags which cannot be
> mapped with generic DMA engine flags.
> 2. Some peripheral driver like QCA QPIC NAND/LCD requires to
> set specific flags (Like NWD, EOT) for some of the descriptors
> in scatter gather list. The already available mapping APIs take
> flags parameter in API itself and there is no support for
> passing DMA specific flags for each SGL entry.
>
> Now this patch adds the support for making the DMA descriptor from
> custom data with new DMA mapping function prep_dma_custom_mapping.
> The peripheral driver will pass the custom data in this function and
> DMA engine driver will form the descriptor according to its own
> logic. In future, this API can be used by any other DMA engine
> drivers also which are unable to do DMA mapping with already
> available API’s.
>
> Signed-off-by: Abhishek Sahu <absahu@...eaurora.org>
> ---
> include/linux/dmaengine.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
> index cc535a4..6324c1f 100644
> --- a/include/linux/dmaengine.h
> +++ b/include/linux/dmaengine.h
> @@ -692,6 +692,8 @@ struct dma_filter {
> * be called after period_len bytes have been transferred.
> * @device_prep_interleaved_dma: Transfer expression in a generic way.
> * @device_prep_dma_imm_data: DMA's 8 byte immediate data to the dst address
> + * @device_prep_dma_custom_mapping: prepares a dma operation from dma driver
> + * specific custom data
> * @device_config: Pushes a new configuration to a channel, return 0 or an error
> * code
> * @device_pause: Pauses any transfer happening on a channel. Returns
> @@ -783,6 +785,9 @@ struct dma_device {
> struct dma_async_tx_descriptor *(*device_prep_dma_imm_data)(
> struct dma_chan *chan, dma_addr_t dst, u64 data,
> unsigned long flags);
> + struct dma_async_tx_descriptor *(*device_prep_dma_custom_mapping)(
> + struct dma_chan *chan, void *data,
> + unsigned long flags);
This needs a discussion. Why do you need to add a new API for framework.
What are NWD and EOT flags, cna you details out the flags?
--
~Vinod
Powered by blists - more mailing lists