From: Ben Dooks <ben.dooks@codethink.co.uk>
To: linux-sh@vger.kernel.org
Subject: [PATCH 2/8] shdma: fdt: allocate and use local hwid bitmap for shdma mux
Date: Wed, 04 Jun 2014 16:14:09 +0000 [thread overview]
Message-ID: <1401898455-31064-3-git-send-email-ben.dooks@codethink.co.uk> (raw)
Move the shdma-of.c code to allocating and using a slave bitmap for
tracking allocation of the slave channels used by the mid-rid stored
in the phandle for the mux.
This means that we can have multiple shdma muxes in the system without
any issue of slave-ids clashing and all the child dma units will be
able to properly protect against the re-use of a mid/rid pair.
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
drivers/dma/sh/shdma-base.c | 2 ++
drivers/dma/sh/shdma-of.c | 16 ++++++++++++++++
include/linux/shdma-base.h | 6 ++++++
3 files changed, 24 insertions(+)
diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c
index 5b18c88..861e1f5 100644
--- a/drivers/dma/sh/shdma-base.c
+++ b/drivers/dma/sh/shdma-base.c
@@ -986,6 +986,8 @@ int shdma_init(struct device *dev, struct shdma_dev *sdev,
dma_dev->dev = dev;
sdev->slave_used = shdma_global_slave_used;
+ shdma_of_setup(dev, sdev);
+
return 0;
}
EXPORT_SYMBOL(shdma_init);
diff --git a/drivers/dma/sh/shdma-of.c b/drivers/dma/sh/shdma-of.c
index b4ff9d3..894c48e 100644
--- a/drivers/dma/sh/shdma-of.c
+++ b/drivers/dma/sh/shdma-of.c
@@ -17,6 +17,10 @@
#include <linux/platform_device.h>
#include <linux/shdma-base.h>
+struct shdma_of_state {
+ unsigned long slave_used[256 / sizeof(unsigned long)];
+};
+
#define to_shdma_chan(c) container_of(c, struct shdma_chan, dma_chan)
static struct dma_chan *shdma_of_xlate(struct of_phandle_args *dma_spec,
@@ -41,11 +45,23 @@ static struct dma_chan *shdma_of_xlate(struct of_phandle_args *dma_spec,
return chan;
}
+void shdma_of_setup(struct device *dev, struct shdma_dev *shdev)
+{
+ struct shdma_of_state *ofs = dev_get_platdata(dev->parent);
+
+ shdev->slave_used = ofs->slave_used;
+}
+
static int shdma_of_probe(struct platform_device *pdev)
{
const struct of_dev_auxdata *lookup = dev_get_platdata(&pdev->dev);
+ struct shdma_of_state *ofs;
int ret;
+ ofs = devm_kzalloc(&pdev->dev, sizeof(*ofs), GFP_KERNEL);
+ if (!ofs)
+ return -ENOMEM;
+
ret = of_dma_controller_register(pdev->dev.of_node,
shdma_of_xlate, pdev);
if (ret < 0)
diff --git a/include/linux/shdma-base.h b/include/linux/shdma-base.h
index 6966593..0a3e422 100644
--- a/include/linux/shdma-base.h
+++ b/include/linux/shdma-base.h
@@ -131,4 +131,10 @@ bool shdma_chan_filter(struct dma_chan *chan, void *arg);
#define shdma_chan_filter NULL
#endif
+#ifdef CONFIG_OF
+extern void shdma_of_setup(struct device *dev, struct shdma_dev *sdev);
+#else
+static inline void shdma_of_setup(struct device *dev, struct shdma_dev *sdev) { }
+#endif
+
#endif
--
2.0.0.rc2
next reply other threads:[~2014-06-04 16:14 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-04 16:14 Ben Dooks [this message]
2014-06-05 10:47 ` [PATCH 2/8] shdma: fdt: allocate and use local hwid bitmap for shdma mux Kuninori Morimoto
2014-06-05 16:40 ` Ben Dooks
2014-06-05 23:50 ` Kuninori Morimoto
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=1401898455-31064-3-git-send-email-ben.dooks@codethink.co.uk \
--to=ben.dooks@codethink.co.uk \
--cc=linux-sh@vger.kernel.org \
/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 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.