mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
video: rockchip: rga3: add dma_addr in struct rga_dma_buffer
Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com> Change-Id: I5c1208032c957920b51ee6a489a257947b5dc55b
This commit is contained in:
@@ -165,13 +165,14 @@ struct rga_dma_buffer {
|
||||
struct dma_buf *dma_buf;
|
||||
struct dma_buf_attachment *attach;
|
||||
struct sg_table *sgt;
|
||||
void *vmap_ptr;
|
||||
void *vaddr;
|
||||
|
||||
struct iommu_domain *domain;
|
||||
|
||||
enum dma_data_direction dir;
|
||||
|
||||
dma_addr_t iova;
|
||||
dma_addr_t dma_addr;
|
||||
unsigned long size;
|
||||
/*
|
||||
* The offset of the first page of the sgt.
|
||||
|
||||
@@ -458,7 +458,7 @@ int rga_dma_map_buf(struct dma_buf *dma_buf, struct rga_dma_buffer *rga_dma_buff
|
||||
rga_dma_buffer->dma_buf = dma_buf;
|
||||
rga_dma_buffer->attach = attach;
|
||||
rga_dma_buffer->sgt = sgt;
|
||||
rga_dma_buffer->iova = sg_dma_address(sgt->sgl);
|
||||
rga_dma_buffer->dma_addr = sg_dma_address(sgt->sgl);
|
||||
rga_dma_buffer->dir = dir;
|
||||
rga_dma_buffer->size = 0;
|
||||
for_each_sgtable_sg(sgt, sg, i)
|
||||
@@ -509,7 +509,7 @@ int rga_dma_map_fd(int fd, struct rga_dma_buffer *rga_dma_buffer,
|
||||
rga_dma_buffer->dma_buf = dma_buf;
|
||||
rga_dma_buffer->attach = attach;
|
||||
rga_dma_buffer->sgt = sgt;
|
||||
rga_dma_buffer->iova = sg_dma_address(sgt->sgl);
|
||||
rga_dma_buffer->dma_addr = sg_dma_address(sgt->sgl);
|
||||
rga_dma_buffer->dir = dir;
|
||||
rga_dma_buffer->size = 0;
|
||||
for_each_sgtable_sg(sgt, sg, i)
|
||||
|
||||
@@ -444,6 +444,9 @@ static int rga_mm_map_dma_buffer(struct rga_external_buffer *external_buffer,
|
||||
|
||||
buffer->scheduler = scheduler;
|
||||
|
||||
if (scheduler->data->mmu == RGA_IOMMU)
|
||||
buffer->iova = buffer->dma_addr;
|
||||
|
||||
if (rga_mm_check_range_sgt(buffer->sgt))
|
||||
mm_flag |= RGA_MEM_UNDER_4G;
|
||||
|
||||
@@ -608,6 +611,9 @@ static int rga_mm_map_virt_addr(struct rga_external_buffer *external_buffer,
|
||||
__func__, scheduler->core);
|
||||
goto free_dma_buffer;
|
||||
}
|
||||
|
||||
buffer->dma_addr = buffer->iova;
|
||||
|
||||
break;
|
||||
case RGA_MMU:
|
||||
ret = dma_map_sg(scheduler->dev, sgt->sgl, sgt->orig_nents, DMA_BIDIRECTIONAL);
|
||||
@@ -978,9 +984,12 @@ void rga_mm_dump_buffer(struct rga_internal_buffer *dump_buffer)
|
||||
break;
|
||||
|
||||
pr_info("dma_buffer:\n");
|
||||
pr_info("dma_buf = %p, iova = 0x%lx, sgt = %p, size = %ld, map_core = 0x%x\n",
|
||||
dump_buffer->dma_buffer->dma_buf,
|
||||
pr_info("dma_buf = %p\n",
|
||||
dump_buffer->dma_buffer->dma_buf);
|
||||
pr_info("iova = 0x%lx, dma_addr = 0x%lx, offset = 0x%lx, sgt = %p, size = %ld, map_core = 0x%x\n",
|
||||
(unsigned long)dump_buffer->dma_buffer->iova,
|
||||
(unsigned long)dump_buffer->dma_buffer->dma_addr,
|
||||
(unsigned long)dump_buffer->dma_buffer->offset,
|
||||
dump_buffer->dma_buffer->sgt,
|
||||
dump_buffer->dma_buffer->size,
|
||||
dump_buffer->dma_buffer->scheduler->core);
|
||||
@@ -1002,8 +1011,9 @@ void rga_mm_dump_buffer(struct rga_internal_buffer *dump_buffer)
|
||||
if (rga_mm_is_invalid_dma_buffer(dump_buffer->dma_buffer))
|
||||
break;
|
||||
|
||||
pr_info("iova = 0x%lx, offset = 0x%lx, sgt = %p, size = %ld, map_core = 0x%x\n",
|
||||
pr_info("iova = 0x%lx, dma_addr = 0x%lx, offset = 0x%lx, sgt = %p, size = %ld, map_core = 0x%x\n",
|
||||
(unsigned long)dump_buffer->dma_buffer->iova,
|
||||
(unsigned long)dump_buffer->dma_buffer->dma_addr,
|
||||
(unsigned long)dump_buffer->dma_buffer->offset,
|
||||
dump_buffer->dma_buffer->sgt,
|
||||
dump_buffer->dma_buffer->size,
|
||||
@@ -1014,7 +1024,8 @@ void rga_mm_dump_buffer(struct rga_internal_buffer *dump_buffer)
|
||||
(unsigned long)dump_buffer->phys_addr);
|
||||
break;
|
||||
case RGA_PHYSICAL_ADDRESS:
|
||||
pr_info("physical address: pa = 0x%lx\n", (unsigned long)dump_buffer->phys_addr);
|
||||
pr_info("physical address:\n");
|
||||
pr_info("pa = 0x%lx\n", (unsigned long)dump_buffer->phys_addr);
|
||||
break;
|
||||
default:
|
||||
pr_err("Illegal external buffer!\n");
|
||||
@@ -1851,6 +1862,11 @@ static void rga_mm_unmap_channel_job_buffer(struct rga_job *job,
|
||||
if (rga_mm_sync_dma_sg_for_cpu(job_buffer->addr, job, dir))
|
||||
pr_err("sync sgt for cpu error!\n");
|
||||
|
||||
if (DEBUGGER_EN(MM)) {
|
||||
pr_info("unmap buffer:\n");
|
||||
rga_mm_dump_buffer(job_buffer->addr);
|
||||
}
|
||||
|
||||
rga_mm_unmap_buffer(job_buffer->addr);
|
||||
kfree(job_buffer->addr);
|
||||
|
||||
@@ -1878,6 +1894,11 @@ static int rga_mm_map_channel_job_buffer(struct rga_job *job,
|
||||
goto error_free_buffer;
|
||||
}
|
||||
|
||||
if (DEBUGGER_EN(MM)) {
|
||||
pr_info("map buffer:\n");
|
||||
rga_mm_dump_buffer(buffer);
|
||||
}
|
||||
|
||||
ret = rga_mm_get_buffer_info(job, buffer, &img->yrgb_addr);
|
||||
if (ret < 0) {
|
||||
pr_err("Failed to get internal buffer info!\n");
|
||||
|
||||
Reference in New Issue
Block a user