All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
@ 2014-01-26  2:08 ` Barry Song
  0 siblings, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-01-08 14:12 UTC (permalink / raw)
  To: linux-arm-kernel

From: Barry Song <Baohua.Song@csr.com>

move to support of_dma_request_slave_channel() and dma_request_slave_channel.
we add a xlate() to let dma clients be able to find right dma_chan by generic
"dmas" properties in dts.

Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
---
 -v4: clear dt-binding document according to Mark's feedback

 .../devicetree/bindings/dma/sirfsoc-dma.txt        |   43 ++++++++++++++++++++
 arch/arm/boot/dts/atlas6.dtsi                      |    2 +
 arch/arm/boot/dts/prima2.dtsi                      |    2 +
 drivers/dma/sirf-dma.c                             |   23 ++++++++++
 4 files changed, 70 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/dma/sirfsoc-dma.txt

diff --git a/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
new file mode 100644
index 0000000..ecbc96a
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
@@ -0,0 +1,43 @@
+* CSR SiRFSoC DMA controller
+
+See dma.txt first
+
+Required properties:
+- compatible: Should be "sirf,prima2-dmac" or "sirf,marco-dmac"
+- reg: Should contain DMA registers location and length.
+- interrupts: Should contain one interrupt shared by all channel
+- #dma-cells: must be <1>. used to represent the number of integer
+    cells in the dmas property of client device.
+- clocks: clock required
+
+Example:
+
+Controller:
+dmac0: dma-controller at b00b0000 {
+	compatible = "sirf,prima2-dmac";
+	reg = <0xb00b0000 0x10000>;
+	interrupts = <12>;
+	clocks = <&clks 24>;
+	#dma-cells = <1>;
+};
+
+
+Client:
+Fill the specific dma request line in dmas. In the below example, spi0 read
+channel request line is 9 of the 2nd dma controller, while write channel uses
+4 of the 2nd dma controller; spi1 read channel request line is 12 of the 1st
+dma controller, while write channel uses 13 of the 1st dma controller:
+
+spi0: spi at b00d0000 {
+	compatible = "sirf,prima2-spi";
+	dmas = <&dmac1 9>,
+		<&dmac1 4>;
+	dma-names = "rx", "tx";
+};
+
+spi1: spi at b0170000 {
+	compatible = "sirf,prima2-spi";
+	dmas = <&dmac0 12>,
+		<&dmac0 13>;
+	dma-names = "rx", "tx";
+};
diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi
index b63cfef..4f41f0a 100644
--- a/arch/arm/boot/dts/atlas6.dtsi
+++ b/arch/arm/boot/dts/atlas6.dtsi
@@ -260,6 +260,7 @@
 				reg = <0xb00b0000 0x10000>;
 				interrupts = <12>;
 				clocks = <&clks 24>;
+				#dma-cells = <1>;
 			};
 
 			dmac1: dma-controller at b0160000 {
@@ -268,6 +269,7 @@
 				reg = <0xb0160000 0x10000>;
 				interrupts = <13>;
 				clocks = <&clks 25>;
+				#dma-cells = <1>;
 			};
 
 			vip at b00C0000 {
diff --git a/arch/arm/boot/dts/prima2.dtsi b/arch/arm/boot/dts/prima2.dtsi
index b292a5c..19e4e22 100644
--- a/arch/arm/boot/dts/prima2.dtsi
+++ b/arch/arm/boot/dts/prima2.dtsi
@@ -277,6 +277,7 @@
 				reg = <0xb00b0000 0x10000>;
 				interrupts = <12>;
 				clocks = <&clks 24>;
+				#dma-cells = <1>;
 			};
 
 			dmac1: dma-controller at b0160000 {
@@ -285,6 +286,7 @@
 				reg = <0xb0160000 0x10000>;
 				interrupts = <13>;
 				clocks = <&clks 25>;
+				#dma-cells = <1>;
 			};
 
 			vip at b00C0000 {
diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c
index 6aec3ad..8b74c0d 100644
--- a/drivers/dma/sirf-dma.c
+++ b/drivers/dma/sirf-dma.c
@@ -18,6 +18,7 @@
 #include <linux/of_device.h>
 #include <linux/of_platform.h>
 #include <linux/clk.h>
+#include <linux/of_dma.h>
 #include <linux/sirfsoc_dma.h>
 
 #include "dmaengine.h"
@@ -640,6 +641,18 @@ bool sirfsoc_dma_filter_id(struct dma_chan *chan, void *chan_id)
 }
 EXPORT_SYMBOL(sirfsoc_dma_filter_id);
 
+static struct dma_chan *of_dma_sirfsoc_xlate(struct of_phandle_args *dma_spec,
+	struct of_dma *ofdma)
+{
+	struct sirfsoc_dma *sdma = ofdma->of_dma_data;
+	unsigned int request = dma_spec->args[0];
+
+	if (request > SIRFSOC_DMA_CHANNELS)
+		return NULL;
+
+	return dma_get_slave_channel(&sdma->channels[request].chan);
+}
+
 static int sirfsoc_dma_probe(struct platform_device *op)
 {
 	struct device_node *dn = op->dev.of_node;
@@ -744,11 +757,20 @@ static int sirfsoc_dma_probe(struct platform_device *op)
 	if (ret)
 		goto free_irq;
 
+	/* Device-tree DMA controller registration */
+	ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma);
+	if (ret) {
+		dev_err(dev, "failed to register DMA controller\n");
+		goto unreg_dma_dev;
+	}
+
 	pm_runtime_enable(&op->dev);
 	dev_info(dev, "initialized SIRFSOC DMAC driver\n");
 
 	return 0;
 
+unreg_dma_dev:
+	dma_async_device_unregister(dma);
 free_irq:
 	free_irq(sdma->irq, sdma);
 irq_dispose:
@@ -761,6 +783,7 @@ static int sirfsoc_dma_remove(struct platform_device *op)
 	struct device *dev = &op->dev;
 	struct sirfsoc_dma *sdma = dev_get_drvdata(dev);
 
+	of_dma_controller_free(op->dev.of_node);
 	dma_async_device_unregister(&sdma->dma);
 	free_irq(sdma->irq, sdma);
 	irq_dispose_mapping(sdma->irq);
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-01-26  2:08 ` [PATCH v5] " Barry Song
  (?)
@ 2014-01-20  7:48 ` Vinod Koul
  2014-01-20  9:35   ` Barry Song
  2014-01-20 10:30   ` Barry Song
  -1 siblings, 2 replies; 18+ messages in thread
From: Vinod Koul @ 2014-01-20  7:48 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
> From: Barry Song <Baohua.Song@csr.com>
> 
> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> we add a xlate() to let dma clients be able to find right dma_chan by generic
> "dmas" properties in dts.
> 
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: Lars-Peter Clausen <lars@metafoo.de>
> Signed-off-by: Barry Song <Baohua.Song@csr.com>
Look okay, need an ACk from DT maintainers before I can apply...

--
~Vinod
> ---
>  -v4: clear dt-binding document according to Mark's feedback
> 
>  .../devicetree/bindings/dma/sirfsoc-dma.txt        |   43 ++++++++++++++++++++
>  arch/arm/boot/dts/atlas6.dtsi                      |    2 +
>  arch/arm/boot/dts/prima2.dtsi                      |    2 +
>  drivers/dma/sirf-dma.c                             |   23 ++++++++++
>  4 files changed, 70 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
> 
> diff --git a/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
> new file mode 100644
> index 0000000..ecbc96a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
> @@ -0,0 +1,43 @@
> +* CSR SiRFSoC DMA controller
> +
> +See dma.txt first
> +
> +Required properties:
> +- compatible: Should be "sirf,prima2-dmac" or "sirf,marco-dmac"
> +- reg: Should contain DMA registers location and length.
> +- interrupts: Should contain one interrupt shared by all channel
> +- #dma-cells: must be <1>. used to represent the number of integer
> +    cells in the dmas property of client device.
> +- clocks: clock required
> +
> +Example:
> +
> +Controller:
> +dmac0: dma-controller at b00b0000 {
> +	compatible = "sirf,prima2-dmac";
> +	reg = <0xb00b0000 0x10000>;
> +	interrupts = <12>;
> +	clocks = <&clks 24>;
> +	#dma-cells = <1>;
> +};
> +
> +
> +Client:
> +Fill the specific dma request line in dmas. In the below example, spi0 read
> +channel request line is 9 of the 2nd dma controller, while write channel uses
> +4 of the 2nd dma controller; spi1 read channel request line is 12 of the 1st
> +dma controller, while write channel uses 13 of the 1st dma controller:
> +
> +spi0: spi at b00d0000 {
> +	compatible = "sirf,prima2-spi";
> +	dmas = <&dmac1 9>,
> +		<&dmac1 4>;
> +	dma-names = "rx", "tx";
> +};
> +
> +spi1: spi at b0170000 {
> +	compatible = "sirf,prima2-spi";
> +	dmas = <&dmac0 12>,
> +		<&dmac0 13>;
> +	dma-names = "rx", "tx";
> +};
> diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi
> index b63cfef..4f41f0a 100644
> --- a/arch/arm/boot/dts/atlas6.dtsi
> +++ b/arch/arm/boot/dts/atlas6.dtsi
> @@ -260,6 +260,7 @@
>  				reg = <0xb00b0000 0x10000>;
>  				interrupts = <12>;
>  				clocks = <&clks 24>;
> +				#dma-cells = <1>;
>  			};
>  
>  			dmac1: dma-controller at b0160000 {
> @@ -268,6 +269,7 @@
>  				reg = <0xb0160000 0x10000>;
>  				interrupts = <13>;
>  				clocks = <&clks 25>;
> +				#dma-cells = <1>;
>  			};
>  
>  			vip at b00C0000 {
> diff --git a/arch/arm/boot/dts/prima2.dtsi b/arch/arm/boot/dts/prima2.dtsi
> index b292a5c..19e4e22 100644
> --- a/arch/arm/boot/dts/prima2.dtsi
> +++ b/arch/arm/boot/dts/prima2.dtsi
> @@ -277,6 +277,7 @@
>  				reg = <0xb00b0000 0x10000>;
>  				interrupts = <12>;
>  				clocks = <&clks 24>;
> +				#dma-cells = <1>;
>  			};
>  
>  			dmac1: dma-controller at b0160000 {
> @@ -285,6 +286,7 @@
>  				reg = <0xb0160000 0x10000>;
>  				interrupts = <13>;
>  				clocks = <&clks 25>;
> +				#dma-cells = <1>;
>  			};
>  
>  			vip at b00C0000 {
> diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c
> index 6aec3ad..8b74c0d 100644
> --- a/drivers/dma/sirf-dma.c
> +++ b/drivers/dma/sirf-dma.c
> @@ -18,6 +18,7 @@
>  #include <linux/of_device.h>
>  #include <linux/of_platform.h>
>  #include <linux/clk.h>
> +#include <linux/of_dma.h>
>  #include <linux/sirfsoc_dma.h>
>  
>  #include "dmaengine.h"
> @@ -640,6 +641,18 @@ bool sirfsoc_dma_filter_id(struct dma_chan *chan, void *chan_id)
>  }
>  EXPORT_SYMBOL(sirfsoc_dma_filter_id);
>  
> +static struct dma_chan *of_dma_sirfsoc_xlate(struct of_phandle_args *dma_spec,
> +	struct of_dma *ofdma)
> +{
> +	struct sirfsoc_dma *sdma = ofdma->of_dma_data;
> +	unsigned int request = dma_spec->args[0];
> +
> +	if (request > SIRFSOC_DMA_CHANNELS)
> +		return NULL;
> +
> +	return dma_get_slave_channel(&sdma->channels[request].chan);
> +}
> +
>  static int sirfsoc_dma_probe(struct platform_device *op)
>  {
>  	struct device_node *dn = op->dev.of_node;
> @@ -744,11 +757,20 @@ static int sirfsoc_dma_probe(struct platform_device *op)
>  	if (ret)
>  		goto free_irq;
>  
> +	/* Device-tree DMA controller registration */
> +	ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma);
> +	if (ret) {
> +		dev_err(dev, "failed to register DMA controller\n");
> +		goto unreg_dma_dev;
> +	}
> +
>  	pm_runtime_enable(&op->dev);
>  	dev_info(dev, "initialized SIRFSOC DMAC driver\n");
>  
>  	return 0;
>  
> +unreg_dma_dev:
> +	dma_async_device_unregister(dma);
>  free_irq:
>  	free_irq(sdma->irq, sdma);
>  irq_dispose:
> @@ -761,6 +783,7 @@ static int sirfsoc_dma_remove(struct platform_device *op)
>  	struct device *dev = &op->dev;
>  	struct sirfsoc_dma *sdma = dev_get_drvdata(dev);
>  
> +	of_dma_controller_free(op->dev.of_node);
>  	dma_async_device_unregister(&sdma->dma);
>  	free_irq(sdma->irq, sdma);
>  	irq_dispose_mapping(sdma->irq);
> -- 
> 1.7.5.4
> 

-- 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-01-20  9:35   ` Barry Song
@ 2014-01-20  8:47     ` Vinod Koul
  2014-01-20 10:20       ` Barry Song
       [not found]     ` <CAGsJ_4zcwCx0RNMNx8YaDBFtGE=02-B79+WKDGeky80X5agcuw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  1 sibling, 1 reply; 18+ messages in thread
From: Vinod Koul @ 2014-01-20  8:47 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Jan 20, 2014 at 05:35:07PM +0800, Barry Song wrote:
> 2014/1/20 Vinod Koul <vinod.koul@intel.com>:
> > On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
> >> From: Barry Song <Baohua.Song@csr.com>
> >>
> >> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> >> we add a xlate() to let dma clients be able to find right dma_chan by generic
> >> "dmas" properties in dts.
> >>
> >> Cc: Mark Rutland <mark.rutland@arm.com>
> >> Cc: Lars-Peter Clausen <lars@metafoo.de>
> >> Signed-off-by: Barry Song <Baohua.Song@csr.com>
> > Look okay, need an ACk from DT maintainers before I can apply...
> 
> Vinod, will i send v5 with your ack to
> devicetree-discuss at lists.ozlabs.org, and CC Grant & Rob?
Which tree are you tragetting this, if dmaengine then my ack make no sense :)

> 
> Hi Rob, will you Ack this one if you have noticed this thread?
I dont think Robs email is avlid anymore, I think he moved to Linaro, if I am
not mistaken.

~Vinod
> > ~Vinod
> >> ---
> >>  -v4: clear dt-binding document according to Mark's feedback
> 
> -barry
> --
> To unsubscribe from this list: send the line "unsubscribe dmaengine" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-01-20  7:48 ` [PATCH v4] " Vinod Koul
@ 2014-01-20  9:35   ` Barry Song
  2014-01-20  8:47     ` Vinod Koul
       [not found]     ` <CAGsJ_4zcwCx0RNMNx8YaDBFtGE=02-B79+WKDGeky80X5agcuw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  2014-01-20 10:30   ` Barry Song
  1 sibling, 2 replies; 18+ messages in thread
From: Barry Song @ 2014-01-20  9:35 UTC (permalink / raw)
  To: linux-arm-kernel

2014/1/20 Vinod Koul <vinod.koul@intel.com>:
> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
>> From: Barry Song <Baohua.Song@csr.com>
>>
>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>> we add a xlate() to let dma clients be able to find right dma_chan by generic
>> "dmas" properties in dts.
>>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Lars-Peter Clausen <lars@metafoo.de>
>> Signed-off-by: Barry Song <Baohua.Song@csr.com>
> Look okay, need an ACk from DT maintainers before I can apply...

Vinod, will i send v5 with your ack to
devicetree-discuss at lists.ozlabs.org, and CC Grant & Rob?

Hi Rob, will you Ack this one if you have noticed this thread?

>
> --
> ~Vinod
>> ---
>>  -v4: clear dt-binding document according to Mark's feedback

-barry

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-01-20  8:47     ` Vinod Koul
@ 2014-01-20 10:20       ` Barry Song
  0 siblings, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-01-20 10:20 UTC (permalink / raw)
  To: linux-arm-kernel

2014/1/20 Vinod Koul <vinod.koul@intel.com>:
> On Mon, Jan 20, 2014 at 05:35:07PM +0800, Barry Song wrote:
>> 2014/1/20 Vinod Koul <vinod.koul@intel.com>:
>> > On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
>> >> From: Barry Song <Baohua.Song@csr.com>
>> >>
>> >> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>> >> we add a xlate() to let dma clients be able to find right dma_chan by generic
>> >> "dmas" properties in dts.
>> >>
>> >> Cc: Mark Rutland <mark.rutland@arm.com>
>> >> Cc: Lars-Peter Clausen <lars@metafoo.de>
>> >> Signed-off-by: Barry Song <Baohua.Song@csr.com>
>> > Look okay, need an ACk from DT maintainers before I can apply...
>>
>> Vinod, will i send v5 with your ack to
>> devicetree-discuss at lists.ozlabs.org, and CC Grant & Rob?
> Which tree are you tragetting this, if dmaengine then my ack make no sense :)
>
>>
>> Hi Rob, will you Ack this one if you have noticed this thread?
> I dont think Robs email is avlid anymore, I think he moved to Linaro, if I am
> not mistaken.
>
> ~Vinod

ok. i will resend the patch with dts guys.


>> > ~Vinod
>> >> ---
>> >>  -v4: clear dt-binding document according to Mark's feedback
>>
>> -barry

-barry

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-01-20  7:48 ` [PATCH v4] " Vinod Koul
  2014-01-20  9:35   ` Barry Song
@ 2014-01-20 10:30   ` Barry Song
  1 sibling, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-01-20 10:30 UTC (permalink / raw)
  To: linux-arm-kernel

2014/1/20 Vinod Koul <vinod.koul@intel.com>:
> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
>> From: Barry Song <Baohua.Song@csr.com>
>>
>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>> we add a xlate() to let dma clients be able to find right dma_chan by generic
>> "dmas" properties in dts.
>>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Lars-Peter Clausen <lars@metafoo.de>
>> Signed-off-by: Barry Song <Baohua.Song@csr.com>
> Look okay, need an ACk from DT maintainers before I can apply...


sorry. i just realized Mark has followed this thread and given
comments from the beginning.

Hi Mark,
will you ack this?

>
> --
> ~Vinod
>> ---
>>  -v4: clear dt-binding document according to Mark's feedback
>>

-barry

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v5] dmaengine: sirf: enable generic dt binding for dma channels
@ 2014-01-26  2:08 ` Barry Song
  0 siblings, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-01-26  2:08 UTC (permalink / raw)
  To: vinod.koul, robh+dt, pawel.moll, mark.rutland, ijc+devicetree, galak
  Cc: devicetree, dmaengine, workgroup.linux, Lars-Peter Clausen, Barry Song

From: Barry Song <Baohua.Song@csr.com>

move to support of_dma_request_slave_channel() and dma_request_slave_channel.
we add a xlate() to let dma clients be able to find right dma_chan by generic
"dmas" properties in dts.

Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
---
 -v5:
 add Acked-by: vinod.koul@intel.com;
 cc devicetree guys as Acked from dt was required

 .../devicetree/bindings/dma/sirfsoc-dma.txt        |   43 ++++++++++++++++++++
 arch/arm/boot/dts/atlas6.dtsi                      |    2 +
 arch/arm/boot/dts/prima2.dtsi                      |    2 +
 drivers/dma/sirf-dma.c                             |   23 ++++++++++
 4 files changed, 70 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/dma/sirfsoc-dma.txt

diff --git a/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
new file mode 100644
index 0000000..ecbc96a
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
@@ -0,0 +1,43 @@
+* CSR SiRFSoC DMA controller
+
+See dma.txt first
+
+Required properties:
+- compatible: Should be "sirf,prima2-dmac" or "sirf,marco-dmac"
+- reg: Should contain DMA registers location and length.
+- interrupts: Should contain one interrupt shared by all channel
+- #dma-cells: must be <1>. used to represent the number of integer
+    cells in the dmas property of client device.
+- clocks: clock required
+
+Example:
+
+Controller:
+dmac0: dma-controller@b00b0000 {
+	compatible = "sirf,prima2-dmac";
+	reg = <0xb00b0000 0x10000>;
+	interrupts = <12>;
+	clocks = <&clks 24>;
+	#dma-cells = <1>;
+};
+
+
+Client:
+Fill the specific dma request line in dmas. In the below example, spi0 read
+channel request line is 9 of the 2nd dma controller, while write channel uses
+4 of the 2nd dma controller; spi1 read channel request line is 12 of the 1st
+dma controller, while write channel uses 13 of the 1st dma controller:
+
+spi0: spi@b00d0000 {
+	compatible = "sirf,prima2-spi";
+	dmas = <&dmac1 9>,
+		<&dmac1 4>;
+	dma-names = "rx", "tx";
+};
+
+spi1: spi@b0170000 {
+	compatible = "sirf,prima2-spi";
+	dmas = <&dmac0 12>,
+		<&dmac0 13>;
+	dma-names = "rx", "tx";
+};
diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi
index b63cfef..4f41f0a 100644
--- a/arch/arm/boot/dts/atlas6.dtsi
+++ b/arch/arm/boot/dts/atlas6.dtsi
@@ -260,6 +260,7 @@
 				reg = <0xb00b0000 0x10000>;
 				interrupts = <12>;
 				clocks = <&clks 24>;
+				#dma-cells = <1>;
 			};
 
 			dmac1: dma-controller@b0160000 {
@@ -268,6 +269,7 @@
 				reg = <0xb0160000 0x10000>;
 				interrupts = <13>;
 				clocks = <&clks 25>;
+				#dma-cells = <1>;
 			};
 
 			vip@b00C0000 {
diff --git a/arch/arm/boot/dts/prima2.dtsi b/arch/arm/boot/dts/prima2.dtsi
index b292a5c..19e4e22 100644
--- a/arch/arm/boot/dts/prima2.dtsi
+++ b/arch/arm/boot/dts/prima2.dtsi
@@ -277,6 +277,7 @@
 				reg = <0xb00b0000 0x10000>;
 				interrupts = <12>;
 				clocks = <&clks 24>;
+				#dma-cells = <1>;
 			};
 
 			dmac1: dma-controller@b0160000 {
@@ -285,6 +286,7 @@
 				reg = <0xb0160000 0x10000>;
 				interrupts = <13>;
 				clocks = <&clks 25>;
+				#dma-cells = <1>;
 			};
 
 			vip@b00C0000 {
diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c
index 6aec3ad..8b74c0d 100644
--- a/drivers/dma/sirf-dma.c
+++ b/drivers/dma/sirf-dma.c
@@ -18,6 +18,7 @@
 #include <linux/of_device.h>
 #include <linux/of_platform.h>
 #include <linux/clk.h>
+#include <linux/of_dma.h>
 #include <linux/sirfsoc_dma.h>
 
 #include "dmaengine.h"
@@ -640,6 +641,18 @@ bool sirfsoc_dma_filter_id(struct dma_chan *chan, void *chan_id)
 }
 EXPORT_SYMBOL(sirfsoc_dma_filter_id);
 
+static struct dma_chan *of_dma_sirfsoc_xlate(struct of_phandle_args *dma_spec,
+	struct of_dma *ofdma)
+{
+	struct sirfsoc_dma *sdma = ofdma->of_dma_data;
+	unsigned int request = dma_spec->args[0];
+
+	if (request > SIRFSOC_DMA_CHANNELS)
+		return NULL;
+
+	return dma_get_slave_channel(&sdma->channels[request].chan);
+}
+
 static int sirfsoc_dma_probe(struct platform_device *op)
 {
 	struct device_node *dn = op->dev.of_node;
@@ -744,11 +757,20 @@ static int sirfsoc_dma_probe(struct platform_device *op)
 	if (ret)
 		goto free_irq;
 
+	/* Device-tree DMA controller registration */
+	ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma);
+	if (ret) {
+		dev_err(dev, "failed to register DMA controller\n");
+		goto unreg_dma_dev;
+	}
+
 	pm_runtime_enable(&op->dev);
 	dev_info(dev, "initialized SIRFSOC DMAC driver\n");
 
 	return 0;
 
+unreg_dma_dev:
+	dma_async_device_unregister(dma);
 free_irq:
 	free_irq(sdma->irq, sdma);
 irq_dispose:
@@ -761,6 +783,7 @@ static int sirfsoc_dma_remove(struct platform_device *op)
 	struct device *dev = &op->dev;
 	struct sirfsoc_dma *sdma = dev_get_drvdata(dev);
 
+	of_dma_controller_free(op->dev.of_node);
 	dma_async_device_unregister(&sdma->dma);
 	free_irq(sdma->irq, sdma);
 	irq_dispose_mapping(sdma->irq);
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-01-20  9:35   ` Barry Song
@ 2014-03-01  2:49         ` Barry Song
       [not found]     ` <CAGsJ_4zcwCx0RNMNx8YaDBFtGE=02-B79+WKDGeky80X5agcuw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  1 sibling, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-03-01  2:49 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	DL-SHA-WorkGroupLinux, Barry Song, Mark Rutland,
	Lars-Peter Clausen, devicetree-u79uwXL29TY76Z2rM5mHXA

2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
> 2014/1/20 Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>:
>> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
>>> From: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
>>>
>>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>>> we add a xlate() to let dma clients be able to find right dma_chan by generic
>>> "dmas" properties in dts.
>>>
>>> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
>>> Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
>>> Signed-off-by: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
>> Look okay, need an ACk from DT maintainers before I can apply...

Hi Vinod,
v5 is sent to devicetree list and there is no object.
http://www.spinics.net/lists/devicetree/msg19677.html
this patch is using general dt-binding for dma completely same with
other dma drivers, there is no special binding here.
so i think there is no reason to wait for merging since now updates
for its clients e.g. SPI, UART have been in 3.14-rc.

-barry
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
@ 2014-03-01  2:49         ` Barry Song
  0 siblings, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-03-01  2:49 UTC (permalink / raw)
  To: linux-arm-kernel

2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao@gmail.com>:
> 2014/1/20 Vinod Koul <vinod.koul@intel.com>:
>> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
>>> From: Barry Song <Baohua.Song@csr.com>
>>>
>>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>>> we add a xlate() to let dma clients be able to find right dma_chan by generic
>>> "dmas" properties in dts.
>>>
>>> Cc: Mark Rutland <mark.rutland@arm.com>
>>> Cc: Lars-Peter Clausen <lars@metafoo.de>
>>> Signed-off-by: Barry Song <Baohua.Song@csr.com>
>> Look okay, need an ACk from DT maintainers before I can apply...

Hi Vinod,
v5 is sent to devicetree list and there is no object.
http://www.spinics.net/lists/devicetree/msg19677.html
this patch is using general dt-binding for dma completely same with
other dma drivers, there is no special binding here.
so i think there is no reason to wait for merging since now updates
for its clients e.g. SPI, UART have been in 3.14-rc.

-barry

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-03-01  2:49         ` Barry Song
@ 2014-03-17  4:51             ` Vinod Koul
  -1 siblings, 0 replies; 18+ messages in thread
From: Vinod Koul @ 2014-03-17  4:51 UTC (permalink / raw)
  To: Barry Song
  Cc: Rob Herring, dmaengine-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	DL-SHA-WorkGroupLinux, Barry Song, Mark Rutland,
	Lars-Peter Clausen, devicetree-u79uwXL29TY76Z2rM5mHXA

On Sat, Mar 01, 2014 at 10:49:18AM +0800, Barry Song wrote:
> 2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
> > 2014/1/20 Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>:
> >> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
> >>> From: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
> >>>
> >>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> >>> we add a xlate() to let dma clients be able to find right dma_chan by generic
> >>> "dmas" properties in dts.
> >>>
> >>> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
> >>> Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
> >>> Signed-off-by: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
> >> Look okay, need an ACk from DT maintainers before I can apply...
> 
> Hi Vinod,
> v5 is sent to devicetree list and there is no object.
> http://www.spinics.net/lists/devicetree/msg19677.html
> this patch is using general dt-binding for dma completely same with
> other dma drivers, there is no special binding here.
> so i think there is no reason to wait for merging since now updates
> for its clients e.g. SPI, UART have been in 3.14-rc.
I still need the ack for DT folks... Seems still missing :(

-- 
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
@ 2014-03-17  4:51             ` Vinod Koul
  0 siblings, 0 replies; 18+ messages in thread
From: Vinod Koul @ 2014-03-17  4:51 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Mar 01, 2014 at 10:49:18AM +0800, Barry Song wrote:
> 2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao@gmail.com>:
> > 2014/1/20 Vinod Koul <vinod.koul@intel.com>:
> >> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
> >>> From: Barry Song <Baohua.Song@csr.com>
> >>>
> >>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> >>> we add a xlate() to let dma clients be able to find right dma_chan by generic
> >>> "dmas" properties in dts.
> >>>
> >>> Cc: Mark Rutland <mark.rutland@arm.com>
> >>> Cc: Lars-Peter Clausen <lars@metafoo.de>
> >>> Signed-off-by: Barry Song <Baohua.Song@csr.com>
> >> Look okay, need an ACk from DT maintainers before I can apply...
> 
> Hi Vinod,
> v5 is sent to devicetree list and there is no object.
> http://www.spinics.net/lists/devicetree/msg19677.html
> this patch is using general dt-binding for dma completely same with
> other dma drivers, there is no special binding here.
> so i think there is no reason to wait for merging since now updates
> for its clients e.g. SPI, UART have been in 3.14-rc.
I still need the ack for DT folks... Seems still missing :(

-- 
~Vinod

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-03-17  4:51             ` Vinod Koul
@ 2014-03-18  2:02                 ` Barry Song
  -1 siblings, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-03-18  2:02 UTC (permalink / raw)
  To: Vinod Koul
  Cc: Rob Herring, dmaengine-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	DL-SHA-WorkGroupLinux, Barry Song, Mark Rutland,
	Lars-Peter Clausen, devicetree-u79uwXL29TY76Z2rM5mHXA

2014-03-17 12:51 GMT+08:00 Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>:
> On Sat, Mar 01, 2014 at 10:49:18AM +0800, Barry Song wrote:
>> 2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>> > 2014/1/20 Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>:
>> >> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
>> >>> From: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
>> >>>
>> >>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>> >>> we add a xlate() to let dma clients be able to find right dma_chan by generic
>> >>> "dmas" properties in dts.
>> >>>
>> >>> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
>> >>> Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
>> >>> Signed-off-by: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
>> >> Look okay, need an ACk from DT maintainers before I can apply...
>>
>> Hi Vinod,
>> v5 is sent to devicetree list and there is no object.
>> http://www.spinics.net/lists/devicetree/msg19677.html
>> this patch is using general dt-binding for dma completely same with
>> other dma drivers, there is no special binding here.
>> so i think there is no reason to wait for merging since now updates
>> for its clients e.g. SPI, UART have been in 3.14-rc.
> I still need the ack for DT folks... Seems still missing :(

Vinod, it seems nobody in dt has noticed this change since there is
not a real change for DT binding. if we need an ack for every normal
change in dt, the maintain chain might be easily broken.it seems it is
not always a good practice?

>
> --
> ~Vinod

-barry
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
@ 2014-03-18  2:02                 ` Barry Song
  0 siblings, 0 replies; 18+ messages in thread
From: Barry Song @ 2014-03-18  2:02 UTC (permalink / raw)
  To: linux-arm-kernel

2014-03-17 12:51 GMT+08:00 Vinod Koul <vinod.koul@intel.com>:
> On Sat, Mar 01, 2014 at 10:49:18AM +0800, Barry Song wrote:
>> 2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao@gmail.com>:
>> > 2014/1/20 Vinod Koul <vinod.koul@intel.com>:
>> >> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
>> >>> From: Barry Song <Baohua.Song@csr.com>
>> >>>
>> >>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>> >>> we add a xlate() to let dma clients be able to find right dma_chan by generic
>> >>> "dmas" properties in dts.
>> >>>
>> >>> Cc: Mark Rutland <mark.rutland@arm.com>
>> >>> Cc: Lars-Peter Clausen <lars@metafoo.de>
>> >>> Signed-off-by: Barry Song <Baohua.Song@csr.com>
>> >> Look okay, need an ACk from DT maintainers before I can apply...
>>
>> Hi Vinod,
>> v5 is sent to devicetree list and there is no object.
>> http://www.spinics.net/lists/devicetree/msg19677.html
>> this patch is using general dt-binding for dma completely same with
>> other dma drivers, there is no special binding here.
>> so i think there is no reason to wait for merging since now updates
>> for its clients e.g. SPI, UART have been in 3.14-rc.
> I still need the ack for DT folks... Seems still missing :(

Vinod, it seems nobody in dt has noticed this change since there is
not a real change for DT binding. if we need an ack for every normal
change in dt, the maintain chain might be easily broken.it seems it is
not always a good practice?

>
> --
> ~Vinod

-barry

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
  2014-03-17  4:51             ` Vinod Koul
@ 2014-03-18 12:20                 ` Arnd Bergmann
  -1 siblings, 0 replies; 18+ messages in thread
From: Arnd Bergmann @ 2014-03-18 12:20 UTC (permalink / raw)
  To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
  Cc: Vinod Koul, Barry Song, Mark Rutland,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Lars-Peter Clausen,
	DL-SHA-WorkGroupLinux, Rob Herring, Barry Song,
	dmaengine-u79uwXL29TY76Z2rM5mHXA

On Monday 17 March 2014, Vinod Koul wrote:
> On Sat, Mar 01, 2014 at 10:49:18AM +0800, Barry Song wrote:
> > 2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
> > > 2014/1/20 Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>:
> > >> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
> > >>> From: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
> > >>>
> > >>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> > >>> we add a xlate() to let dma clients be able to find right dma_chan by generic
> > >>> "dmas" properties in dts.
> > >>>
> > >>> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
> > >>> Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
> > >>> Signed-off-by: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
> > >> Look okay, need an ACk from DT maintainers before I can apply...
> > 
> > Hi Vinod,
> > v5 is sent to devicetree list and there is no object.
> > http://www.spinics.net/lists/devicetree/msg19677.html
> > this patch is using general dt-binding for dma completely same with
> > other dma drivers, there is no special binding here.
> > so i think there is no reason to wait for merging since now updates
> > for its clients e.g. SPI, UART have been in 3.14-rc.
> I still need the ack for DT folks... Seems still missing :(

I thought I'd looked at it before.  The wording of the binding document
could be clarified a little, but the binding itself is absolutely
reasonable and the implementation looks correct. I would suggest you
merge it as is.

Acked-by: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels
@ 2014-03-18 12:20                 ` Arnd Bergmann
  0 siblings, 0 replies; 18+ messages in thread
From: Arnd Bergmann @ 2014-03-18 12:20 UTC (permalink / raw)
  To: linux-arm-kernel

On Monday 17 March 2014, Vinod Koul wrote:
> On Sat, Mar 01, 2014 at 10:49:18AM +0800, Barry Song wrote:
> > 2014-01-20 17:35 GMT+08:00 Barry Song <21cnbao@gmail.com>:
> > > 2014/1/20 Vinod Koul <vinod.koul@intel.com>:
> > >> On Wed, Jan 08, 2014 at 10:12:49PM +0800, Barry Song wrote:
> > >>> From: Barry Song <Baohua.Song@csr.com>
> > >>>
> > >>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> > >>> we add a xlate() to let dma clients be able to find right dma_chan by generic
> > >>> "dmas" properties in dts.
> > >>>
> > >>> Cc: Mark Rutland <mark.rutland@arm.com>
> > >>> Cc: Lars-Peter Clausen <lars@metafoo.de>
> > >>> Signed-off-by: Barry Song <Baohua.Song@csr.com>
> > >> Look okay, need an ACk from DT maintainers before I can apply...
> > 
> > Hi Vinod,
> > v5 is sent to devicetree list and there is no object.
> > http://www.spinics.net/lists/devicetree/msg19677.html
> > this patch is using general dt-binding for dma completely same with
> > other dma drivers, there is no special binding here.
> > so i think there is no reason to wait for merging since now updates
> > for its clients e.g. SPI, UART have been in 3.14-rc.
> I still need the ack for DT folks... Seems still missing :(

I thought I'd looked at it before.  The wording of the binding document
could be clarified a little, but the binding itself is absolutely
reasonable and the implementation looks correct. I would suggest you
merge it as is.

Acked-by: Arnd Bergmann <arnd@arndb.de>

	Arnd

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v5] dmaengine: sirf: enable generic dt binding for dma channels
       [not found] ` <1389190369-2012-1-git-send-email-21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2014-03-19 14:43   ` Vinod Koul
       [not found]     ` <20140319144359.GI1976-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 18+ messages in thread
From: Vinod Koul @ 2014-03-19 14:43 UTC (permalink / raw)
  To: Barry Song
  Cc: robh+dt-DgEjT+Ai2ygdnm+yROfE0A, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg,
	galak-sgV2jX0FEOL9JmXXK+q4OQ, devicetree-u79uwXL29TY76Z2rM5mHXA,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, workgroup.linux-kQvG35nSl+M,
	Lars-Peter Clausen, Barry Song

On Sun, Jan 26, 2014 at 10:08:45AM +0800, Barry Song wrote:
> From: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
> 
> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> we add a xlate() to let dma clients be able to find right dma_chan by generic
> "dmas" properties in dts.
> 
> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
> Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
> Signed-off-by: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>

I tried applying this but it failed to apply.

Can you pls rebase quickly and resend. While at it pls add the Acks recived!

-- 
~Vinod

> ---
>  -v5:
>  add Acked-by: vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org;
>  cc devicetree guys as Acked from dt was required
> 
>  .../devicetree/bindings/dma/sirfsoc-dma.txt        |   43 ++++++++++++++++++++
>  arch/arm/boot/dts/atlas6.dtsi                      |    2 +
>  arch/arm/boot/dts/prima2.dtsi                      |    2 +
>  drivers/dma/sirf-dma.c                             |   23 ++++++++++
>  4 files changed, 70 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
> 
> diff --git a/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
> new file mode 100644
> index 0000000..ecbc96a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
> @@ -0,0 +1,43 @@
> +* CSR SiRFSoC DMA controller
> +
> +See dma.txt first
> +
> +Required properties:
> +- compatible: Should be "sirf,prima2-dmac" or "sirf,marco-dmac"
> +- reg: Should contain DMA registers location and length.
> +- interrupts: Should contain one interrupt shared by all channel
> +- #dma-cells: must be <1>. used to represent the number of integer
> +    cells in the dmas property of client device.
> +- clocks: clock required
> +
> +Example:
> +
> +Controller:
> +dmac0: dma-controller@b00b0000 {
> +	compatible = "sirf,prima2-dmac";
> +	reg = <0xb00b0000 0x10000>;
> +	interrupts = <12>;
> +	clocks = <&clks 24>;
> +	#dma-cells = <1>;
> +};
> +
> +
> +Client:
> +Fill the specific dma request line in dmas. In the below example, spi0 read
> +channel request line is 9 of the 2nd dma controller, while write channel uses
> +4 of the 2nd dma controller; spi1 read channel request line is 12 of the 1st
> +dma controller, while write channel uses 13 of the 1st dma controller:
> +
> +spi0: spi@b00d0000 {
> +	compatible = "sirf,prima2-spi";
> +	dmas = <&dmac1 9>,
> +		<&dmac1 4>;
> +	dma-names = "rx", "tx";
> +};
> +
> +spi1: spi@b0170000 {
> +	compatible = "sirf,prima2-spi";
> +	dmas = <&dmac0 12>,
> +		<&dmac0 13>;
> +	dma-names = "rx", "tx";
> +};
> diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi
> index b63cfef..4f41f0a 100644
> --- a/arch/arm/boot/dts/atlas6.dtsi
> +++ b/arch/arm/boot/dts/atlas6.dtsi
> @@ -260,6 +260,7 @@
>  				reg = <0xb00b0000 0x10000>;
>  				interrupts = <12>;
>  				clocks = <&clks 24>;
> +				#dma-cells = <1>;
>  			};
>  
>  			dmac1: dma-controller@b0160000 {
> @@ -268,6 +269,7 @@
>  				reg = <0xb0160000 0x10000>;
>  				interrupts = <13>;
>  				clocks = <&clks 25>;
> +				#dma-cells = <1>;
>  			};
>  
>  			vip@b00C0000 {
> diff --git a/arch/arm/boot/dts/prima2.dtsi b/arch/arm/boot/dts/prima2.dtsi
> index b292a5c..19e4e22 100644
> --- a/arch/arm/boot/dts/prima2.dtsi
> +++ b/arch/arm/boot/dts/prima2.dtsi
> @@ -277,6 +277,7 @@
>  				reg = <0xb00b0000 0x10000>;
>  				interrupts = <12>;
>  				clocks = <&clks 24>;
> +				#dma-cells = <1>;
>  			};
>  
>  			dmac1: dma-controller@b0160000 {
> @@ -285,6 +286,7 @@
>  				reg = <0xb0160000 0x10000>;
>  				interrupts = <13>;
>  				clocks = <&clks 25>;
> +				#dma-cells = <1>;
>  			};
>  
>  			vip@b00C0000 {
> diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c
> index 6aec3ad..8b74c0d 100644
> --- a/drivers/dma/sirf-dma.c
> +++ b/drivers/dma/sirf-dma.c
> @@ -18,6 +18,7 @@
>  #include <linux/of_device.h>
>  #include <linux/of_platform.h>
>  #include <linux/clk.h>
> +#include <linux/of_dma.h>
>  #include <linux/sirfsoc_dma.h>
>  
>  #include "dmaengine.h"
> @@ -640,6 +641,18 @@ bool sirfsoc_dma_filter_id(struct dma_chan *chan, void *chan_id)
>  }
>  EXPORT_SYMBOL(sirfsoc_dma_filter_id);
>  
> +static struct dma_chan *of_dma_sirfsoc_xlate(struct of_phandle_args *dma_spec,
> +	struct of_dma *ofdma)
> +{
> +	struct sirfsoc_dma *sdma = ofdma->of_dma_data;
> +	unsigned int request = dma_spec->args[0];
> +
> +	if (request > SIRFSOC_DMA_CHANNELS)
> +		return NULL;
> +
> +	return dma_get_slave_channel(&sdma->channels[request].chan);
> +}
> +
>  static int sirfsoc_dma_probe(struct platform_device *op)
>  {
>  	struct device_node *dn = op->dev.of_node;
> @@ -744,11 +757,20 @@ static int sirfsoc_dma_probe(struct platform_device *op)
>  	if (ret)
>  		goto free_irq;
>  
> +	/* Device-tree DMA controller registration */
> +	ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma);
> +	if (ret) {
> +		dev_err(dev, "failed to register DMA controller\n");
> +		goto unreg_dma_dev;
> +	}
> +
>  	pm_runtime_enable(&op->dev);
>  	dev_info(dev, "initialized SIRFSOC DMAC driver\n");
>  
>  	return 0;
>  
> +unreg_dma_dev:
> +	dma_async_device_unregister(dma);
>  free_irq:
>  	free_irq(sdma->irq, sdma);
>  irq_dispose:
> @@ -761,6 +783,7 @@ static int sirfsoc_dma_remove(struct platform_device *op)
>  	struct device *dev = &op->dev;
>  	struct sirfsoc_dma *sdma = dev_get_drvdata(dev);
>  
> +	of_dma_controller_free(op->dev.of_node);
>  	dma_async_device_unregister(&sdma->dma);
>  	free_irq(sdma->irq, sdma);
>  	irq_dispose_mapping(sdma->irq);
> -- 
> 1.7.5.4
> 
> 

-- 
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v5] dmaengine: sirf: enable generic dt binding for dma channels
       [not found]     ` <20140319144359.GI1976-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2014-03-27  8:03       ` Barry Song
       [not found]         ` <CAGsJ_4yVXN2pT-QCjWLx7bCM7rau=UAnkCY8k9QqEPOkMAcrXA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 18+ messages in thread
From: Barry Song @ 2014-03-27  8:03 UTC (permalink / raw)
  To: Vinod Koul
  Cc: robh+dt-DgEjT+Ai2ygdnm+yROfE0A, Pawel Moll, Mark Rutland,
	ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg, Kumar Gala,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, DL-SHA-WorkGroupLinux,
	Lars-Peter Clausen, Barry Song

[-- Attachment #1: Type: text/plain, Size: 818 bytes --]

2014-03-19 22:43 GMT+08:00 Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>:
> On Sun, Jan 26, 2014 at 10:08:45AM +0800, Barry Song wrote:
>> From: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
>>
>> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
>> we add a xlate() to let dma clients be able to find right dma_chan by generic
>> "dmas" properties in dts.
>>
>> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
>> Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
>> Signed-off-by: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
>
> I tried applying this but it failed to apply.
>
> Can you pls rebase quickly and resend. While at it pls add the Acks recived!

Hi Vinod,
attached see the rebased version for master.

-barry

[-- Attachment #2: 0001-dmaengine-sirf-enable-generic-dt-binding-for-dma-cha.patch --]
[-- Type: text/x-patch, Size: 5144 bytes --]

From 3b720f21783f1df32ceaed35aa01ee2da1d2d26a Mon Sep 17 00:00:00 2001
From: Barry Song <Baohua.Song@csr.com>
Date: Thu, 27 Mar 2014 15:49:31 +0800
Subject: [PATCH] dmaengine: sirf: enable generic dt binding for dma channels

move to support of_dma_request_slave_channel() and dma_request_slave_channel.
we add a xlate() to let dma clients be able to find right dma_chan by generic
"dmas" properties in dts.

Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
---
 .../devicetree/bindings/dma/sirfsoc-dma.txt        |   43 ++++++++++++++++++++
 arch/arm/boot/dts/atlas6.dtsi                      |    2 +
 arch/arm/boot/dts/prima2.dtsi                      |    2 +
 drivers/dma/sirf-dma.c                             |   23 ++++++++++
 4 files changed, 70 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/dma/sirfsoc-dma.txt

diff --git a/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
new file mode 100644
index 0000000..ecbc96a
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/sirfsoc-dma.txt
@@ -0,0 +1,43 @@
+* CSR SiRFSoC DMA controller
+
+See dma.txt first
+
+Required properties:
+- compatible: Should be "sirf,prima2-dmac" or "sirf,marco-dmac"
+- reg: Should contain DMA registers location and length.
+- interrupts: Should contain one interrupt shared by all channel
+- #dma-cells: must be <1>. used to represent the number of integer
+    cells in the dmas property of client device.
+- clocks: clock required
+
+Example:
+
+Controller:
+dmac0: dma-controller@b00b0000 {
+	compatible = "sirf,prima2-dmac";
+	reg = <0xb00b0000 0x10000>;
+	interrupts = <12>;
+	clocks = <&clks 24>;
+	#dma-cells = <1>;
+};
+
+
+Client:
+Fill the specific dma request line in dmas. In the below example, spi0 read
+channel request line is 9 of the 2nd dma controller, while write channel uses
+4 of the 2nd dma controller; spi1 read channel request line is 12 of the 1st
+dma controller, while write channel uses 13 of the 1st dma controller:
+
+spi0: spi@b00d0000 {
+	compatible = "sirf,prima2-spi";
+	dmas = <&dmac1 9>,
+		<&dmac1 4>;
+	dma-names = "rx", "tx";
+};
+
+spi1: spi@b0170000 {
+	compatible = "sirf,prima2-spi";
+	dmas = <&dmac0 12>,
+		<&dmac0 13>;
+	dma-names = "rx", "tx";
+};
diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi
index f8674bc..ec23b5c 100644
--- a/arch/arm/boot/dts/atlas6.dtsi
+++ b/arch/arm/boot/dts/atlas6.dtsi
@@ -269,6 +269,7 @@
 				reg = <0xb00b0000 0x10000>;
 				interrupts = <12>;
 				clocks = <&clks 24>;
+				#dma-cells = <1>;
 			};
 
 			dmac1: dma-controller@b0160000 {
@@ -277,6 +278,7 @@
 				reg = <0xb0160000 0x10000>;
 				interrupts = <13>;
 				clocks = <&clks 25>;
+				#dma-cells = <1>;
 			};
 
 			vip@b00C0000 {
diff --git a/arch/arm/boot/dts/prima2.dtsi b/arch/arm/boot/dts/prima2.dtsi
index 0e21993..3a15dee 100644
--- a/arch/arm/boot/dts/prima2.dtsi
+++ b/arch/arm/boot/dts/prima2.dtsi
@@ -286,6 +286,7 @@
 				reg = <0xb00b0000 0x10000>;
 				interrupts = <12>;
 				clocks = <&clks 24>;
+				#dma-cells = <1>;
 			};
 
 			dmac1: dma-controller@b0160000 {
@@ -294,6 +295,7 @@
 				reg = <0xb0160000 0x10000>;
 				interrupts = <13>;
 				clocks = <&clks 25>;
+				#dma-cells = <1>;
 			};
 
 			vip@b00C0000 {
diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c
index d4d3a31..a1bd829 100644
--- a/drivers/dma/sirf-dma.c
+++ b/drivers/dma/sirf-dma.c
@@ -18,6 +18,7 @@
 #include <linux/of_device.h>
 #include <linux/of_platform.h>
 #include <linux/clk.h>
+#include <linux/of_dma.h>
 #include <linux/sirfsoc_dma.h>
 
 #include "dmaengine.h"
@@ -659,6 +660,18 @@ static int sirfsoc_dma_device_slave_caps(struct dma_chan *dchan,
 	return 0;
 }
 
+static struct dma_chan *of_dma_sirfsoc_xlate(struct of_phandle_args *dma_spec,
+	struct of_dma *ofdma)
+{
+	struct sirfsoc_dma *sdma = ofdma->of_dma_data;
+	unsigned int request = dma_spec->args[0];
+
+	if (request > SIRFSOC_DMA_CHANNELS)
+		return NULL;
+
+	return dma_get_slave_channel(&sdma->channels[request].chan);
+}
+
 static int sirfsoc_dma_probe(struct platform_device *op)
 {
 	struct device_node *dn = op->dev.of_node;
@@ -764,11 +777,20 @@ static int sirfsoc_dma_probe(struct platform_device *op)
 	if (ret)
 		goto free_irq;
 
+	/* Device-tree DMA controller registration */
+	ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma);
+	if (ret) {
+		dev_err(dev, "failed to register DMA controller\n");
+		goto unreg_dma_dev;
+	}
+
 	pm_runtime_enable(&op->dev);
 	dev_info(dev, "initialized SIRFSOC DMAC driver\n");
 
 	return 0;
 
+unreg_dma_dev:
+	dma_async_device_unregister(dma);
 free_irq:
 	free_irq(sdma->irq, sdma);
 irq_dispose:
@@ -781,6 +803,7 @@ static int sirfsoc_dma_remove(struct platform_device *op)
 	struct device *dev = &op->dev;
 	struct sirfsoc_dma *sdma = dev_get_drvdata(dev);
 
+	of_dma_controller_free(op->dev.of_node);
 	dma_async_device_unregister(&sdma->dma);
 	free_irq(sdma->irq, sdma);
 	irq_dispose_mapping(sdma->irq);
-- 
1.7.5.4


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v5] dmaengine: sirf: enable generic dt binding for dma channels
       [not found]         ` <CAGsJ_4yVXN2pT-QCjWLx7bCM7rau=UAnkCY8k9QqEPOkMAcrXA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2014-03-29 13:51           ` Vinod Koul
  0 siblings, 0 replies; 18+ messages in thread
From: Vinod Koul @ 2014-03-29 13:51 UTC (permalink / raw)
  To: Barry Song
  Cc: robh+dt-DgEjT+Ai2ygdnm+yROfE0A, Pawel Moll, Mark Rutland,
	ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg, Kumar Gala,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, DL-SHA-WorkGroupLinux,
	Lars-Peter Clausen, Barry Song

On Thu, Mar 27, 2014 at 04:03:31PM +0800, Barry Song wrote:
> 2014-03-19 22:43 GMT+08:00 Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>:
> > On Sun, Jan 26, 2014 at 10:08:45AM +0800, Barry Song wrote:
> >> From: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
> >>
> >> move to support of_dma_request_slave_channel() and dma_request_slave_channel.
> >> we add a xlate() to let dma clients be able to find right dma_chan by generic
> >> "dmas" properties in dts.
> >>
> >> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
> >> Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
> >> Signed-off-by: Barry Song <Baohua.Song-kQvG35nSl+M@public.gmane.org>
> >
> > I tried applying this but it failed to apply.
> >
> > Can you pls rebase quickly and resend. While at it pls add the Acks recived!
> 
> Hi Vinod,
> attached see the rebased version for master.
Applied, thanks

-- 
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2014-03-29 13:51 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-08 14:12 [PATCH v4] dmaengine: sirf: enable generic dt binding for dma channels Barry Song
2014-01-26  2:08 ` [PATCH v5] " Barry Song
2014-01-20  7:48 ` [PATCH v4] " Vinod Koul
2014-01-20  9:35   ` Barry Song
2014-01-20  8:47     ` Vinod Koul
2014-01-20 10:20       ` Barry Song
     [not found]     ` <CAGsJ_4zcwCx0RNMNx8YaDBFtGE=02-B79+WKDGeky80X5agcuw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-01  2:49       ` Barry Song
2014-03-01  2:49         ` Barry Song
     [not found]         ` <CAGsJ_4zMYGTS4CyCsTAH_5PMK3v4Pr+e88YjXL=d3A=EjPf9rQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-17  4:51           ` Vinod Koul
2014-03-17  4:51             ` Vinod Koul
     [not found]             ` <20140317045105.GB1976-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-03-18  2:02               ` Barry Song
2014-03-18  2:02                 ` Barry Song
2014-03-18 12:20               ` Arnd Bergmann
2014-03-18 12:20                 ` Arnd Bergmann
2014-01-20 10:30   ` Barry Song
     [not found] ` <1389190369-2012-1-git-send-email-21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-03-19 14:43   ` [PATCH v5] " Vinod Koul
     [not found]     ` <20140319144359.GI1976-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-03-27  8:03       ` Barry Song
     [not found]         ` <CAGsJ_4yVXN2pT-QCjWLx7bCM7rau=UAnkCY8k9QqEPOkMAcrXA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-29 13:51           ` Vinod Koul

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.