summaryrefslogtreecommitdiff
path: root/drivers/dma/omap-dma.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2013-11-02 21:09:18 (GMT)
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-04-03 23:28:05 (GMT)
commit49ae0b29439446cff81c32bf01fb7b7cce195373 (patch)
treee5eb9d8b656779620a7423614369dda1645de47c /drivers/dma/omap-dma.c
parent9043826d88467091543c1d3ab06eb4afeed34789 (diff)
downloadlinux-49ae0b29439446cff81c32bf01fb7b7cce195373.tar.xz
dmaengine: omap-dma: move CCR buffering disable errata out of the fast path
Since we record the CCR register in the dma transaction, we can move the processing of the iframe buffering errata out of the omap_dma_start(). Move it to the preparation functions. Acked-by: Tony Lindgren <tony@atomide.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/dma/omap-dma.c')
-rw-r--r--drivers/dma/omap-dma.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c
index 6cf66e6..324f4c7 100644
--- a/drivers/dma/omap-dma.c
+++ b/drivers/dma/omap-dma.c
@@ -201,8 +201,6 @@ static void omap_dma_start(struct omap_chan *c, struct omap_desc *d)
c->plat->dma_write(d->cicr, CICR, c->dma_ch);
val = c->plat->dma_read(CCR, c->dma_ch);
- if (od->plat->errata & DMA_ERRATA_IFRAME_BUFFERING)
- val |= CCR_BUFFERING_DISABLE;
val |= CCR_ENABLE;
mb();
c->plat->dma_write(val, CCR, c->dma_ch);
@@ -558,6 +556,7 @@ static struct dma_async_tx_descriptor *omap_dma_prep_slave_sg(
struct dma_chan *chan, struct scatterlist *sgl, unsigned sglen,
enum dma_transfer_direction dir, unsigned long tx_flags, void *context)
{
+ struct omap_dmadev *od = to_omap_dma_dev(chan->device);
struct omap_chan *c = to_omap_dma_chan(chan);
enum dma_slave_buswidth dev_width;
struct scatterlist *sgent;
@@ -636,6 +635,8 @@ static struct dma_async_tx_descriptor *omap_dma_prep_slave_sg(
d->cicr |= CICR_MISALIGNED_ERR_IE | CICR_TRANS_ERR_IE;
}
+ if (od->plat->errata & DMA_ERRATA_IFRAME_BUFFERING)
+ d->ccr |= CCR_BUFFERING_DISABLE;
/*
* Build our scatterlist entries: each contains the address,
@@ -760,6 +761,8 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic(
d->csdp |= CSDP_DST_BURST_64 | CSDP_SRC_BURST_64;
}
+ if (od->plat->errata & DMA_ERRATA_IFRAME_BUFFERING)
+ d->ccr |= CCR_BUFFERING_DISABLE;
c->cyclic = true;