video: rockchip: rga3: Fix use of wrong dev when virtual address unmap

Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
Change-Id: I26428b56a897803e11d3c048fba47356d5648ce6
This commit is contained in:
Yu Qiaowei
2022-04-20 16:43:55 +08:00
committed by Tao Huang
parent 94704a2ab6
commit b44b46489e
2 changed files with 10 additions and 6 deletions

View File

@@ -187,6 +187,8 @@ struct rga_dma_buffer {
/* The core of the mapping */
int core;
struct device *dev;
};
struct rga_virt_addr {

View File

@@ -378,6 +378,7 @@ static int rga_mm_map_dma_buffer(struct rga_external_buffer *external_buffer,
}
internal_buffer->dma_buffer[i].core = rga_drvdata->scheduler[i]->core;
internal_buffer->dma_buffer[i].dev = rga_drvdata->scheduler[i]->dev;
/* At first, check whether the physical address. */
if (i == 0) {
@@ -419,11 +420,11 @@ static void rga_mm_unmap_virt_addr(struct rga_internal_buffer *internal_buffer)
WARN_ON(internal_buffer->dma_buffer == NULL || internal_buffer->virt_addr == NULL);
for (i = 0; i < internal_buffer->dma_buffer_size; i++)
if (rga_drvdata->scheduler[i]->core == RGA3_SCHEDULER_CORE0 ||
rga_drvdata->scheduler[i]->core == RGA3_SCHEDULER_CORE1)
if (internal_buffer->dma_buffer[i].core == RGA3_SCHEDULER_CORE0 ||
internal_buffer->dma_buffer[i].core == RGA3_SCHEDULER_CORE1)
rga_iommu_unmap_virt_addr(&internal_buffer->dma_buffer[i]);
else if (internal_buffer->dma_buffer[i].core != 0)
dma_unmap_sg(rga_drvdata->scheduler[i]->dev,
dma_unmap_sg(internal_buffer->dma_buffer[i].dev,
internal_buffer->dma_buffer[i].sgt->sgl,
internal_buffer->dma_buffer[i].sgt->orig_nents,
DMA_BIDIRECTIONAL);
@@ -524,17 +525,18 @@ static int rga_mm_map_virt_addr(struct rga_external_buffer *external_buffer,
}
internal_buffer->dma_buffer[i].core = rga_drvdata->scheduler[i]->core;
internal_buffer->dma_buffer[i].dev = rga_drvdata->scheduler[i]->dev;
}
return 0;
unmap_virt_addr:
for (i = 0; i < internal_buffer->dma_buffer_size; i++)
if (rga_drvdata->scheduler[i]->core == RGA3_SCHEDULER_CORE0 ||
rga_drvdata->scheduler[i]->core == RGA3_SCHEDULER_CORE1)
if (internal_buffer->dma_buffer[i].core == RGA3_SCHEDULER_CORE0 ||
internal_buffer->dma_buffer[i].core == RGA3_SCHEDULER_CORE1)
rga_iommu_unmap_virt_addr(&internal_buffer->dma_buffer[i]);
else if (internal_buffer->dma_buffer[i].core != 0)
dma_unmap_sg(rga_drvdata->scheduler[i]->dev,
dma_unmap_sg(internal_buffer->dma_buffer[i].dev,
internal_buffer->dma_buffer[i].sgt->sgl,
internal_buffer->dma_buffer[i].sgt->orig_nents,
DMA_BIDIRECTIONAL);