[PATCH V3 1/2] of: Add generic device tree DMA helpers

Jon Hunter jon-hunter at ti.com
Fri May 4 15:19:53 EDT 2012


Hi Stephen,

On 05/04/2012 01:21 PM, Stephen Warren wrote:
> On 05/04/2012 09:06 AM, Jon Hunter wrote:
>> Hi Stephen,
>>
>> On 05/03/2012 05:26 PM, Stephen Warren wrote:
>>> On 04/30/2012 03:17 PM, Jon Hunter wrote:
>>>> From: Jon Hunter <jon-hunter at ti.com>
>>>>
>>>> This is based upon the work by Benoit Cousson [1] and Nicolas Ferre [2]
>>>> to add some basic helpers to retrieve a DMA controller device_node and the
>>>> DMA request/channel information.
> ...
>>>> +
>>>> +	sdma: dmaengine at 48000000 {
>>>> +		compatible = "ti,omap4-sdma"
>>>> +		reg = <0x48000000 0x1000>;
>>>> +		interrupts = <4>;
>>>> +		#dma-cells = <2>;
>>>> +		#dma-channels = <32>;
>>>> +		#dma-requests = <127>;
>>>> +	};
>>>> +
>>>> +
>>>> +* DMA client
>>>> +
>>>> +Client drivers should specify the DMA property using a phandle to the controller
>>>> +followed by the number of DMA request/channel and the transfer type of the
>>>
>>> What exactly is "request/channel"? Is it a request ID, a channel ID,
>>> both packed into a single integer (which bits are used for each field),
>>> etc.?
>>
>> The thought here was that some DMAs may distinguish between devices by a
>> request ID or a channel ID or both. In the case of say an OMAP4, we have
>> 32 channels and 127 request IDs. From a h/w perspective we need to know
>> both. Each of the 32 channels can be programmed to use any one of the
>> 127 h/w request signals.
> 
> From a HW perspective, do you actually need to know both? I think the HW
> description must specify the request ID, but because any channel can be
> programmed to any request ID, you don't actually care about the channel
> ID; it can be dynamically allocated by the DMA driver when the client
> driver calls dma_request_channel().

>From the perspective of a driver using the DMA, no. However, I thought
that having the number of programmable channels stored in the device
tree could be useful so that the DMA driver could query how many
programmable channels are available. So my point was the DMA driver
needs to know how many channels it has. However, this does not need to
belong in the device tree. I added it for completeness of the DMA
controller description really. Does that make sense?

> Actually, you say the following below, so I guess you already agree here:

Yes.

>> Yes this is the same as OMAPs SDMA. In the case of such DMA controllers
>> you only really care about the request ID and total number of channels
>> that are available to you.
> 
> ...
>>> This is why I think DMA controller should specify the format of their
>>> own DMA specifier in DT, and why they should provide an xlate function
>>> to parse that.
>>
>> Ok fair enough. However, it seems that at a minimum we could provide one
>> or two xlate functions in the generic binding for people to use. One
>> could be the DMA engine xlate binding and another could be the simple
>> xlate binding Nicolas proposed for a DMA controller that returns a
>> single channel/request ID.
>>
>> However, at the same time, may be people would prefer that devices such
>> as tegra, omap, at91, etc, offer their own xlate function for DMA
>> engine. I am not sure, but we could go either way.
> 
> I'd expect the bindings to be written to allow the individual DMA
> controllers to have complete control over the meaning of the DMA specifier.

Ok.

> That said, I would certainly expect some common patterns to emerge, such
> as a single cell to specify the DMA channel ID, or a single cell to
> specify the DMA request/selector ID. We should certainly make sure that
> where different controllers need the same information, they use the same
> way to represent it, and use common utility code to implement the xlate
> functionality. We could perhaps even write these common cases into the
> core DMA bindings as examples to help ensure uniformity. However, we
> just need to do this in a way that allows other cases too.

Yes this makes sense. I could have a go at re-writing next week sometime.

Thanks
Jon



More information about the linux-arm-kernel mailing list