summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/dma.c
diff options
context:
space:
mode:
authorAdam Jiang <chaoj@nvidia.com>2012-01-14 01:16:02 +0900
committerVarun Colbert <vcolbert@nvidia.com>2012-01-20 13:56:28 -0800
commiteef4003302ce0dea6ed93480c42abf5b45a3e2e0 (patch)
tree79fc32d7a311f3c0be7324845b4dbcaf8217d3e8 /arch/arm/mach-tegra/dma.c
parentaab7c14c8814cd1a8f56ff61cd1eb8811e691073 (diff)
DTV: dma: fixed dma burst size issue DTV xmit
Since dtv interface was designed based on SPI bus, it shares the same dma configuration with SPI bus. However, it is not proper because DTV interface has to transmit data in 4 words long constantly. The patch added an option in tegra_dma_req to set burst size to be fixed 4 words. fixed Bug 910227 Change-Id: I1436f0c8d108dd39edc57ae4c9cb750d9574b62c Reviewed-on: http://git-master/r/75509 Reviewed-by: David Schalig <dschalig@nvidia.com> Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> Signed-off-by: Adam Jiang <chaoj@nvidia.com> Signed-off-by: Varun Wadekar <vwadekar@nvidia.com> Reviewed-on: http://git-master/r/76461 Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'arch/arm/mach-tegra/dma.c')
-rw-r--r--arch/arm/mach-tegra/dma.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/arm/mach-tegra/dma.c b/arch/arm/mach-tegra/dma.c
index 8776e9b2a7bb..b2744b15f693 100644
--- a/arch/arm/mach-tegra/dma.c
+++ b/arch/arm/mach-tegra/dma.c
@@ -570,10 +570,16 @@ static void tegra_dma_update_hw(struct tegra_dma_channel *ch,
case TEGRA_DMA_REQ_SEL_APBIF_CH3:
#endif
case TEGRA_DMA_REQ_SEL_SPI:
+ /* dtv interface has fixed burst size of 4 */
+ if (req->fixed_burst_size) {
+ ahb_seq |= AHB_SEQ_BURST_4;
+ break;
+ }
/* For spi/slink the burst size based on transfer size
- * i.e. if multiple of 32 bytes then busrt is
- * 8 word else if multiple of 16 bytes then burst is
- * 4 word else burst size is 1 word */
+ * i.e. if multiple of 32 bytes then busrt is 8
+ * word(8x32bits) else if multiple of 16 bytes then
+ * burst is 4 word(4x32bits) else burst size is 1
+ * word(1x32bits) */
if (req->size & 0xF)
ahb_seq |= AHB_SEQ_BURST_1;
else if ((req->size >> 4) & 0x1)
@@ -581,7 +587,6 @@ static void tegra_dma_update_hw(struct tegra_dma_channel *ch,
else
ahb_seq |= AHB_SEQ_BURST_8;
break;
-
#if defined(CONFIG_ARCH_TEGRA_2x_SOC)
case TEGRA_DMA_REQ_SEL_I2S_2:
case TEGRA_DMA_REQ_SEL_I2S_1: