linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Vinod Koul <vinod.koul@intel.com>,
	linux-kernel@vger.kernel.org,
	"'Jassi Brar'" <jassisinghbrar@gmail.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Magnus Damm <magnus.damm@gmail.com>,
	Paul Mundt <lethal@linux-sh.org>
Subject: Re: [PATCH/RFC] dmaengine: add a slave parameter to __dma_request_channel()
Date: Wed, 7 Mar 2012 11:02:46 +0100 (CET)	[thread overview]
Message-ID: <Pine.LNX.4.64.1203071041030.19595@axis700.grange> (raw)
In-Reply-To: <20120307093026.GM17370@n2100.arm.linux.org.uk>

On Wed, 7 Mar 2012, Russell King - ARM Linux wrote:

> On Wed, Mar 07, 2012 at 10:18:42AM +0100, Guennadi Liakhovetski wrote:
> > I still don't see an answer to the very same question, that we've been 
> > discussing over multiple threads and mails now: how do we use that, if 
> > it's not a 1-to-1 mapping? I.e., many channels on many controllers can be 
> > run-time configured for use with different client devices. Also the above 
> > idea from Linus W doesn't directly address this.
> > 
> > Following his clock / regulator analogy. There the correspondence is 
> > clearly fixed: fixed clocks and power supplies are used with every 
> > specific device. Whereas in our DMAC case it's not.
> > 
> > I'm trying to think of an analogy, where you have several pools of 
> > resources, and each consumer can use any of the resources on some of those 
> > pools, but nothing pops up. Interrupts, GPIOs, clocks, regulators - they 
> > all are fixed to their consumers.
> > 
> > Also notice, this can become even worse, if we ever get controllers with 
> > channels with different capabilities on them. So, I really would let the 
> > DMAC driver do the mapping and not try to put it in the core.
> 
> Well, I am quite convinced (being on my third or fourth DMA engine driver)
> that DMA engine does stuff quite wrongly when it comes to slave stuff.
> Why?
> 
> The code required to support slave device transfers is very much the same
> for each driver (that's partly because I'm writing my drivers in the same
> way.)  Essentially, slave channels aren't physical channels themselves,
> but virtual channels which get assigned to physical channels at some point.
> I would really like to see some common infrastructure for handling these
> virtual channels so I don't have to write yet another version of that code,
> and that's something I'll be working on.

Right, I thought about virtual DMA channels, but I really hoped we 
wouldn't have to do that;-) Would we then also have to use virtual DMAC 
instances? Given that the core operates in terms of DMA-controller devices 
and channels and the hardware is also built around those concepts, it 
seems a natural choice to use a 1-to-1 correspondence.

In the sh-mobile case, AFAIK, until now we can have N DMA controllers of M 
types. Within each type the controllers are identical, meaning also, that 
all channels on them can be configured to work with all the same devices. 
Currently that's also what we present to the dmaengine core and to 
clients: N controllers. Whereas it has been suggested a couple of times, 
that neither the core nore clients should be bothered with specific DMA 
controller instances, so, we might as well just present M virtual 
controllers to the system - 1 of each type, each with a unique capability 
set?

Thanks
Guennadi

> My main critera for selecting a virtual channel is the DMA request signal
> into the DMA controller itself, and nothing more.  Most other non-specific
> configuration information (data register, data register width, burst size
> etc) comes from the peripheral driver.
> 
> Any other data relevant to the DMA engine needs to come from the platform
> in some way, that being DT or platform data or whatever.  For example,
> with a DMA engine which has two bus interfaces, where it matters which
> bus interface is used, that needs to be specified by the platform and not
> by the DMA engine itself nor the peripheral driver.
> 
> That would also include, if relevant, which physical channels a virtual
> channel (dma request) could be routed to.
> 
> Note that we've been omitting that from the PL08x driver so far - memory-
> to-memory requests are supposed to only be handled by a couple of channels
> which are designed for that purpose (so they don't flood the bus) but
> we currently allocate them to any channel...
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

  parent reply	other threads:[~2012-03-07 10:03 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-01 15:26 [PATCH/RFC] dmaengine: add a slave parameter to __dma_request_channel() Guennadi Liakhovetski
2012-03-02 13:21 ` Guennadi Liakhovetski
2012-03-06  8:30   ` Vinod Koul
2012-03-06  8:53     ` Guennadi Liakhovetski
2012-03-06 12:08       ` Vinod Koul
2012-03-06 13:03         ` Guennadi Liakhovetski
2012-03-07  6:28           ` Vinod Koul
2012-03-07  9:18             ` Guennadi Liakhovetski
2012-03-07  9:30               ` Russell King - ARM Linux
2012-03-07  9:55                 ` Linus Walleij
2012-03-07 10:02                 ` Guennadi Liakhovetski [this message]
2012-03-07 10:31                   ` Russell King - ARM Linux
2012-03-07 12:30                     ` Guennadi Liakhovetski
2012-03-07 12:45                       ` Guennadi Liakhovetski
2012-03-07 12:46                       ` Russell King - ARM Linux
2012-03-07 13:49                         ` Guennadi Liakhovetski
2012-03-07 14:26                           ` Russell King - ARM Linux
2012-03-07 15:44                             ` Guennadi Liakhovetski
2012-03-07 16:27                               ` Russell King - ARM Linux
2012-03-07 18:21                                 ` Guennadi Liakhovetski
2012-03-08  6:30                                   ` Vinod Koul
2012-03-08 10:16                                     ` Guennadi Liakhovetski
2012-03-08 10:55                                       ` Vinod Koul
2012-03-08 11:22                                         ` Guennadi Liakhovetski
2012-03-08 11:34                                           ` Vinod Koul
2012-03-08 12:58                                             ` Vinod Koul
2012-03-08 13:18                                               ` Guennadi Liakhovetski
2012-03-09  9:21                                                 ` Vinod Koul
2012-03-09  9:24                                                   ` Guennadi Liakhovetski
2012-03-09  9:39                                                     ` Vinod Koul
2012-03-09 12:20                                                       ` Guennadi Liakhovetski
2012-03-09 14:07                                                         ` Russell King - ARM Linux
2012-03-09 14:15                                                           ` Guennadi Liakhovetski
2012-03-12  2:47                                                         ` Vinod Koul
2012-03-12 19:47                                                           ` Linus Walleij
2012-03-16  9:36                                                           ` Guennadi Liakhovetski
2012-03-16 10:16                                                             ` Linus Walleij
2012-03-16 10:31                                                               ` Russell King - ARM Linux
2012-03-16 11:09                                                               ` Guennadi Liakhovetski
2012-03-16 14:11                                                                 ` Linus Walleij
2012-03-16 14:28                                                                   ` Guennadi Liakhovetski
2012-03-30  5:44                                                                     ` Linus Walleij
2012-03-30  6:40                                                                       ` Guennadi Liakhovetski
2012-03-30 10:38                                                                       ` Russell King - ARM Linux
2012-04-03 20:36                                                                         ` Linus Walleij
2012-04-03 20:44                                                                         ` Linus Walleij
2012-04-12 21:33                                                                           ` Guennadi Liakhovetski
2012-04-12 23:48                                                                             ` Russell King - ARM Linux
2012-03-30 10:29                                                                     ` Russell King - ARM Linux
2012-03-30 10:40                                                                       ` Guennadi Liakhovetski
2012-03-30 10:43                                                                         ` Russell King - ARM Linux
2012-03-19 11:58                                                                   ` Vinod Koul
2012-03-30 10:25                                                                 ` Russell King - ARM Linux
2012-03-19 11:39                                                               ` Vinod Koul
2012-03-19 11:37                                                             ` Vinod Koul
2012-03-19 11:47                                                               ` Guennadi Liakhovetski
2012-03-19 13:34                                                                 ` Vinod Koul
2012-03-19 13:38                                                                   ` Guennadi Liakhovetski
2012-03-19 14:00                                                                     ` Vinod Koul
2012-03-19 14:09                                                                       ` Guennadi Liakhovetski
2012-03-19 14:22                                                                         ` Vinod Koul
2012-03-19 14:45                                                                           ` Guennadi Liakhovetski
2012-03-19 16:20                                                                             ` Vinod Koul
2012-03-19 16:32                                                                               ` Guennadi Liakhovetski
2012-03-20  7:11                                                                                 ` Vinod Koul
2012-03-08 11:46                                       ` Linus Walleij
2012-03-08 12:36                                         ` Guennadi Liakhovetski
2012-03-07 16:31                         ` Linus Walleij
2012-03-07 16:20                     ` Linus Walleij
2012-03-07  9:46               ` Linus Walleij

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=Pine.LNX.4.64.1203071041030.19595@axis700.grange \
    --to=g.liakhovetski@gmx.de \
    --cc=jassisinghbrar@gmail.com \
    --cc=lethal@linux-sh.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=magnus.damm@gmail.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 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).