mtd: OneNAND: OMAP2/3: unmap correct DMA buffer
Functions omap2_onenand_write_bufferram() and omap3_onenand_write_bufferram() map the write buffer and store the returned handle in variable dma_src. However, when DMA unmap is done, variable dma_dst is used instead of the correct dma_src. This patch fixes them to use the correct DMA buffer. Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com> Tested-by: Arnaud Ebalard <arno@natisbad.org> Acked-by: Adrian Hunter <adrian.hunter@nokia.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
ac39ee304a
commit
4a70b7d395
@ -402,7 +402,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
|
|||||||
|
|
||||||
dma_src = dma_map_single(&c->pdev->dev, buf, count, DMA_TO_DEVICE);
|
dma_src = dma_map_single(&c->pdev->dev, buf, count, DMA_TO_DEVICE);
|
||||||
dma_dst = c->phys_base + bram_offset;
|
dma_dst = c->phys_base + bram_offset;
|
||||||
if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
|
if (dma_mapping_error(&c->pdev->dev, dma_src)) {
|
||||||
dev_err(&c->pdev->dev,
|
dev_err(&c->pdev->dev,
|
||||||
"Couldn't DMA map a %d byte buffer\n",
|
"Couldn't DMA map a %d byte buffer\n",
|
||||||
count);
|
count);
|
||||||
@ -425,7 +425,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
|
|||||||
if (*done)
|
if (*done)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
|
dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
|
||||||
|
|
||||||
if (!*done) {
|
if (!*done) {
|
||||||
dev_err(&c->pdev->dev, "timeout waiting for DMA\n");
|
dev_err(&c->pdev->dev, "timeout waiting for DMA\n");
|
||||||
@ -520,7 +520,7 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
|
|||||||
dma_src = dma_map_single(&c->pdev->dev, (void *) buffer, count,
|
dma_src = dma_map_single(&c->pdev->dev, (void *) buffer, count,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
dma_dst = c->phys_base + bram_offset;
|
dma_dst = c->phys_base + bram_offset;
|
||||||
if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
|
if (dma_mapping_error(&c->pdev->dev, dma_src)) {
|
||||||
dev_err(&c->pdev->dev,
|
dev_err(&c->pdev->dev,
|
||||||
"Couldn't DMA map a %d byte buffer\n",
|
"Couldn't DMA map a %d byte buffer\n",
|
||||||
count);
|
count);
|
||||||
@ -538,7 +538,7 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
|
|||||||
omap_start_dma(c->dma_channel);
|
omap_start_dma(c->dma_channel);
|
||||||
wait_for_completion(&c->dma_done);
|
wait_for_completion(&c->dma_done);
|
||||||
|
|
||||||
dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
|
dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user