mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 01:34:14 +08:00
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_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,
|
||||
"Couldn't DMA map a %d byte buffer\n",
|
||||
count);
|
||||
@ -425,7 +425,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
|
||||
if (*done)
|
||||
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) {
|
||||
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_TO_DEVICE);
|
||||
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,
|
||||
"Couldn't DMA map a %d byte buffer\n",
|
||||
count);
|
||||
@ -538,7 +538,7 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
|
||||
omap_start_dma(c->dma_channel);
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user