mmc: bcm2835: Properly handle dmaengine_prep_slave_sg
In case dmaengine_prep_slave_sg fails we need to call dma_unmap_sg. Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> Acked-by: Eric Anholt <eric@anholt.net> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
Родитель
6dc6f26190
Коммит
2f5da67835
|
@ -507,13 +507,16 @@ void bcm2835_prepare_dma(struct bcm2835_host *host, struct mmc_data *data)
|
||||||
desc = dmaengine_prep_slave_sg(dma_chan, data->sg, sg_len, dir_slave,
|
desc = dmaengine_prep_slave_sg(dma_chan, data->sg, sg_len, dir_slave,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
|
|
||||||
if (desc) {
|
if (!desc) {
|
||||||
|
dma_unmap_sg(dma_chan->device->dev, data->sg, sg_len, dir_data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
desc->callback = bcm2835_dma_complete;
|
desc->callback = bcm2835_dma_complete;
|
||||||
desc->callback_param = host;
|
desc->callback_param = host;
|
||||||
host->dma_desc = desc;
|
host->dma_desc = desc;
|
||||||
host->dma_chan = dma_chan;
|
host->dma_chan = dma_chan;
|
||||||
host->dma_dir = dir_data;
|
host->dma_dir = dir_data;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bcm2835_start_dma(struct bcm2835_host *host)
|
static void bcm2835_start_dma(struct bcm2835_host *host)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче