All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Ferre <nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
To: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
	Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH] of: Add generic device tree DMA helpers
Date: Tue, 20 Mar 2012 15:54:45 +0100	[thread overview]
Message-ID: <4F689A35.2080305@atmel.com> (raw)
In-Reply-To: <20120319144517.C19E93E05A5@localhost>

On 03/19/2012 03:45 PM, Grant Likely :
> On Mon, 19 Mar 2012 14:30:05 +0100, Nicolas Ferre <nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org> wrote:
>> On 03/17/2012 10:40 AM, Grant Likely :
>>> On Thu, 15 Mar 2012 09:38:10 +0100, Nicolas Ferre <nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org> 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.

Is not it what the phandle to the dma controller is made for?

Bye,
-- 
Nicolas Ferre

WARNING: multiple messages have this Message-ID (diff)
From: nicolas.ferre@atmel.com (Nicolas Ferre)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] of: Add generic device tree DMA helpers
Date: Tue, 20 Mar 2012 15:54:45 +0100	[thread overview]
Message-ID: <4F689A35.2080305@atmel.com> (raw)
In-Reply-To: <20120319144517.C19E93E05A5@localhost>

On 03/19/2012 03:45 PM, Grant Likely :
> 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.

Is not it what the phandle to the dma controller is made for?

Bye,
-- 
Nicolas Ferre

  reply	other threads:[~2012-03-20 14:54 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
2012-03-19 14:45           ` Grant Likely
2012-03-20 14:54           ` Nicolas Ferre [this message]
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=4F689A35.2080305@atmel.com \
    --to=nicolas.ferre-aife0yeh4naavxtiumwx3w@public.gmane.org \
    --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
    --cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
    --cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
    --cc=swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.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 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.