All of lore.kernel.org
 help / color / mirror / Atom feed
From: Grant Likely <grant.likely@secretlab.ca>
To: Nicolas Ferre <nicolas.ferre@atmel.com>,
	Benoit Cousson <b-cousson@ti.com>, Arnd Bergmann <arnd@arndb.de>
Cc: Russell King <linux@arm.linux.org.uk>,
	devicetree-discuss@lists.ozlabs.org, rob.herring@calxeda.com,
	Stephen Warren <swarren@nvidia.com>,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] of: Add generic device tree DMA helpers
Date: Mon, 19 Mar 2012 14:45:17 +0000	[thread overview]
Message-ID: <20120319144517.C19E93E05A5@localhost> (raw)
In-Reply-To: <4F6734DD.3020203@atmel.com>

On Mon, 19 Mar 2012 14:30:05 +0100, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> On 03/17/2012 10:40 AM, Grant Likely :
> > On Thu, 15 Mar 2012 09:38:10 +0100, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> >> +struct of_dma {
> >> +	struct list_head of_dma_controllers;
> >> +	struct device_node *of_node;
> >> +	int of_dma_n_cells;
> >> +	int (*of_dma_xlate)(struct of_phandle_args *dma_spec, void *data);
> >> +};
> > 
> > This _xlate is nearly useless as a generic API.  It solves the problem for
> > the specific case where the driver is hard-coded to know which DMA engine
> > to talk to, but since the returned data doesn't provide any context, it
> > isn't useful if there are multiple DMA controllers to choose from.
> 
> You mean, if there is no DMA controller phandle specified in the
> property?

No; I'm assuming that dma-channel properties will alwasy have a
phandle to the dma controller node.

> I think that it is not the purpose of this API to choose a DMA
> controller, Nor to provide a channel. The only purpose of this API is to
> give a HW request to be used by a DMA slave driver. This slave should
> already have a channel to use and a controller to talk to.

Then where is the function that finds the reference to the DMA
controller?  I don't understand why it would be useful to decode that
separately.

> > The void *data pointer must be replaced with a typed structure so that
> > context can be returned.
> 
> I am not sure to follow you entirely... How do I address the fact that
> several types of request value can be returned then?
> 
> BTW, can we imagine a phandle property with a sting as a argument?
> should it be written this way?
> dma-request = <&testdmac1>, "slave-rx", "slave-tx";

No, I'm not suggesting that.  Mixing phandles and strings in a single
property is possible but ugly.  The phandle-args pattern which uses
zero or more cells as arguments should be used.

> 
> If yes, the of_parse_phandle_with_args() is not working on this type...

Right; of_parse_phandle_with_args() should do the job.

> 
> (I realize that there seems to be no way out for a generic API: maybe we
> should move to one or two cases to address and concentrate on them).

The way I read this patch, the xlate function returns a single
integer representing the DMA request number, but it doesn't provide
any data about *which* dma controller is associated with that channel.
The result of xlate needs to be something like a dma_chan reference
that identifies both the DMA engine and the channel/request on that
dma engine.

[...]
> >> +/**
> >> + * of_dma_xlate_onenumbercell() - Generic DMA xlate for direct one cell bindings
> >> + *
> >> + * Device Tree DMA translation function which works with one cell bindings
> >> + * where the cell values map directly to the hardware request number understood
> >> + * by the DMA controller.
> >> + */
> >> +int of_dma_xlate_onenumbercell(struct of_phandle_args *dma_spec, void *dma_req)
> >> +{
> >> +	if (!dma_spec)
> >> +		return -EINVAL;
> >> +	if (WARN_ON(dma_spec->args_count != 1))
> >> +		return -EINVAL;
> >> +	*(int *)dma_req = dma_spec->args[0];
> > 
> > Following on from comment above; the void *dma_req parameter is dangerous.  How
> > does this function know that it has been passed an int* pointer?
> 
> Well, that is a drawback that comes from having to address generic
> cases.

Not if you do it right.  If a specific data structure is returned,
then there can be context attached as to what the data means and which
dma controller knows how to parse it.

> But anyway, if the DMA controller decide to register a .xlate()
> function that returns an integer, the slave driver that will ask a
> "request line" to this DMA controller will be aware that an integer has
> to be passed to of_get_dma_request().

The problem still remains; I don't see how the dma slave can figure
out *which* dma controller it needs to talk to.

g.

-- 
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies,Ltd.

WARNING: multiple messages have this Message-ID (diff)
From: grant.likely@secretlab.ca (Grant Likely)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] of: Add generic device tree DMA helpers
Date: Mon, 19 Mar 2012 14:45:17 +0000	[thread overview]
Message-ID: <20120319144517.C19E93E05A5@localhost> (raw)
In-Reply-To: <4F6734DD.3020203@atmel.com>

On Mon, 19 Mar 2012 14:30:05 +0100, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> On 03/17/2012 10:40 AM, Grant Likely :
> > On Thu, 15 Mar 2012 09:38:10 +0100, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> >> +struct of_dma {
> >> +	struct list_head of_dma_controllers;
> >> +	struct device_node *of_node;
> >> +	int of_dma_n_cells;
> >> +	int (*of_dma_xlate)(struct of_phandle_args *dma_spec, void *data);
> >> +};
> > 
> > This _xlate is nearly useless as a generic API.  It solves the problem for
> > the specific case where the driver is hard-coded to know which DMA engine
> > to talk to, but since the returned data doesn't provide any context, it
> > isn't useful if there are multiple DMA controllers to choose from.
> 
> You mean, if there is no DMA controller phandle specified in the
> property?

No; I'm assuming that dma-channel properties will alwasy have a
phandle to the dma controller node.

> I think that it is not the purpose of this API to choose a DMA
> controller, Nor to provide a channel. The only purpose of this API is to
> give a HW request to be used by a DMA slave driver. This slave should
> already have a channel to use and a controller to talk to.

Then where is the function that finds the reference to the DMA
controller?  I don't understand why it would be useful to decode that
separately.

> > The void *data pointer must be replaced with a typed structure so that
> > context can be returned.
> 
> I am not sure to follow you entirely... How do I address the fact that
> several types of request value can be returned then?
> 
> BTW, can we imagine a phandle property with a sting as a argument?
> should it be written this way?
> dma-request = <&testdmac1>, "slave-rx", "slave-tx";

No, I'm not suggesting that.  Mixing phandles and strings in a single
property is possible but ugly.  The phandle-args pattern which uses
zero or more cells as arguments should be used.

> 
> If yes, the of_parse_phandle_with_args() is not working on this type...

Right; of_parse_phandle_with_args() should do the job.

> 
> (I realize that there seems to be no way out for a generic API: maybe we
> should move to one or two cases to address and concentrate on them).

The way I read this patch, the xlate function returns a single
integer representing the DMA request number, but it doesn't provide
any data about *which* dma controller is associated with that channel.
The result of xlate needs to be something like a dma_chan reference
that identifies both the DMA engine and the channel/request on that
dma engine.

[...]
> >> +/**
> >> + * of_dma_xlate_onenumbercell() - Generic DMA xlate for direct one cell bindings
> >> + *
> >> + * Device Tree DMA translation function which works with one cell bindings
> >> + * where the cell values map directly to the hardware request number understood
> >> + * by the DMA controller.
> >> + */
> >> +int of_dma_xlate_onenumbercell(struct of_phandle_args *dma_spec, void *dma_req)
> >> +{
> >> +	if (!dma_spec)
> >> +		return -EINVAL;
> >> +	if (WARN_ON(dma_spec->args_count != 1))
> >> +		return -EINVAL;
> >> +	*(int *)dma_req = dma_spec->args[0];
> > 
> > Following on from comment above; the void *dma_req parameter is dangerous.  How
> > does this function know that it has been passed an int* pointer?
> 
> Well, that is a drawback that comes from having to address generic
> cases.

Not if you do it right.  If a specific data structure is returned,
then there can be context attached as to what the data means and which
dma controller knows how to parse it.

> But anyway, if the DMA controller decide to register a .xlate()
> function that returns an integer, the slave driver that will ask a
> "request line" to this DMA controller will be aware that an integer has
> to be passed to of_get_dma_request().

The problem still remains; I don't see how the dma slave can figure
out *which* dma controller it needs to talk to.

g.

-- 
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies,Ltd.

  parent reply	other threads:[~2012-03-19 14:45 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
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 [this message]
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=20120319144517.C19E93E05A5@localhost \
    --to=grant.likely@secretlab.ca \
    --cc=arnd@arndb.de \
    --cc=b-cousson@ti.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --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 \
    /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.