From: zonque@gmail.com (Daniel Mack)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 04/11] dma: mmp_pdma: add filter function
Date: Sat, 10 Aug 2013 18:52:18 +0200 [thread overview]
Message-ID: <1376153545-14361-5-git-send-email-zonque@gmail.com> (raw)
In-Reply-To: <1376153545-14361-1-git-send-email-zonque@gmail.com>
PXA peripherals need to obtain specific DMA request ids which will
eventually be stored in the DRCMR register.
Currently, clients are expected to store that number inside the slave
config block as slave_id, which is unfortunately incompatible with the
way DMA resources are handled in DT environments.
This patch adds a filter function which stores the filter parameter
passed in by of-dma.c into the channel's drcmr register.
For backward compatability, cfg->slave_id is still used if set to
a non-zero value.
Signed-off-by: Daniel Mack <zonque@gmail.com>
---
drivers/dma/mmp_pdma.c | 21 ++++++++++++++++++++-
include/linux/dma/mmp-pdma.h | 15 +++++++++++++++
2 files changed, 35 insertions(+), 1 deletion(-)
create mode 100644 include/linux/dma/mmp-pdma.h
diff --git a/drivers/dma/mmp_pdma.c b/drivers/dma/mmp_pdma.c
index 9d6410e..9dda27e 100644
--- a/drivers/dma/mmp_pdma.c
+++ b/drivers/dma/mmp_pdma.c
@@ -19,6 +19,7 @@
#include <linux/dmapool.h>
#include <linux/of_device.h>
#include <linux/of.h>
+#include <linux/dma/mmp-pdma.h>
#include "dmaengine.h"
@@ -634,8 +635,13 @@ static int mmp_pdma_control(struct dma_chan *dchan, enum dma_ctrl_cmd cmd,
chan->dcmd |= DCMD_BURST32;
chan->dir = cfg->direction;
- chan->drcmr = cfg->slave_id;
chan->dev_addr = addr;
+ /* FIXME: drivers should be ported over to use the filter
+ * function. Once that's done, the following two lines can
+ * be removed.
+ */
+ if (cfg->slave_id)
+ chan->drcmr = cfg->slave_id;
break;
default:
return -ENOSYS;
@@ -884,6 +890,19 @@ static struct platform_driver mmp_pdma_driver = {
.remove = mmp_pdma_remove,
};
+bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param)
+{
+ struct mmp_pdma_chan *c = to_mmp_pdma_chan(chan);
+
+ if (chan->device->dev->driver != &mmp_pdma_driver.driver)
+ return false;
+
+ c->drcmr = *(unsigned int *) param;
+
+ return true;
+}
+EXPORT_SYMBOL_GPL(mmp_pdma_filter_fn);
+
module_platform_driver(mmp_pdma_driver);
MODULE_DESCRIPTION("MARVELL MMP Periphera DMA Driver");
diff --git a/include/linux/dma/mmp-pdma.h b/include/linux/dma/mmp-pdma.h
new file mode 100644
index 0000000..2dc9b2b
--- /dev/null
+++ b/include/linux/dma/mmp-pdma.h
@@ -0,0 +1,15 @@
+#ifndef _MMP_PDMA_H_
+#define _MMP_PDMA_H_
+
+struct dma_chan;
+
+#ifdef CONFIG_MMP_PDMA
+bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param);
+#else
+static inline bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param)
+{
+ return false;
+}
+#endif
+
+#endif /* _MMP_PDMA_H_ */
--
1.8.3.1
next prev parent reply other threads:[~2013-08-10 16:52 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-10 16:52 [PATCH v2 00/11] dma: pdma: some patches needed for PXA DT environments Daniel Mack
2013-08-10 16:52 ` [PATCH v2 01/11] dma: mmp_pdma: factor out DRCMR register calculation Daniel Mack
2013-08-10 16:52 ` [PATCH v2 02/11] dma: mmp_pdma: refactor unlocking path in lookup_phy() Daniel Mack
2013-08-10 16:52 ` [PATCH v2 03/11] dma: mmp_pdma: fix maximum transfer length Daniel Mack
2013-08-10 16:52 ` Daniel Mack [this message]
2013-08-10 16:52 ` [PATCH v2 05/11] dma: mmp_pdma: make the controller a DMA provider Daniel Mack
2013-08-10 16:52 ` [PATCH v2 06/11] dma: mmp_pdma: print the number of channels at probe time Daniel Mack
2013-08-10 16:52 ` [PATCH v2 07/11] dma: mmp_pdma: remove duplicate assignment Daniel Mack
2013-08-10 16:52 ` [PATCH v2 08/11] dma: mmp_pdma: add support for byte-aligned transfers Daniel Mack
2013-08-10 16:52 ` [PATCH v2 09/11] dma: mmp_pdma: implement DMA_PAUSE and DMA_RESUME Daniel Mack
2013-08-14 8:15 ` Vinod Koul
2013-08-14 9:02 ` Daniel Mack
2013-08-14 8:30 ` Vinod Koul
2013-08-10 16:52 ` [PATCH v2 10/11] dma: mmp_pdma: add support for residue reporting Daniel Mack
2013-08-14 8:19 ` Vinod Koul
2013-08-10 16:52 ` [PATCH v2 11/11] dma: mmp_pdma: add support for cyclic DMA descriptors Daniel Mack
2013-08-10 17:18 ` [PATCH v2 00/11] dma: pdma: some patches needed for PXA DT environments Daniel Mack
2013-08-14 8:28 ` Vinod Koul
2013-08-10 21:25 ` Arnd Bergmann
2013-08-13 21:56 ` Daniel Mack
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=1376153545-14361-5-git-send-email-zonque@gmail.com \
--to=zonque@gmail.com \
--cc=linux-arm-kernel@lists.infradead.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 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).