All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: "Cousson, Benoit" <b-cousson@ti.com>,
	linux-arm-kernel@lists.infradead.org,
	Nicolas Ferre <nicolas.ferre@atmel.com>,
	grant.likely@secretlab.ca, rob.herring@calxeda.com,
	devicetree-discuss@lists.ozlabs.org,
	Stephen Warren <swarren@nvidia.com>,
	linux-omap@vger.kernel.org,
	Thierry Reding <thierry.reding@avionic-design.de>
Subject: Re: [PATCH] of: Add generic device tree DMA helpers
Date: Fri, 16 Mar 2012 09:56:59 +0000	[thread overview]
Message-ID: <201203160956.59674.arnd@arndb.de> (raw)
In-Reply-To: <20120315215537.GB2842@n2100.arm.linux.org.uk>

On Thursday 15 March 2012, Russell King - ARM Linux wrote:
> Thank you both for missing my point.
> 
> #define OMAP24XX_DMA_SHA1MD5_RX         13      /* S_DMA_12 */
> #define OMAP34XX_DMA_SHA2MD5_RX         13      /* S_DMA_12 */
> 
> #define OMAP242X_DMA_EXT_DMAREQ2        14      /* S_DMA_13 */
> #define OMAP243X_DMA_EXT_DMAREQ3        14      /* S_DMA_13 */
> 
> #define OMAP242X_DMA_EXT_DMAREQ3        15      /* S_DMA_14 */
> #define OMAP24XX_DMA_SPI3_TX0           15      /* S_DMA_14 */
> 
> #define OMAP242X_DMA_EXT_DMAREQ4        16      /* S_DMA_15 */
> #define OMAP24XX_DMA_SPI3_RX0           16      /* S_DMA_15 */
> 
> #define OMAP242X_DMA_EAC_BT_DL_RD       25      /* S_DMA_24 */
> #define OMAP243X_DMA_EXT_DMAREQ4        25      /* S_DMA_24 */
> #define OMAP34XX_DMA_I2C3_TX            25      /* S_DMA_24 */
> 
> Notice the overlap between the different SoCs for the same number on the
> same DMA controller.
> 
> This shouldn't cause problems when all users are within the SoC specific
> file, but those EXT ones would probably be platform specific, and so you
> immediately have a dependence between the platform and the SoC there.
> 
> That dependence can be completely eliminated by other matching schemes
> which are supportable via the DMA engine API.

Ok, so I guess you are worried about the case where you have one .dtsi
include file for the soc and another .dtsi file for the platform, and
you want to generically encode e.g. DMA_EXT_DMAREQ3 in the platform file
so you don't need to write a new .dts file for each combination of that
platform wiht a different soc. Does that describe where you see the
issue?

If so, I would recommend not using a flat numbering scheme for omap,
but have something slightly more complex like a lot of the other
dmagenine drivers do. This binding does not make any assumption about
the meaning of the values, so you can do e.g. three cells for
each channel with a definition like this:

Cell 1: channel class
 Possible values are:
 0 -- raw channel number
 1 -- external channel
 2 -- spi
 3 -- i2c
 4 -- mmc
 to be extended when necessary

Cell 2: instance of this channel
 When Cell 1 is zero, this is just the channel number local to the controller,
 for other values it defines the instance, e.g. ext0, ext1, ext2, ...

Cell 3: DMA direction
 The following values are defined:
 0 -- invalid
 1 -- read
 2 -- write
 3 -- read/write

This specific binding for the omap dma would let you put either a simple channel
into the device tree, or have a high-level description in there. On an OMAP243X,
these two would have the same meaning and a user could put either one in there:

	dma-request = <&dmaengine 0 14 1     /* physical channels 14 (read) */
			&dmaengine 0 15 2>;  /*   and 15 (write)  */

	dma-request = <&dmaengine 1 3 1	     /* external DMA 3 (read) and 4 (write) */
			&dmaengine 1 4 2>;


The cell layout above is just a made-up example, you can basically put everything 
in there that you would put into the arguments to the dma match function. I believe
this is not limited to numbers but can also include phandles and strings. The mapping
from dma classes to physical channels could either be hardcoded in the source for
the dmaengine driver, or get passed in properties of the dmaengine's device_node.

A completely different way to get around the same problem is to define a tree
of virtual dmaengine device nodes, still within the same binding:


	dmaengine-phys: dmaengine {
		compatible = "ti,omap2430-dmaengine", "ti,omap2-dmaengine";
		reg = <0x4a056000 0x1000>;
		#address-cells = <1>; /* physical dma channel number space */		
		#size-cells = <0>;
		#dma-cells = 1;

		dmaengine-ext: dmaengine@2 {
			ranges = <0 2>, <1 3>, <2 7>, <3 14>, <4 25>,
				<5 25> <6 64>;
			#dma-cells = 1;
		};
	};

This way, a device driver could either refer to the physical dmaengine device
and pass
a physical number like

	dma-requests = <&dmaengine-phys 14>;

or to the same effect refer to a child of node of that engine passing a
local number like

	dma-requests = <&dmaengine-ext 3>;

The dmaengine driver in this case can simply use of_translate_address() to
get from channel 3 to 14 using the ranges in the child dmaengine device node.

	Arnd

WARNING: multiple messages have this Message-ID (diff)
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] of: Add generic device tree DMA helpers
Date: Fri, 16 Mar 2012 09:56:59 +0000	[thread overview]
Message-ID: <201203160956.59674.arnd@arndb.de> (raw)
In-Reply-To: <20120315215537.GB2842@n2100.arm.linux.org.uk>

On Thursday 15 March 2012, Russell King - ARM Linux wrote:
> Thank you both for missing my point.
> 
> #define OMAP24XX_DMA_SHA1MD5_RX         13      /* S_DMA_12 */
> #define OMAP34XX_DMA_SHA2MD5_RX         13      /* S_DMA_12 */
> 
> #define OMAP242X_DMA_EXT_DMAREQ2        14      /* S_DMA_13 */
> #define OMAP243X_DMA_EXT_DMAREQ3        14      /* S_DMA_13 */
> 
> #define OMAP242X_DMA_EXT_DMAREQ3        15      /* S_DMA_14 */
> #define OMAP24XX_DMA_SPI3_TX0           15      /* S_DMA_14 */
> 
> #define OMAP242X_DMA_EXT_DMAREQ4        16      /* S_DMA_15 */
> #define OMAP24XX_DMA_SPI3_RX0           16      /* S_DMA_15 */
> 
> #define OMAP242X_DMA_EAC_BT_DL_RD       25      /* S_DMA_24 */
> #define OMAP243X_DMA_EXT_DMAREQ4        25      /* S_DMA_24 */
> #define OMAP34XX_DMA_I2C3_TX            25      /* S_DMA_24 */
> 
> Notice the overlap between the different SoCs for the same number on the
> same DMA controller.
> 
> This shouldn't cause problems when all users are within the SoC specific
> file, but those EXT ones would probably be platform specific, and so you
> immediately have a dependence between the platform and the SoC there.
> 
> That dependence can be completely eliminated by other matching schemes
> which are supportable via the DMA engine API.

Ok, so I guess you are worried about the case where you have one .dtsi
include file for the soc and another .dtsi file for the platform, and
you want to generically encode e.g. DMA_EXT_DMAREQ3 in the platform file
so you don't need to write a new .dts file for each combination of that
platform wiht a different soc. Does that describe where you see the
issue?

If so, I would recommend not using a flat numbering scheme for omap,
but have something slightly more complex like a lot of the other
dmagenine drivers do. This binding does not make any assumption about
the meaning of the values, so you can do e.g. three cells for
each channel with a definition like this:

Cell 1: channel class
 Possible values are:
 0 -- raw channel number
 1 -- external channel
 2 -- spi
 3 -- i2c
 4 -- mmc
 to be extended when necessary

Cell 2: instance of this channel
 When Cell 1 is zero, this is just the channel number local to the controller,
 for other values it defines the instance, e.g. ext0, ext1, ext2, ...

Cell 3: DMA direction
 The following values are defined:
 0 -- invalid
 1 -- read
 2 -- write
 3 -- read/write

This specific binding for the omap dma would let you put either a simple channel
into the device tree, or have a high-level description in there. On an OMAP243X,
these two would have the same meaning and a user could put either one in there:

	dma-request = <&dmaengine 0 14 1     /* physical channels 14 (read) */
			&dmaengine 0 15 2>;  /*   and 15 (write)  */

	dma-request = <&dmaengine 1 3 1	     /* external DMA 3 (read) and 4 (write) */
			&dmaengine 1 4 2>;


The cell layout above is just a made-up example, you can basically put everything 
in there that you would put into the arguments to the dma match function. I believe
this is not limited to numbers but can also include phandles and strings. The mapping
from dma classes to physical channels could either be hardcoded in the source for
the dmaengine driver, or get passed in properties of the dmaengine's device_node.

A completely different way to get around the same problem is to define a tree
of virtual dmaengine device nodes, still within the same binding:


	dmaengine-phys: dmaengine {
		compatible = "ti,omap2430-dmaengine", "ti,omap2-dmaengine";
		reg = <0x4a056000 0x1000>;
		#address-cells = <1>; /* physical dma channel number space */		
		#size-cells = <0>;
		#dma-cells = 1;

		dmaengine-ext: dmaengine at 2 {
			ranges = <0 2>, <1 3>, <2 7>, <3 14>, <4 25>,
				<5 25> <6 64>;
			#dma-cells = 1;
		};
	};

This way, a device driver could either refer to the physical dmaengine device
and pass
a physical number like

	dma-requests = <&dmaengine-phys 14>;

or to the same effect refer to a child of node of that engine passing a
local number like

	dma-requests = <&dmaengine-ext 3>;

The dmaengine driver in this case can simply use of_translate_address() to
get from channel 3 to 14 using the ranges in the child dmaengine device node.

	Arnd

  reply	other threads:[~2012-03-16  9:57 UTC|newest]

Thread overview: 160+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-27 17:29 [RFC PATCH 1/2] of: Add generic device tree DMA helpers Cousson, Benoit
2012-01-27 17:29 ` Cousson, Benoit
2012-01-27 18:13 ` Stephen Warren
2012-01-27 18:13   ` Stephen Warren
2012-01-27 20:36   ` Cousson, Benoit
2012-01-27 20:36     ` Cousson, Benoit
2012-01-28 18:12     ` Grant Likely
2012-01-28 18:12       ` Grant Likely
2012-01-28 18:06 ` Grant Likely
2012-01-28 18:06   ` Grant Likely
2012-01-31 21:26   ` Cousson, Benoit
2012-01-31 21:26     ` Cousson, Benoit
2012-02-02  4:52     ` Grant Likely
2012-02-02  4:52       ` Grant Likely
2012-01-31 23:09   ` Russell King - ARM Linux
2012-01-31 23:09     ` Russell King - ARM Linux
2012-02-01 10:50     ` Cousson, Benoit
2012-02-01 10:50       ` Cousson, Benoit
     [not found]       ` <4F2918F6.9040100-l0cyMroinI0@public.gmane.org>
2012-02-02  8:45         ` Russell King - ARM Linux
2012-02-02  8:45           ` Russell King - ARM Linux
     [not found]           ` <20120202084539.GC1275-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-02  8:54             ` Cousson, Benoit
2012-02-02  8:54               ` Cousson, Benoit
2012-02-22 10:59 ` Nicolas Ferre
2012-02-22 10:59   ` Nicolas Ferre
2012-02-23 10:03   ` Cousson, Benoit
2012-02-23 10:03     ` Cousson, Benoit
2012-02-23 15:51     ` Nicolas Ferre
2012-02-23 15:51       ` Nicolas Ferre
2012-02-23 15:57       ` Cousson, Benoit
2012-02-23 15:57         ` Cousson, Benoit
     [not found]         ` <4F4661DE.90704-l0cyMroinI0@public.gmane.org>
2012-02-27 13:09           ` Nicolas Ferre
2012-02-27 13:09             ` Nicolas Ferre
2012-02-27 14:22             ` Cousson, Benoit
2012-02-27 14:22               ` Cousson, Benoit
2012-02-27 17:28               ` Nicolas Ferre
2012-02-27 17:28                 ` Nicolas Ferre
2012-02-29 14:54 ` [RFC PATCH] of: DMA helpers: manage generic requests specification Nicolas Ferre
2012-02-29 14:54   ` Nicolas Ferre
2012-02-29 20:54   ` Stephen Warren
2012-02-29 20:54     ` Stephen Warren
2012-03-05 13:14     ` Cousson, Benoit
2012-03-05 13:14       ` Cousson, Benoit
2012-03-05 18:30       ` Stephen Warren
2012-03-05 18:30         ` Stephen Warren
2012-03-05 19:57         ` Russell King - ARM Linux
2012-03-05 19:57           ` Russell King - ARM Linux
2012-03-05 10:55   ` Cousson, Benoit
2012-03-05 10:55     ` Cousson, Benoit
2012-03-05 15:36   ` Grant Likely
2012-03-05 15:36     ` Grant Likely
2012-03-14 17:47     ` Nicolas Ferre
2012-03-14 17:47       ` Nicolas Ferre
2012-03-14 18:16       ` Stephen Warren
2012-03-14 18:16         ` Stephen Warren
     [not found] ` <4F22DEF2.5000807-l0cyMroinI0@public.gmane.org>
2012-03-15  8:38   ` [PATCH] of: Add generic device tree DMA helpers Nicolas Ferre
2012-03-15  8:38     ` Nicolas Ferre
2012-03-15  9:22     ` Arnd Bergmann
2012-03-15  9:22       ` Arnd Bergmann
2012-03-15  9:26       ` Russell King - ARM Linux
2012-03-15  9:26         ` Russell King - ARM Linux
2012-03-15 10:09         ` Arnd Bergmann
2012-03-15 10:09           ` Arnd Bergmann
2012-03-17  9:42         ` Grant Likely
2012-03-17  9:42           ` Grant Likely
2012-03-17 16:03           ` Arnd Bergmann
2012-03-17 16:03             ` Arnd Bergmann
2012-03-18  9:08             ` Grant Likely
2012-03-18  9:08               ` Grant Likely
2012-03-15 10:27       ` Thierry Reding
2012-03-15 10:27         ` Thierry Reding
2012-03-17 10:47         ` Grant Likely
2012-03-17 10:47           ` Grant Likely
2012-03-18  9:22           ` Thierry Reding
2012-03-18  9:22             ` Thierry Reding
2012-03-18 15:10             ` Arnd Bergmann
2012-03-18 15:10               ` Arnd Bergmann
2012-03-18 18:22             ` Grant Likely
2012-03-18 18:22               ` Grant Likely
2012-03-19 13:02           ` Mark Brown
2012-03-19 13:02             ` Mark Brown
2012-03-19 15:01             ` Arnd Bergmann
2012-03-19 15:01               ` Arnd Bergmann
2012-03-19 15:07               ` Stephen Warren
2012-03-19 15:07                 ` Stephen Warren
2012-03-19 15:45                 ` Arnd Bergmann
2012-03-19 15:45                   ` Arnd Bergmann
     [not found]                   ` <201203191545.40933.arnd-r2nGTMty4D4@public.gmane.org>
2012-03-19 16:54                     ` Stephen Warren
2012-03-19 16:54                       ` Stephen Warren
2012-03-15 16:30       ` Cousson, Benoit
2012-03-15 16:30         ` Cousson, Benoit
2012-03-15 19:57         ` Russell King - ARM Linux
2012-03-15 19:57           ` Russell King - ARM Linux
     [not found]           ` <20120315195753.GA2842-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-03-15 20:41             ` Arnd Bergmann
2012-03-15 20:41               ` Arnd Bergmann
2012-03-15 21:39               ` Cousson, Benoit
2012-03-15 21:39                 ` Cousson, Benoit
2012-03-15 21:55                 ` Russell King - ARM Linux
2012-03-15 21:55                   ` Russell King - ARM Linux
2012-03-16  9:56                   ` Arnd Bergmann [this message]
2012-03-16  9:56                     ` Arnd Bergmann
2012-03-20 14:02                 ` Matt Porter
2012-03-20 14:02                   ` Matt Porter
2012-03-15 23:45           ` Nicolas Pitre
2012-03-15 23:45             ` Nicolas Pitre
2012-03-16 10:03     ` Arnd Bergmann
2012-03-16 10:03       ` Arnd Bergmann
2012-03-16 11:19       ` Cousson, Benoit
2012-03-16 11:19         ` Cousson, Benoit
2012-03-16 12:04         ` Arnd Bergmann
2012-03-16 12:04           ` Arnd Bergmann
2012-03-16 13:28           ` Cousson, Benoit
2012-03-16 13:28             ` Cousson, Benoit
2012-03-16 13:36             ` Nicolas Ferre
2012-03-16 13:36               ` Nicolas Ferre
2012-03-17  9:40     ` Grant Likely
2012-03-17  9:40       ` Grant Likely
2012-03-18 20:13       ` Arnd Bergmann
2012-03-18 20:13         ` Arnd Bergmann
2012-03-18 20:44         ` Grant Likely
2012-03-18 20:44           ` Grant Likely
2012-03-18 21:58           ` Arnd Bergmann
2012-03-18 21:58             ` Arnd Bergmann
2012-03-18 22:12             ` Arnd Bergmann
2012-03-18 22:12               ` Arnd Bergmann
2012-03-19 13:37         ` Nicolas Ferre
2012-03-19 13:37           ` Nicolas Ferre
2012-03-19 15:20           ` Russell King - ARM Linux
2012-03-19 15:20             ` Russell King - ARM Linux
2012-03-19 15:58             ` Cousson, Benoit
2012-03-19 15:58               ` Cousson, Benoit
2012-03-19 13:30       ` Nicolas Ferre
2012-03-19 13:30         ` Nicolas Ferre
2012-03-19 14:06         ` Arnd Bergmann
2012-03-19 14:06           ` Arnd Bergmann
2012-03-19 15:33           ` Russell King - ARM Linux
2012-03-19 15:33             ` Russell King - ARM Linux
2012-03-19 16:11             ` Arnd Bergmann
2012-03-19 16:11               ` Arnd Bergmann
2012-03-19 18:06               ` Jassi Brar
2012-03-19 18:06                 ` Jassi Brar
2012-03-19 16:31             ` Nicolas Ferre
2012-03-19 16:31               ` Nicolas Ferre
2012-03-19 17:49               ` Cousson, Benoit
2012-03-19 17:49                 ` Cousson, Benoit
2012-03-19 14:45         ` Grant Likely
2012-03-19 14:45           ` Grant Likely
2012-03-20 14:54           ` Nicolas Ferre
2012-03-20 14:54             ` Nicolas Ferre
2012-03-20 10:13     ` [PATCH v2 1/2] " Nicolas Ferre
2012-03-20 10:13       ` Nicolas Ferre
2012-03-20 10:13       ` [PATCH 2/2] of: selftest/dma: Add selftest for new DT DMA request helpers Nicolas Ferre
2012-03-20 10:13         ` Nicolas Ferre
2012-03-20 14:16         ` Grant Likely
2012-03-20 14:16           ` Grant Likely
2012-03-20 10:17       ` [PATCH] of: dma/fixup Nicolas Ferre
2012-03-20 10:17         ` Nicolas Ferre
     [not found]       ` <6b5dc1fadfd03a48093338b6981c0a7ae7662212.1332237596.git.nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2012-03-20 13:03         ` [PATCH v2 1/2] of: Add generic device tree DMA helpers Arnd Bergmann
2012-03-20 13:03           ` Arnd Bergmann
2012-03-20 15:38       ` Stephen Warren
2012-03-20 15:38         ` Stephen Warren

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=201203160956.59674.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=b-cousson@ti.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=grant.likely@secretlab.ca \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=nicolas.ferre@atmel.com \
    --cc=rob.herring@calxeda.com \
    --cc=swarren@nvidia.com \
    --cc=thierry.reding@avionic-design.de \
    /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.