summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/dma.c
diff options
context:
space:
mode:
authorminwuklee <mlee@nvidia.com>2010-12-01 14:34:15 +0900
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:41:55 -0800
commit57ef40366175161a122a0ee5f5e2d8cd25eb32a6 (patch)
tree3e9690036f35394bb06bcfdcd84767a48f65ea2b /arch/arm/mach-tegra/dma.c
parentbc2e6525a0114d058b0983edad089e947c36eede (diff)
[tegra:dma] set dma burst size for spi/slink
for spi/slink, set dma burst size based on transfer size. bug 747979 Original-Change-Id: I8c3c0a0410648a25190847590b9ac0304fb1105f Reviewed-on: http://git-master/r/11752 Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Tested-by: Bharat Nihalani <bnihalani@nvidia.com> Rebase-Id: R2549b6684bdb45c0c277f64f0a60de937f406b4e
Diffstat (limited to 'arch/arm/mach-tegra/dma.c')
-rw-r--r--arch/arm/mach-tegra/dma.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/dma.c b/arch/arm/mach-tegra/dma.c
index d525aec8f2a8..954cb0461aa2 100644
--- a/arch/arm/mach-tegra/dma.c
+++ b/arch/arm/mach-tegra/dma.c
@@ -479,7 +479,27 @@ static void tegra_dma_update_hw(struct tegra_dma_channel *ch,
u32 csr;
csr = CSR_IE_EOC | CSR_FLOW;
- ahb_seq = AHB_SEQ_INTR_ENB | AHB_SEQ_BURST_1;
+ ahb_seq = AHB_SEQ_INTR_ENB;
+
+ switch(req->req_sel) {
+ case TEGRA_DMA_REQ_SEL_SL2B1:
+ case TEGRA_DMA_REQ_SEL_SL2B2:
+ case TEGRA_DMA_REQ_SEL_SL2B3:
+ case TEGRA_DMA_REQ_SEL_SL2B4:
+ case TEGRA_DMA_REQ_SEL_SPI:
+ /* For spi/slink the burst size based on transfer size
+ * i.e. if multiple of 16 bytes then busrt is
+ * 4 word else burst size is 1 word */
+ if (req->size & 0xF)
+ ahb_seq |= AHB_SEQ_BURST_1;
+ else
+ ahb_seq |= AHB_SEQ_BURST_4;
+ break;
+ default:
+ ahb_seq |= AHB_SEQ_BURST_1;
+ break;
+ }
+
apb_seq = 0;
csr |= req->req_sel << CSR_REQ_SEL_SHIFT;