diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2011-01-12 14:13:23 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2011-01-31 12:36:02 +0100 |
commit | d07102a1bb0e759ce4571df30c62998ef5d8a8d3 (patch) | |
tree | f1b093f2a642600823ef733ca0da7245751a8a2b /drivers/dma/imx-dma.c | |
parent | dmaengine i.MX dma: set maximum segment size for our device (diff) | |
download | linux-d07102a1bb0e759ce4571df30c62998ef5d8a8d3.tar.xz linux-d07102a1bb0e759ce4571df30c62998ef5d8a8d3.zip |
dmaengine i.MX dma: check sg entries for valid addresses and lengths
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/dma/imx-dma.c')
-rw-r--r-- | drivers/dma/imx-dma.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c index a46e1d9fa3e4..a1eac99a5fa1 100644 --- a/drivers/dma/imx-dma.c +++ b/drivers/dma/imx-dma.c @@ -243,6 +243,21 @@ static struct dma_async_tx_descriptor *imxdma_prep_slave_sg( else dmamode = DMA_MODE_WRITE; + switch (imxdmac->word_size) { + case DMA_SLAVE_BUSWIDTH_4_BYTES: + if (sgl->length & 3 || sgl->dma_address & 3) + return NULL; + break; + case DMA_SLAVE_BUSWIDTH_2_BYTES: + if (sgl->length & 1 || sgl->dma_address & 1) + return NULL; + break; + case DMA_SLAVE_BUSWIDTH_1_BYTE: + break; + default: + return NULL; + } + ret = imx_dma_setup_sg(imxdmac->imxdma_channel, sgl, sg_len, dma_length, imxdmac->per_address, dmamode); if (ret) |