summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/dma.c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2012-03-06 14:22:14 +0530
committerSimone Willett <swillett@nvidia.com>2012-03-06 20:08:38 -0800
commit091ea4f9c2cfdba2e72bd2c1ccf4a67df159d1be (patch)
treee648a86cb88392e529cb78906bd7ce13cfc64065 /arch/arm/mach-tegra/dma.c
parent86373a7e882d9ce6d45964701ff13c7a2d8b02f5 (diff)
ARM: tegra: dma: Check request size before enqueuing requests
The request size should be multiple of 4 bytes in ONE_SHOT and CONTINUOUS_SINGLE mode and multiple of 8 bytes in case of CONTINUOUS_DOUBLE mode. Change-Id: Iedb7a75eedda58f4f9b5c6d072ef2edb7ee657d4 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/87994 Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/dma.c')
-rw-r--r--arch/arm/mach-tegra/dma.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/dma.c b/arch/arm/mach-tegra/dma.c
index 9882366fb8c7..f882d4293bec 100644
--- a/arch/arm/mach-tegra/dma.c
+++ b/arch/arm/mach-tegra/dma.c
@@ -427,6 +427,14 @@ int tegra_dma_enqueue_req(struct tegra_dma_channel *ch,
return -EINVAL;
}
+ if ((req->size & 0x3) ||
+ ((ch->mode & TEGRA_DMA_MODE_CONTINUOUS_DOUBLE) && (req->size & 0x7)))
+ {
+ pr_err("Invalid DMA request size 0x%08x for channel %d\n",
+ req->size, ch->id);
+ return -EINVAL;
+ }
+
spin_lock_irqsave(&ch->lock, irq_flags);
list_for_each_entry(_req, &ch->list, node) {