linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: jassisinghbrar@gmail.com (Jassi Brar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V4 06/14] ARM: SAMSUNG: Add common DMA operations
Date: Tue, 26 Jul 2011 23:13:35 +0530	[thread overview]
Message-ID: <CABb+yY2rQXxHGJuvhtJGgrCsoFZgsACHWUEV0L-kpqaDaCFAQA@mail.gmail.com> (raw)
In-Reply-To: <20110726080233.GN9653@n2100.arm.linux.org.uk>

On Tue, Jul 26, 2011 at 1:32 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Mon, Jul 25, 2011 at 05:21:44PM +0530, Jassi Brar wrote:
>> On Mon, Jul 25, 2011 at 6:58 AM, Boojin Kim <boojin.kim@samsung.com> wrote:
>>
>> > +
>> > +static bool pl330_filter(struct dma_chan *chan, void *param)
>> > +{
>> > + ? ? ? struct dma_pl330_peri *peri = (struct dma_pl330_peri *)chan->private;
>> > + ? ? ? unsigned dma_ch = (unsigned)param;
>> > +
>> > + ? ? ? if (peri->peri_id != dma_ch)
>> > + ? ? ? ? ? ? ? return false;
>> > +
>> > + ? ? ? return true;
>> > +}
>> This is what I meant... if we keep chan_id for paltform assigned IDs,
>> these filter functions could simply become
>>
>> static bool pl330_filter(struct dma_chan *chan, void *param)
>> {
>> ? ? ? ? return chan->chan_id == param
>> }
>>
>> And ideally in the long run, we could just drop the filter callback
>> and add expected channel ID to the request_channel call.
>
> So what if you have a PL080 and PL330 drivers registered with the DMA
> engine code, and you need to match a specific PL330 channel?
>

Before we start, let me be clear that I don't say it's all possible
today as such.
We will need changes to the API and modifications to the damc/client
drivers (which are already misusing the API as it turns out).

I hope we agree, clients (esp 'generic' ones of the future)
should not ask for channels from a particular dmac.
They should simply tell DMA API, what capabilities they expect
from the allocated channel - of whatever index on whichever dmac.
And the platform should have specified capabilities of a channel
while introducing it to the DMA API.   Yes, imho, DMA API should
only work with a pool of channels and not dmacs - it shouldn't
matter from which dmac a channel comes.

So when a client asks for a channel, the dmaengine would return
the first free channel that has just as much the requested capability.

That is, the generic filter function would look equivalent of :-

      return is_free(chan) && (cap_requested == cap_of(chan) & cap_requested)


Now it all boils down to defining the set of _practically_ possible capabilities
and a method to exchange them between the API, Client and DMAC drivers.

The above is the overall approach.

The following is my idea of implementing it as of now, I am open to suggestions.

Assuming :-
***********
There are no more than 256 types of DMA'able devices
 (MMC, USB, SPI etc) --  [8bits]

A type of device never has more than 16 instances in a platform
 (MMC-0, MMC-1, MMC-2 etc) --  [4bits]

Mem->Mem, Mem->Dev, Dev->Mem, Dev->Dev capability in [4bits]

Max_Burst_Len for any channel is less than 64KB, in power of two [4bits]
Support programmable Max_Burst_Len(tunable in geometric steps of 2)  [1bit]

Max_RW_width/fifo_width is less than 128, in power of two -- [3bits]
Support programmable Max_RW_Width(tunable in geometric steps of 2)  [1bit]

Finally, No platform has more than 128 channels with identicial
capabilities [7bits]


For a channel, when specific values of these fields are appended together,
we get a unqiue 32-bits value called 'chan_id'

Though we can use 64-bits to store the capabilities if we think number
or size of these fields need to be increased.

Thanks,
Jassi

  reply	other threads:[~2011-07-26 17:43 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-25  1:28 [RESEND] [PATCH V4 0/14] To use DMA generic APIs for Samsung DMA Boojin Kim
2011-07-25  1:28 ` [PATCH V4 01/14] DMA: PL330: Add support runtime PM for PL330 DMAC Boojin Kim
2011-07-26  6:03   ` Chanwoo Choi
2011-07-25  1:28 ` [PATCH V4 02/14] DMA: PL330: Update PL330 DMA API driver Boojin Kim
2011-07-25  8:57   ` Jassi Brar
2011-07-25  9:48     ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 03/14] DMA: PL330: Support DMA_SLAVE_CONFIG command Boojin Kim
2011-07-25 10:26   ` Vinod Koul
2011-07-25 12:51     ` Boojin Kim
2011-07-25 13:48       ` Vinod Koul
2011-07-26 13:04         ` Boojin Kim
2011-07-26 13:12           ` Russell King - ARM Linux
2011-07-25  1:28 ` [PATCH V4 04/14] DMA: PL330: Add DMA_CYCLIC capability Boojin Kim
2011-07-25  9:27   ` Russell King - ARM Linux
2011-07-25 10:31     ` Boojin Kim
2011-07-25 10:36       ` Russell King - ARM Linux
2011-07-25 10:48         ` Vinod Koul
2011-07-25 10:57           ` Russell King - ARM Linux
2011-07-25 11:01             ` Vinod Koul
2011-07-25 11:39               ` Russell King - ARM Linux
2011-07-25 12:01                 ` Vinod Koul
2011-07-26  7:57                   ` [PATCH] Improve slave/cyclic DMA engine documentation (was: [PATCH V4 04/14] DMA: PL330: Add DMA_CYCLIC capability) Russell King - ARM Linux
2011-07-26  9:35                     ` Vinod Koul
2011-07-26 14:37                       ` Jassi Brar
2011-07-26 17:20                         ` Russell King - ARM Linux
2011-07-26 17:55                           ` Jassi Brar
2011-07-26 18:03                             ` Grant Likely
2011-07-26 18:16                             ` Russell King - ARM Linux
2011-07-27  2:38                             ` Vinod Koul
2011-07-27  9:01                       ` Russell King - ARM Linux
2011-07-27  9:06                         ` Koul, Vinod
2011-07-26 13:25                     ` Russell King - ARM Linux
2011-07-25 12:36           ` [PATCH V4 04/14] DMA: PL330: Add DMA_CYCLIC capability Boojin Kim
2011-07-25 12:34         ` Boojin Kim
2011-07-25 11:24   ` Jassi Brar
2011-07-26 12:28     ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 05/14] ARM: SAMSUNG: Update to use PL330-DMA driver Boojin Kim
2011-07-25 10:52   ` Vinod Koul
2011-07-25 11:31   ` Jassi Brar
2011-07-25  1:28 ` [PATCH V4 06/14] ARM: SAMSUNG: Add common DMA operations Boojin Kim
2011-07-25  9:36   ` Russell King - ARM Linux
2011-07-25  9:57     ` Boojin Kim
2011-07-25 11:51   ` Jassi Brar
2011-07-26  8:02     ` Russell King - ARM Linux
2011-07-26 17:43       ` Jassi Brar [this message]
2011-07-26 18:14         ` Russell King - ARM Linux
2011-07-26 19:54           ` Jassi Brar
2011-07-26  9:35     ` Boojin Kim
2011-07-27  1:33       ` Jassi Brar
2011-07-27  5:17         ` Boojin Kim
2011-07-27  7:57           ` Jassi Brar
2011-07-28  0:38             ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 07/14] ARM: EXYNOS4: Use generic DMA PL330 driver Boojin Kim
2011-07-25 11:59   ` Jassi Brar
2011-07-25 12:59     ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 08/14] ARM: S5PV210: " Boojin Kim
2011-07-25  1:28 ` [PATCH V4 09/14] ARM: S5PC100: " Boojin Kim
2011-07-25  1:28 ` [PATCH V4 10/14] ARM: S5P64X0: " Boojin Kim
2011-07-25  1:28 ` [PATCH V4 11/14] ARM: SAMSUNG: Remove S3C-PL330-DMA driver Boojin Kim
2011-07-25  1:28 ` [PATCH V4 12/14] spi/s3c64xx: Add support DMA engine API Boojin Kim
2011-07-25  9:40   ` Russell King - ARM Linux
2011-07-25 10:34     ` Boojin Kim
2011-07-25 11:17   ` Vinod Koul
2011-07-26  9:31     ` Boojin Kim
2011-07-26 10:14       ` Vinod Koul
2011-07-27  5:05         ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 13/14] ASoC: Samsung: Update DMA interface Boojin Kim
2011-07-25  1:28 ` [PATCH V4 14/14] ARM: SAMSUNG: Remove Samsung specific enum type for dma direction Boojin Kim
2011-07-25 12:08   ` Jassi Brar
2011-07-25 21:15     ` Grant Likely
2011-07-28  1:23       ` Boojin Kim
2011-07-25 10:17 ` [RESEND] [PATCH V4 0/14] To use DMA generic APIs for Samsung DMA Vinod Koul
2011-07-25 11:09   ` Vinod Koul

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=CABb+yY2rQXxHGJuvhtJGgrCsoFZgsACHWUEV0L-kpqaDaCFAQA@mail.gmail.com \
    --to=jassisinghbrar@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.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).