From: Vinod Koul <vinod.koul@intel.com>
To: Andy Gross <andy.gross@linaro.org>
Cc: Abhishek Sahu <absahu@codeaurora.org>,
dan.j.williams@intel.com, stanimir.varbanov@linaro.org,
mcgrof@suse.com, okaya@codeaurora.org, pramod.gurav@linaro.org,
arnd@arndb.de, linux-kernel@vger.kernel.org,
dmaengine@vger.kernel.org, linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH 2/5] dmaengine: Add support for custom data mapping
Date: Mon, 19 Dec 2016 21:19:23 +0530 [thread overview]
Message-ID: <20161219154923.GT25795@localhost> (raw)
In-Reply-To: <20161219050642.GA3047@hector.attlocal.net>
On Sun, Dec 18, 2016 at 11:06:42PM -0600, Andy Gross wrote:
> On Sun, Dec 18, 2016 at 09:56:02PM +0530, Vinod Koul wrote:
> > 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@codeaurora.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?
>
> These are the notify when done and end of transaction flags. I believe the last
> time we talked about this, we (Vinod and I) agreed to just expose a QCOM only interface to set
> the special transaction flags. You'd then have to have some other API to fixup
> the descriptor with the right qcom flags.
Okay, do you have pointer on that one, will avoid asking the same questions
again.
> Ahbishek, correct me where i am wrong on the following:
> So two main differences between a normal descriptor and a command descriptor:
> 1) size of the descriptor
> 2) the flag setting
> 3) data sent in is a modified scatter gather that includes flags , vs a normal
> scatter gather
>
> So the CMD descriptors in a given sgl can all have varying flags set? I'd assume
> they all have CMD flag set. Do the current users of the command descriptors
> coalesce all of their requests into a big list?
>
> So a couple of thoughts on how to deal with this:
>
> 1) Define a virtual channel for the command descriptors vs a normal DMA
> transaction. This lets you use the same hardware channel, but lets you discern
> which descriptor format you need to use. The only issue I see with this is the
> required change in device tree binding to target the right type of channel (cmd
> vs normal).
Or mark the descriptor is cmd and write accordingly...
>
> 2) Provide an API to set flags for the descriptor on a whole descriptor basis.
>
> 3) If you have a set of transactions described by an sgl that has disparate use
> of flags, you split the list and use a separate transaction. In other words, we
> need to enforce that the flag set API will be applied to all descriptors
> described by an sgl. This means that the whole transaction may be comprised of
> multiple async TX descriptors.
--
~Vinod
next prev parent reply other threads:[~2016-12-19 15:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-15 9:55 [PATCH 0/5] Support for QCA BAM DMA command descriptor Abhishek Sahu
2016-12-15 9:55 ` [PATCH 1/5] dmaengine: qca: bam_dma: Add header file for bam driver Abhishek Sahu
2016-12-15 9:55 ` [PATCH 2/5] dmaengine: Add support for custom data mapping Abhishek Sahu
2016-12-18 16:26 ` Vinod Koul
2016-12-19 5:06 ` Andy Gross
2016-12-19 15:49 ` Vinod Koul [this message]
2016-12-19 17:52 ` Andy Gross
2016-12-20 19:28 ` Abhishek Sahu
2016-12-20 20:25 ` Andy Gross
2016-12-21 19:34 ` Abhishek Sahu
2016-12-29 17:54 ` Andy Gross
2017-01-02 14:25 ` Abhishek Sahu
2017-01-02 16:12 ` Andy Gross
2017-01-19 5:01 ` Vinod Koul
2017-01-19 14:13 ` Andy Gross
2017-01-19 14:57 ` Abhishek Sahu
2017-01-20 16:56 ` Vinod Koul
2017-04-07 13:58 ` Abhishek Sahu
2016-12-15 9:55 ` [PATCH 3/5] dmaengine: qca: bam_dma: Add support for bam sgl Abhishek Sahu
2016-12-15 9:55 ` [PATCH 4/5] dmaengine: qca: bam_dma: implement custom data mapping Abhishek Sahu
2016-12-15 9:55 ` [PATCH 5/5] dmaengine: qca: bam_dma: implement command descriptor Abhishek Sahu
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=20161219154923.GT25795@localhost \
--to=vinod.koul@intel.com \
--cc=absahu@codeaurora.org \
--cc=andy.gross@linaro.org \
--cc=arnd@arndb.de \
--cc=dan.j.williams@intel.com \
--cc=dmaengine@vger.kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@suse.com \
--cc=okaya@codeaurora.org \
--cc=pramod.gurav@linaro.org \
--cc=stanimir.varbanov@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.