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
This commit is contained in:
@@ -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);
|
||||
Reference in New Issue
Block a user