Message ID | 1389190369-2012-1-git-send-email-21cnbao@gmail.com (mailing list archive) |
---|---|
State | Rejected |
Delegated to: | Vinod Koul |
Headers | show |
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@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 >
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@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@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
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@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 -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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@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 -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 :(
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 -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Jan 26, 2014 at 10:08:45AM +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> I tried applying this but it failed to apply. Can you pls rebase quickly and resend. While at it pls add the Acks recived!
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);