summaryrefslogtreecommitdiff
path: root/target/linux/ipq806x/patches-3.18/152-dmaengine-Make-channel-allocation-callbacks-optional.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-08-07 08:36:16 +0000
committerFelix Fietkau <nbd@openwrt.org>2015-08-07 08:36:16 +0000
commitc7bf2accc94e081fab0c595c7e5ddd70cfe6b0c1 (patch)
treeabfce27ffeaf84f9ec70582fbbb3ad3c889c49c3 /target/linux/ipq806x/patches-3.18/152-dmaengine-Make-channel-allocation-callbacks-optional.patch
parentde19f06d12e9afd1278e46909bd973189235b2fa (diff)
downloadmtk-20170518-c7bf2accc94e081fab0c595c7e5ddd70cfe6b0c1.zip
mtk-20170518-c7bf2accc94e081fab0c595c7e5ddd70cfe6b0c1.tar.gz
mtk-20170518-c7bf2accc94e081fab0c595c7e5ddd70cfe6b0c1.tar.bz2
ipq806x: Add ADM support
These are cherry-picked & backported from LKML: *https://lkml.org/lkml/2015/3/17/19 They are enabled on both 3.18 and 4.1 kernel. Patches 150 to 154 are applying changes merged since 3.18; they enable mechanisms used by the ADM driver. ADM engine is used by the NAND controller, so it is necessary to bring-up NAND flash support. Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org> SVN-Revision: 46567
Diffstat (limited to 'target/linux/ipq806x/patches-3.18/152-dmaengine-Make-channel-allocation-callbacks-optional.patch')
-rw-r--r--target/linux/ipq806x/patches-3.18/152-dmaengine-Make-channel-allocation-callbacks-optional.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches-3.18/152-dmaengine-Make-channel-allocation-callbacks-optional.patch b/target/linux/ipq806x/patches-3.18/152-dmaengine-Make-channel-allocation-callbacks-optional.patch
new file mode 100644
index 0000000..6337259
--- /dev/null
+++ b/target/linux/ipq806x/patches-3.18/152-dmaengine-Make-channel-allocation-callbacks-optional.patch
@@ -0,0 +1,62 @@
+From c4b54a648e682f678c338619df848233a6babc46 Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime.ripard@free-electrons.com>
+Date: Mon, 17 Nov 2014 14:41:59 +0100
+Subject: [PATCH] dmaengine: Make channel allocation callbacks optional
+
+Nowadays, some drivers don't have anything in there channel allocation
+callbacks anymore.
+
+Remove the BUG_ON if those callbacks aren't implemented, in order to allow
+drivers to not implement them.
+
+Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Vinod Koul <vinod.koul@intel.com>
+---
+ drivers/dma/dmaengine.c | 18 +++++++++++-------
+ 1 file changed, 11 insertions(+), 7 deletions(-)
+
+--- a/drivers/dma/dmaengine.c
++++ b/drivers/dma/dmaengine.c
+@@ -235,9 +235,11 @@ static int dma_chan_get(struct dma_chan
+ return -ENODEV;
+
+ /* allocate upon first client reference */
+- ret = chan->device->device_alloc_chan_resources(chan);
+- if (ret < 0)
+- goto err_out;
++ if (chan->device->device_alloc_chan_resources) {
++ ret = chan->device->device_alloc_chan_resources(chan);
++ if (ret < 0)
++ goto err_out;
++ }
+
+ if (!dma_has_cap(DMA_PRIVATE, chan->device->cap_mask))
+ balance_ref_count(chan);
+@@ -259,11 +261,15 @@ err_out:
+ */
+ static void dma_chan_put(struct dma_chan *chan)
+ {
++ /* This channel is not in use, bail out */
+ if (!chan->client_count)
+- return; /* this channel failed alloc_chan_resources */
++ return;
++
+ chan->client_count--;
+ module_put(dma_chan_to_owner(chan));
+- if (chan->client_count == 0)
++
++ /* This channel is not in use anymore, free it */
++ if (!chan->client_count && chan->device->device_free_chan_resources)
+ chan->device->device_free_chan_resources(chan);
+ }
+
+@@ -817,8 +823,6 @@ int dma_async_device_register(struct dma
+ BUG_ON(dma_has_cap(DMA_INTERLEAVE, device->cap_mask) &&
+ !device->device_prep_interleaved_dma);
+
+- BUG_ON(!device->device_alloc_chan_resources);
+- BUG_ON(!device->device_free_chan_resources);
+ BUG_ON(!device->device_tx_status);
+ BUG_ON(!device->device_issue_pending);
+ BUG_ON(!device->dev);