From: Sricharan R <r.sricharan@ti.com>
To: r.sricharan@ti.com, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
dmaengine@vger.kernel.org
Cc: santosh.shilimkar@ti.com, rnayak@ti.com, nsekhar@ti.com,
tony@atomide.com, linux@arm.linux.org.uk, vinod.koul@intel.com,
dan.j.williams@intel.com, nm@ti.com
Subject: [RFC PATCH 4/9] drivers: omap-dma: Add crossbar line as a resource to omap_chan structure
Date: Fri, 7 Mar 2014 17:46:11 +0530 [thread overview]
Message-ID: <1394194576-23741-5-git-send-email-r.sricharan@ti.com> (raw)
In-Reply-To: <1394194576-23741-1-git-send-email-r.sricharan@ti.com>
In socs which have crossbar to route the peripheral dma request
line to the dma controller, only the peripheral crossbar request line
number is fixed and this is passed through the DT nodes. The dma request
channel to be used is allocated dynamically.
The total number of crossbar channels are registered during probe a
the dma request line free is mapped using the registered router's map function
during the device_alloc_chan_resource callback and freed with free_resource.
When a router is not registered, the dma request number is same as the
crossbar number.
Signed-off-by: Sricharan R <r.sricharan@ti.com>
---
drivers/dma/omap-dma.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c
index 38407f9..05ac480 100644
--- a/drivers/dma/omap-dma.c
+++ b/drivers/dma/omap-dma.c
@@ -47,6 +47,7 @@ struct omap_chan {
struct dma_xbar_device *router;
unsigned dma_sig;
+ unsigned dma_xbar;
bool cyclic;
bool paused;
@@ -530,6 +531,11 @@ static int omap_dma_alloc_chan_resources(struct dma_chan *chan)
struct omap_chan *c = to_omap_dma_chan(chan);
int ret;
+ if (c->router)
+ c->dma_sig = c->router->ops->map(c->dma_xbar, c->router);
+ else
+ c->dma_sig = c->dma_xbar;
+
if (od->legacy) {
ret = omap_request_dma(c->dma_sig, "DMA engine",
omap_dma_callback, c, &c->dma_ch);
@@ -539,7 +545,7 @@ static int omap_dma_alloc_chan_resources(struct dma_chan *chan)
}
dev_dbg(od->ddev.dev, "allocating channel %u for %u\n",
- c->dma_ch, c->dma_sig);
+ c->dma_ch, c->dma_xbar);
if (ret >= 0) {
omap_dma_assign(od, c, c->dma_ch);
@@ -594,9 +600,14 @@ static void omap_dma_free_chan_resources(struct dma_chan *chan)
od->lch_map[c->dma_ch] = NULL;
vchan_free_chan_resources(&c->vc);
+ if (c->router) {
+ c->router->ops->unmap(c->dma_sig, c->router);
+ c->dma_sig = 0;
+ }
+
omap_free_dma(c->dma_ch);
- dev_dbg(od->ddev.dev, "freeing channel for %u\n", c->dma_sig);
+ dev_dbg(od->ddev.dev, "freeing channel for %u\n", c->dma_xbar);
}
static size_t omap_dma_sg_size(struct omap_sg *sg)
@@ -1064,7 +1075,7 @@ static int omap_dma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
return ret;
}
-static int omap_dma_chan_init(struct omap_dmadev *od, int dma_sig)
+static int omap_dma_chan_init(struct omap_dmadev *od, int dma_xbar)
{
struct omap_chan *c;
@@ -1073,7 +1084,7 @@ static int omap_dma_chan_init(struct omap_dmadev *od, int dma_sig)
return -ENOMEM;
c->reg_map = od->reg_map;
- c->dma_sig = dma_sig;
+ c->dma_xbar = dma_xbar;
c->vc.desc_free = omap_dma_desc_free;
vchan_init(&c->vc, &od->ddev);
INIT_LIST_HEAD(&c->node);
@@ -1263,7 +1274,7 @@ bool omap_dma_filter_fn(struct dma_chan *chan, void *param)
struct omap_chan *c = to_omap_dma_chan(chan);
unsigned req = args->chan;
- if (req == c->dma_sig) {
+ if (req == c->dma_xbar) {
c->router = args->router_data;
return true;
}
--
1.7.9.5
next prev parent reply other threads:[~2014-03-07 12:16 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-07 12:16 [RFC PATCH 0/9] drivers: dma: Add support for dma-channel router Sricharan R
2014-03-07 12:16 ` [RFC PATCH 1/9] drivers: dma: omap-dma: Avoid hard-coding of the dma-request channels Sricharan R
2014-03-07 12:16 ` [RFC PATCH 2/9] drivers: dma: of-dma: Add support for dma-request line routers Sricharan R
2014-03-07 12:16 ` [RFC PATCH 3/9] drivers: dma: omap-dma: Add a seperate xlate function to get router data Sricharan R
2014-03-07 12:16 ` Sricharan R [this message]
2014-03-07 12:16 ` [RFC PATCH 5/9] drivers: dma: Add dma crossbar driver Sricharan R
2014-03-07 12:16 ` [RFC PATCH 6/9] arm: dts: dra: Add dma crossbar node Sricharan R
2014-03-07 12:16 ` [RFC PATCH 7/9] arm: dts: dra: Add dma-request crossbar phandle to dma-specs Sricharan R
2014-03-07 12:16 ` [RFC PATCH 8/9] arm: dra: Enable dma crossbar support on dra7xx Sricharan R
2014-03-07 12:16 ` [RFC PATCH 9/9] arm: dts: dra7: Change the total dma-req numbers to crossbar channels Sricharan R
2014-03-08 19:53 ` [RFC PATCH 0/9] drivers: dma: Add support for dma-channel router Rob Herring
2014-03-10 13:58 ` Sricharan R
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1394194576-23741-5-git-send-email-r.sricharan@ti.com \
--to=r.sricharan@ti.com \
--cc=dan.j.williams@intel.com \
--cc=devicetree@vger.kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=nm@ti.com \
--cc=nsekhar@ti.com \
--cc=rnayak@ti.com \
--cc=santosh.shilimkar@ti.com \
--cc=tony@atomide.com \
--cc=vinod.koul@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).