diff options
author | minwuklee <mlee@nvidia.com> | 2010-12-01 14:34:15 +0900 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:41:55 -0800 |
commit | 57ef40366175161a122a0ee5f5e2d8cd25eb32a6 (patch) | |
tree | 3e9690036f35394bb06bcfdcd84767a48f65ea2b /arch/arm/mach-tegra/dma.c | |
parent | bc2e6525a0114d058b0983edad089e947c36eede (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.c | 22 |
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; |