All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jassi Brar <jaswinder.singh@linaro.org>
To: "Koul, Vinod" <vinod.koul@intel.com>
Cc: sundaram@ti.com, dan.j.williams@intel.com,
	linux-kernel@vger.kernel.org, linus.walleij@linaro.org,
	linux-omap@vger.kernel.org, rmk+kernel@arm.linux.org.uk,
	nsekhar@ti.com
Subject: Re: [PATCH] DMAEngine: Define generic transfer request api
Date: Tue, 16 Aug 2011 20:02:22 +0530	[thread overview]
Message-ID: <CAJe_Zhcbfd_K7h2Dq_w5FNTXgFaHqOAWmwpUtzjQMLXoydg8Gw@mail.gmail.com> (raw)
In-Reply-To: <1313499399.1603.92.camel@vkoul-udesk3>

On 16 August 2011 18:26, Koul, Vinod <vinod.koul@intel.com> wrote:
> On Fri, 2011-08-12 at 16:44 +0530, Jassi Brar wrote:
>> Define a new api that could be used for doing fancy data transfers
>> like interleaved to contiguous copy and vice-versa.
>> Traditional SG_list based transfers tend to be very inefficient in
>> such cases as where the interleave and chunk are only a few bytes,
>> which call for a very condensed api to convey pattern of the transfer.
>>
>> This api supports all 4 variants of scatter-gather and contiguous transfer.
>> Besides, it could also represent common operations like
>>         device_prep_dma_{cyclic, memset, memcpy}
>> and maybe some more that I am not sure of.
>>
>> Of course, neither can this api help transfers that don't lend to DMA by
>> nature, i.e, scattered tiny read/writes with no periodic pattern.
>>
>> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
>> ---
>>  include/linux/dmaengine.h |   73 +++++++++++++++++++++++++++++++++++++++++++++
>>  1 files changed, 73 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
>> index 8fbf40e..74f3ae0 100644
>> --- a/include/linux/dmaengine.h
>> +++ b/include/linux/dmaengine.h
>> @@ -76,6 +76,76 @@ enum dma_transaction_type {
>>  /* last transaction type for creation of the capabilities mask */
>>  #define DMA_TX_TYPE_END (DMA_CYCLIC + 1)
>>
>> +/**
>> + * Generic Transfer Request
>> + * ------------------------
>> + * A chunk is collection of contiguous bytes to be transfered.
>> + * The gap(in bytes) between two chunks is called inter-chunk-gap(ICG).
>> + * ICGs may or maynot change between chunks.
>> + * A FRAME is the smallest series of contiguous {chunk,icg} pairs,
>> + *  that when repeated an integral number of times, specifies the transfer.
>> + * A transfer template is specification of a Frame, the number of times
>> + *  it is to be repeated and other per-transfer attributes.
>> + *
>> + * Practically, a client driver would have ready a template for each
>> + *  type of transfer it is going to need during its lifetime and
>> + *  set only 'src_start' and 'dst_start' before submitting the requests.
>> + *
>> + *
>> + *  |      Frame-1        |       Frame-2       | ~ |       Frame-'numf'  |
>> + *  |====....==.===...=...|====....==.===...=...| ~ |====....==.===...=...|
>> + *
>> + *    ==  Chunk size
>> + *    ... ICG
>> + */
>> +
>> +/**
>> + * struct data_chunk - Element of scatter-gather list that makes a frame.
>> + * @size: Number of bytes to read from source.
>> + *     size_dst := fn(op, size_src), so doesn't mean much for destination.
>> + * @icg: Number of bytes to jump after last src/dst address of this
>> + *    chunk and before first src/dst address for next chunk.
>> + *    Ignored for dst(assumed 0), if dst_inc is true and dst_sgl is false.
>> + *    Ignored for src(assumed 0), if src_inc is true and src_sgl is false.
>> + */
>> +struct data_chunk {
>> +     size_t size;
>> +     size_t icg;
>> +};
>> +
>> +/**
>> + * struct xfer_template - Template to convey DMAC the transfer pattern
>> + *    and attributes.
>> + * @op: The operation to perform on source data before writing it on
>> + *    to destination address.
>> + * @src_start: Bus address of source for the first chunk.
>> + * @dst_start: Bus address of destination for the first chunk.
>> + * @src_inc: If the source address increments after reading from it.
>> + * @dst_inc: If the destination address increments after writing to it.
>> + * @src_sgl: If the 'icg' of sgl[] applies to Source (scattered read).
>> + *           Otherwise, source is read contiguously (icg ignored).
>> + *           Ignored if src_inc is false.
>> + * @dst_sgl: If the 'icg' of sgl[] applies to Destination (scattered write).
>> + *           Otherwise, destination is filled contiguously (icg ignored).
>> + *           Ignored if dst_inc is false.
>> + * @frm_irq: If the client expects DMAC driver to do callback after each frame.
>> + * @numf: Number of frames in this template.
>> + * @frame_size: Number of chunks in a frame i.e, size of sgl[].
>> + * @sgl: Array of {chunk,icg} pairs that make up a frame.
>> + */
>> +struct xfer_template {
>> +     enum dma_transaction_type op;
>> +     dma_addr_t src_start;
>> +     dma_addr_t dst_start;
>> +     bool src_inc;
>> +     bool dst_inc;
>> +     bool src_sgl;
>> +     bool dst_sgl;
>> +     bool frm_irq;
>> +     size_t numf;
>> +     size_t frame_size;
>> +     struct data_chunk sgl[0];
>> +};
>>
>>  /**
>>   * enum dma_ctrl_flags - DMA flags to augment operation preparation,
>> @@ -432,6 +502,7 @@ struct dma_tx_state {
>>   * @device_prep_dma_cyclic: prepare a cyclic dma operation suitable for audio.
>>   *   The function takes a buffer of size buf_len. The callback function will
>>   *   be called after period_len bytes have been transferred.
>> + * @device_prep_dma_genxfer: Transfer expression in a generic way.
>>   * @device_control: manipulate all pending operations on a channel, returns
>>   *   zero or error code
>>   * @device_tx_status: poll for transaction completion, the optional
>> @@ -496,6 +567,8 @@ struct dma_device {
>>       struct dma_async_tx_descriptor *(*device_prep_dma_cyclic)(
>>               struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
>>               size_t period_len, enum dma_data_direction direction);
>> +     struct dma_async_tx_descriptor *(*device_prep_dma_genxfer)(
>> +             struct dma_chan *chan, struct xfer_template *xt);
>>       int (*device_control)(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
>>               unsigned long arg);
>>
> Do you have a driver which is using the API, would help to evaluate this
> API when we see the usage :)
Sorry, not in public and not for DMAENGINE.
It will help if you see it as a generic[1] solution to the requirement of
supporting interleaved transfers with DMACs like TI's EDMA, SDMA,
ARM's PL330 and many more in future.

> Currently we have two approaches to solve this problem first being the
> DMA_STRIDE_CONFIG proposed by Linus W, I feel this one is better
> approach as this can give client ability to configure each transfer
> rather than set for the channel.
To me, doing it via a control command vs new transfer type, is secondary
to doing it in a generic way. And yes, I too believe this way is better because
it is more flexible.


[1] Btw, I haven't yet added option to specify byte/half-word/word swap
while data transfer - which I once had to do with PL330 in a weird setup.

  parent reply	other threads:[~2011-08-16 14:32 UTC|newest]

Thread overview: 131+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-12 11:14 [PATCH] DMAEngine: Define generic transfer request api Jassi Brar
2011-08-16 12:56 ` Koul, Vinod
2011-08-16 13:06   ` Linus Walleij
2011-08-19 13:43     ` Koul, Vinod
2011-08-19 14:19       ` Linus Walleij
2011-08-19 15:46         ` Jassi Brar
2011-08-19 17:28           ` Koul, Vinod
2011-08-19 18:45             ` Jassi Brar
2011-08-23 14:43       ` Matt Porter
2011-08-23 14:43         ` Matt Porter
2011-08-16 14:32   ` Jassi Brar [this message]
2011-09-15  7:46 ` [PATCHv2] " Jassi Brar
2011-09-15  8:22   ` Russell King
2011-09-15 10:02     ` Jassi Brar
2011-09-16  7:17   ` Barry Song
2011-09-16 11:03     ` Jassi Brar
2011-09-16  9:07   ` Vinod Koul
2011-09-16 12:30     ` Jassi Brar
2011-09-16 17:06       ` Vinod Koul
2011-09-16 17:51         ` Jassi Brar
2011-09-19  3:23           ` Vinod Koul
2011-09-20 12:12   ` [PATCHv3] DMAEngine: Define interleaved " Jassi Brar
2011-09-20 16:52     ` Vinod Koul
2011-09-20 18:08       ` Jassi Brar
2011-09-21  6:32         ` Vinod Koul
2011-09-21  6:45           ` Jassi Brar
2011-09-21  6:51             ` Vinod Koul
2011-09-21  7:31               ` Jassi Brar
2011-09-21 10:18                 ` Russell King
2011-09-21 15:21                   ` Jassi Brar
2011-09-28  6:39     ` [PATCHv4] " Jassi Brar
2011-09-28  9:03       ` Vinod Koul
2011-09-28 15:15         ` Jassi Brar
2011-09-29 11:17           ` Vinod Koul
2011-09-30  6:43             ` Barry Song
2011-09-30 16:01               ` Jassi Brar
2011-10-01  3:05                 ` Barry Song
2011-10-01 18:11                   ` Vinod Koul
2011-10-01 18:45                     ` Jassi Brar
2011-10-01 18:41                   ` Jassi Brar
2011-10-01 18:48                     ` Jassi Brar
2011-10-02  0:33                     ` Barry Song
2011-10-03  6:24                       ` Jassi Brar
2011-10-03 16:13                         ` Russell King
2011-10-03 16:19                           ` Jassi Brar
2011-10-03 17:15                             ` Williams, Dan J
2011-10-03 18:23                               ` Jassi Brar
2011-10-05 18:19                                 ` Williams, Dan J
2011-10-06  9:06                                   ` Jassi Brar
2011-10-05 18:14                             ` Williams, Dan J
2011-10-06  7:12                               ` Jassi Brar
2011-10-07  5:45                               ` Vinod Koul
2011-10-07 11:27                                 ` Jassi Brar
2011-10-07 14:19                                   ` Vinod Koul
2011-10-07 14:38                                     ` Jassi Brar
2011-10-10  6:53                                       ` Vinod Koul
2011-10-10  9:16                                         ` Jassi Brar
2011-10-10  9:18                                           ` Vinod Koul
2011-10-10  9:53                                             ` Jassi Brar
2011-10-10 10:45                                               ` Vinod Koul
2011-10-10 11:16                                                 ` Jassi Brar
2011-10-10 16:02                                                   ` Vinod Koul
2011-10-10 16:28                                                     ` Jassi Brar
2011-10-11 11:56                                                       ` Vinod Koul
2011-10-11 15:57                                                         ` Jassi Brar
2011-10-11 16:45                                                           ` Vinod Koul
2011-10-12  5:41                                                       ` Barry Song
2011-10-12  6:19                                                         ` Vinod Koul
2011-10-12  6:30                                                           ` Jassi Brar
2011-10-12  6:53                                                           ` Barry Song
2011-10-11 16:44                                   ` Williams, Dan J
2011-10-11 18:42                                     ` Jassi Brar
2011-10-14 18:11                                       ` Bounine, Alexandre
2011-10-14 17:50                                     ` Bounine, Alexandre
2011-10-14 18:36                                       ` Jassi Brar
2011-10-14 19:15                                         ` Bounine, Alexandre
2011-10-15 11:25                                           ` Jassi Brar
2011-10-17 14:07                                             ` Bounine, Alexandre
2011-10-17 15:16                                               ` Jassi Brar
2011-10-17 18:00                                                 ` Bounine, Alexandre
2011-10-17 19:29                                                   ` Jassi Brar
2011-10-17 21:07                                                     ` Bounine, Alexandre
2011-10-18  5:45                                                       ` Jassi Brar
2011-10-18  7:42                                                         ` Russell King
2011-10-18  8:30                                                           ` Jassi Brar
2011-10-18  8:26                                                             ` Vinod Koul
2011-10-18  8:37                                                               ` Jassi Brar
2011-10-18 14:44                                                                 ` Bounine, Alexandre
2011-10-18  9:49                                                             ` Russell King
2011-10-18 11:50                                                               ` Jassi Brar
2011-10-18 11:59                                                                 ` Russell King
2011-10-18 17:57                                                                 ` Bounine, Alexandre
2011-10-24  3:49                                                                   ` Vinod Koul
2011-10-24 12:36                                                                     ` Bounine, Alexandre
2011-10-24 15:27                                                                       ` Vinod Koul
2011-10-18 17:26                                                               ` Bounine, Alexandre
2011-10-18 17:35                                                                 ` Russell King
2011-10-18 17:53                                                                   ` Jassi Brar
2011-10-18 13:51                                                         ` Bounine, Alexandre
2011-10-18 14:54                                                           ` Jassi Brar
2011-10-18 15:15                                                             ` Bounine, Alexandre
2011-09-30 15:47             ` Jassi Brar
2011-10-13  7:03       ` [PATCHv5] " Jassi Brar
2011-10-14  7:32         ` Barry Song
2011-10-14 11:51           ` Jassi Brar
2011-10-14 13:31             ` Vinod Koul
2011-10-14 13:51               ` Jassi Brar
2011-10-14 14:05                 ` Vinod Koul
2011-10-14 14:18                   ` Vinod Koul
2011-10-14 14:55               ` Barry Song
2011-10-14 15:06                 ` Vinod Koul
2011-10-14 15:38                   ` Barry Song
2011-10-14 16:09                     ` Vinod Koul
2011-10-14 16:35                   ` Jassi Brar
2011-10-14 17:04                     ` Vinod Koul
2011-10-14 17:59                       ` Jassi Brar
2011-10-15 17:11                         ` Vinod Koul
2011-10-14 15:16         ` Vinod Koul
2011-10-14 15:50           ` Barry Song
2011-10-16 11:16           ` Jassi Brar
2011-10-16 12:16             ` Vinod Koul
     [not found] <CAGsJ_4wXURUwbf-fcNOq1m5-NJ9+VMuDq+9OJpBjFZK4C_X3cw@mail.gmail.com>
2011-09-12 16:26 ` [PATCH] DMAEngine: Define generic " Barry Song
2011-09-12 16:54   ` Jassi Brar
2011-09-13  1:21     ` Barry Song
2011-09-13  7:46       ` Barry Song
2011-09-13  8:43         ` Jassi Brar
2011-09-13  8:58           ` Barry Song
2011-09-15  6:31             ` Barry Song
2011-09-15  6:43               ` Jassi Brar
2011-09-15  6:49                 ` Barry Song
2011-09-15  8:17                 ` Barry Song

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=CAJe_Zhcbfd_K7h2Dq_w5FNTXgFaHqOAWmwpUtzjQMLXoydg8Gw@mail.gmail.com \
    --to=jaswinder.singh@linaro.org \
    --cc=dan.j.williams@intel.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=nsekhar@ti.com \
    --cc=rmk+kernel@arm.linux.org.uk \
    --cc=sundaram@ti.com \
    --cc=vinod.koul@intel.com \
    /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.