All of lore.kernel.org
 help / color / mirror / Atom feed
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


             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.