linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/5] dmaengine: dw_dmac: move to generic DMA binding
Date: Tue, 29 Jan 2013 17:45:46 +0000	[thread overview]
Message-ID: <20130129174546.GE23505@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <201301291636.38773.arnd@arndb.de>

On Tue, Jan 29, 2013 at 04:36:38PM +0000, Arnd Bergmann wrote:
> If the pl080 driver already has code for the mux in it, then it should
> handle both of_dma_controller instances in my example. It would
> not change anything regarding the binding, which just describes the
> way that the hardware is connected. I have not looked at the implementation
> of the pl080 driver, but I'd assume we could get away with just having
> two separate xlate() functions.

Well, how it all works in the PL08x driver at present is:

- the platform code passes into the PL08x driver a description of the
  virtual channels, eg:

        [1] = {
                /* Muxed on channel 0-3 */
                .bus_id = "aacirx",
                .min_signal = 0,
                .max_signal = 2,
                .muxval = 0x01,
                .periph_buses = PL08X_AHB1 | PL08X_AHB2,
        },

- the virtual channels include:
  - the minimum and maximum index of the DMA request signals into the
    PL08x that can be used with this peripheral.
  - the the register value for the external mux, if any.
  - other PL08x specific data to do with this DMA peripheral

- when a virtual channel is requested by a DMA client, it claims just
  the virtual channel.  No actual hardware resources are assigned,
  and no mappings are setup.

- when a transfer is prepared on a virtual channel, part of the
  preparation is to locate the request signal to be used - and
  platform code is requested to supply that from the description
  associated with the channel (such as the above fragment.)

- the versatile PL08x code looks at min_signal/max_signal, and walks
  this space looking for an unassigned request signal.  If there is
  an external mux associated with this request signal, the mux is
  appropriately programmed.  If a request signal is currently assigned
  the next request signal will be tried until there are no further
  possibilities, when failure occurs.  In that case, the prepare
  function also fails.

- the PL08x driver then knows which request signal is associated with
  the peripheral, and sets up the descriptors to be dependent on this
  request signal.  This mapping must not change until the transfer
  has completed.

- when the descriptor is completed - and freed, the muxing is released
  and the DMA request signal becomes available for other users to make
  use of.

Practically, what this means is that:

(a) we've ensured that all drivers using PL08x do _not_ expect that
descriptors can always be prepared; they must continue to work correctly
when the prepare function returns NULL.

(b) several devices end up sharing the first three request signals
and they're used on an opportunistic basis.  Theoretically, if you have
one of these boards where AACI DMA works, you can be using one of these
DMA requests for audio playback, another for record, and the remaining
one can be used on an opportunistic basis between the second MMCI
interface (should that also work - which I've proven is an impossiblity!)
and the 3rd UART... or the USB if there was a driver for that device.

  reply	other threads:[~2013-01-29 17:45 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1359395857-1235-1-git-send-email-arnd@arndb.de>
2013-01-28 21:58 ` [PATCH v2 0/5] dmaengine: convert dw_dmac/spear13xx to generic binding Arnd Bergmann
2013-01-28 21:58   ` [PATCH 1/5] dmaengine: dw_dmac: move to generic DMA binding Arnd Bergmann
2013-01-29  7:24     ` Viresh Kumar
2013-01-29 10:35       ` Arnd Bergmann
2013-01-29 10:49         ` Viresh Kumar
2013-01-29 10:54           ` Andy Shevchenko
2013-01-29 10:57             ` Viresh Kumar
2013-01-29 11:14               ` Andy Shevchenko
2013-01-29 13:31           ` Arnd Bergmann
2013-01-29 13:45             ` Andy Shevchenko
2013-01-29 14:26               ` Russell King - ARM Linux
2013-01-29 15:28               ` Arnd Bergmann
2013-01-29 15:17             ` Viresh Kumar
2013-01-29 16:21               ` Arnd Bergmann
2013-01-30  2:04                 ` Viresh Kumar
2013-01-30  9:41                   ` Arnd Bergmann
2013-01-30  9:48                     ` Viresh Kumar
2013-01-30 10:08                       ` Arnd Bergmann
2013-01-30 10:32                         ` Viresh Kumar
     [not found]     ` <1359445171.31148.30.camel@smile>
2013-01-29 10:50       ` Arnd Bergmann
2013-01-29 11:18         ` Russell King - ARM Linux
2013-01-29 13:44           ` Arnd Bergmann
2013-01-29 14:24             ` Russell King - ARM Linux
2013-01-29 14:55               ` Arnd Bergmann
2013-01-29 15:44                 ` Russell King - ARM Linux
2013-01-29 16:36                   ` Arnd Bergmann
2013-01-29 17:45                     ` Russell King - ARM Linux [this message]
2013-01-29 20:40                       ` Arnd Bergmann
2013-01-29 21:59                         ` Linus Walleij
2013-02-15  8:50     ` Andy Shevchenko
2013-02-15 11:17       ` Arnd Bergmann
2013-01-28 21:58   ` [PATCH 2/5] spi: pl022: use generic DMA slave configuration if possible Arnd Bergmann
2013-01-29  2:41     ` Mark Brown
2013-01-29  7:49     ` Andy Shevchenko
2013-01-29 13:13       ` Arnd Bergmann
2013-02-07 18:29         ` Linus Walleij
2013-02-07 19:42           ` Arnd Bergmann
2013-02-07 20:19             ` Linus Walleij
2013-02-07 21:15               ` Arnd Bergmann
2013-02-08 16:22                 ` Russell King - ARM Linux
2013-02-08 16:28                   ` Arnd Bergmann
2013-02-08 22:10                     ` Linus Walleij
2013-02-08 16:20           ` Russell King - ARM Linux
2013-01-28 21:58   ` [PATCH 3/5] serial: pl011: " Arnd Bergmann
2013-01-30  4:38     ` Greg Kroah-Hartman
2013-01-28 21:58   ` [PATCH 4/5] ata: arasan: remove the need for platform_data Arnd Bergmann
2013-01-29  8:18     ` Viresh Kumar
2013-01-28 21:58   ` [PATCH 5/5] ARM: SPEAr13xx: Pass generic DW DMAC platform data from DT Arnd Bergmann
2013-01-29  8:16     ` Viresh Kumar
2013-01-29 13:21       ` Arnd Bergmann

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=20130129174546.GE23505@n2100.arm.linux.org.uk \
    --to=linux@arm.linux.org.uk \
    --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).