DT DMA channel binding for Tegra I2S

Rob Herring robherring2 at gmail.com
Thu Nov 24 08:54:44 EST 2011


On 11/23/2011 03:25 PM, Stephen Warren wrote:
> Rob, Grant,
> 
> Re: http://www.spinics.net/lists/arm-kernel/msg148899.html
> 
> Background: Tegra's DMA controller needs to be told which DMA "request
> select" to use for each transfer. The identifies which peripheral to
> transfer to/from.
> 
> The Tegra I2S driver needs to know its own "request select" value to
> pass to the audio driver DMA path. The board files typically provide
> this to the driver as an IORESOURCE_DMA. I don't think there's any
> standard binding that creates such a resource when instantiating a
> platform device from device tree, and the discussions I found when
> looking for one didn't seem to reach conclusion that there should be
> one. So, I proposed the following property in the I2S driver's DT
> binding for this:

I think this is a case of every platform being different and
IORESOURCE_DMA is not too widely used. Even on PPC, there's not a
standard way.

> 
> Doc:
> 
> - dma-channel : The Tegra DMA controller's channel ID for this I2S controller
> 
> Example:
> 
> i2s at 70002800 {
> 	compatible = "nvidia,tegra20-i2s";
> 	reg = <0x70002800 0x200>;
> 	interrupts = < 45 >;
> 	dma-channel = < 2 >;
> };
> 
> Does that look reasonable? Or, should I pursue some more standardized
> solution?

I had some discussion with Thomas Abraham about this for the pl330 dma:

http://lists.ozlabs.org/pipermail/devicetree-discuss/2011-September/008269.html

So I would just add a phandle to the dma controller here.

> 
> (although perhaps dma-request-select would be a better name, since each
> of the DMA controller's 16 channels can be used for any of the DMA
> selects)

You'll find h/w with all sorts of relationships between requests and
channels on DMA controller h/w...

> 
> For reference, the code turns out as below; it might be nicer if the
> DT parsing code could create this resource for us, although there was
> some previous discussion about IORESOURCE_DMA not being the correct
> representation for this anyway.
> 
> 	dmareq = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> 	if (!dmareq) {
> 		if (of_property_read_u32(pdev->dev.of_node,
> 					 "nvidia,dma-channel",
> 					 &dma_ch) < 0) {

It would, but I think IORESOURCE_DMA is supposed to be for ISA bus DMA.
Also, I think often you need more information than just a request line
like a mode or type of transfer or burst length parameters.

Rob


More information about the devicetree-discuss mailing list