[PATCH 4/6] DMA: PL330: Add device tree support
Rob Herring
robherring2 at gmail.com
Wed Aug 31 12:04:03 EDT 2011
Thomas,
On 08/31/2011 10:46 AM, Thomas Abraham wrote:
> Hi Rob,
>
> On 31 August 2011 18:21, Rob Herring <robherring2 at gmail.com> wrote:
>> Thomas,
>
> [...]
>
>>> For PL330 dma controllers instantiated from device tree, the channel
>>> lookup is based on phandle of the dma controller and dma request id
>>> specified by the client node. During probe, the private data of each
>>> channel of the controller is set to point to the device node of the
>>> dma controller. The 'chan_id' of the each channel is used as the
>>> dma request id.
>>>
>>> Client driver requesting dma channels specify the phandle of the
>>> dma controller and the request id. The pl330 filter function
>>> converts the phandle to the device node pointer and matches that
>>> with channel's private data. If a match is found, the request id
>>> from the client node and the 'chan_id' of the channel is matched.
>>> A channel is found if both the values match.
>>>
>>> Signed-off-by: Thomas Abraham <thomas.abraham at linaro.org>
>>> ---
>>> .../devicetree/bindings/dma/arm-pl330.txt | 29 ++++++++++++++++
>>> drivers/dma/pl330.c | 35 +++++++++++++++++---
>>> 2 files changed, 59 insertions(+), 5 deletions(-)
>>> create mode 100644 Documentation/devicetree/bindings/dma/arm-pl330.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/dma/arm-pl330.txt
>>> b/Documentation/devicetree/bindings/dma/arm-pl330.txt
>>> new file mode 100644
>>> index 0000000..89f4b9c
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/dma/arm-pl330.txt
>>> @@ -0,0 +1,29 @@
>>> +* ARM PrimeCell PL330 DMA Controller
>>> +
>>> +The ARM PrimeCell PL330 DMA controller can move blocks of memory contents
>>> +between memory and peripherals or memory to memory.
>>> +
>>> +Required properties:
>>> + - compatible: should be "arm,primecell".
>>
>> Sorry, I guess I wasn't clear. This has to be "arm,primecell" plus
>> something else. In this case, "arm,pl330". If the IP is modified from
>> standard ARM version (like ST likes to do), then something like
>> "samsung,pl330" would be appropriate.
>>
>> This is not actually used by the kernel at the moment, but could if
>> modified versions of pl330 show up.
>
> of_platform_bus_create() checks for "arm,primecell" compatible value
> to instantiate a amba device from device tree. The peripheral_id is
> also noted in the amba device instance. The amba drivers register with
> a with a peripheral_id and peripheral_id is used match amba device
> with a driver.
>
> In cases of modified version of the same IP, the peripheral_id would
> be different. So, "arm,primecell" would just be enough for now. Any
> other compatible value would anyway go unused. I did use
> "arm,primecell-pdma" and "arm-primecell-mdma" to derive the dma_cap
> value. But, as per your comments, I dropped it.
>
> So, for now, I will just list "arm,primecell" as required compatible
> value. Please let me know if "arm,pl330" would be required here.
>
>>
>>> + - reg: physical base address of the controller and length of memory mapped
>>> + region.
>>> + - interrupts: interrupt number to the cpu.
>>> +
>>> +Example: (from Samsung's Exynos4 processor dtsi file)
>>> +
>>> + pdma0: pdma at 12680000 {
>>> + compatible = "arm,primecell";
>>> + reg = <0x12680000 0x1000>;
>>> + interrupts = <99>;
>>> + };
>>> +
>>> +Client drivers (device nodes requiring dma transfers from dev-to-mem or
>>> +mem-to-dev) should specify the DMA channel numbers using a two-value pair
>>> +as shown below.
>>> +
>>> + [property name] = <[phandle of the dma controller] [dma request id]>;
>>
>> At least fix the "-dma-channel" part of the name. It not clear if that's
>> the case or just an example.
>>
>> [name]-dma-channel = <[phandle of the dma controller] [dma request id]>;
>
> The name of the property that specifies the dma channel to use is
> decided by the client device node. It is not enforced by the dma
> device node. So, there will be no specific requirement stated in the
> documentation for pl330 device node.
>
As it says in Documentation/devicetree/bindings/arm/primecell.txt, you
should have "arm,primecell" and a value for the specific peripheral. It
should be in order of most specific to least specific.
What Linux uses currently from the binding is a bit irrelevant. The
binding is supposed to be future proof. An OS could choose to not use
the primecell ID at all and only match with compatible string.
Rob
>>
>>
>> The rest looks good.
>
> Thanks for your review and comments.
>
> Regards,
> Thomas.
>
>>
>> Rob
>>
>
> [...]
More information about the linux-arm-kernel
mailing list