mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
video: rockchip: rga3: The import cmd supports virtual/physical addresses.
It will only cache the corresponding address. Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com> Change-Id: I81e110ce382ffe69a42462dd3586931b62eb4190
This commit is contained in:
@@ -51,8 +51,6 @@ static int rga_mm_map_dma_buffer(struct rga_external_buffer *external_buffer,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
internal_buffer->type = RGA_DMA_BUFFER;
|
||||
|
||||
for (i = 0; i < internal_buffer->dma_buffer_size; i++) {
|
||||
/* If the physical address is greater than 4G, there is no need to map RGA2. */
|
||||
if ((rga_drvdata->rga_scheduler[i]->core == RGA2_SCHEDULER_CORE0) &&
|
||||
@@ -92,9 +90,11 @@ static int rga_mm_unmap_buffer(struct rga_internal_buffer *internal_buffer)
|
||||
rga_mm_unmap_dma_buffer(internal_buffer);
|
||||
break;
|
||||
case RGA_VIRTUAL_ADDRESS:
|
||||
// TODO
|
||||
internal_buffer->vir_addr = 0;
|
||||
break;
|
||||
case RGA_PHYSICAL_ADDRESS:
|
||||
// TODO
|
||||
internal_buffer->phy_addr = 0;
|
||||
break;
|
||||
default:
|
||||
pr_err("Illegal external buffer!\n");
|
||||
return -EFAULT;
|
||||
@@ -110,6 +110,8 @@ static int rga_mm_map_buffer(struct rga_external_buffer *external_buffer,
|
||||
|
||||
switch (external_buffer->type) {
|
||||
case RGA_DMA_BUFFER:
|
||||
internal_buffer->type = RGA_DMA_BUFFER;
|
||||
|
||||
ret = rga_mm_map_dma_buffer(external_buffer, internal_buffer);
|
||||
if (ret < 0) {
|
||||
pr_err("%s map dma_buf error!\n", __func__);
|
||||
@@ -117,9 +119,15 @@ static int rga_mm_map_buffer(struct rga_external_buffer *external_buffer,
|
||||
}
|
||||
break;
|
||||
case RGA_VIRTUAL_ADDRESS:
|
||||
// TODO
|
||||
internal_buffer->type = RGA_VIRTUAL_ADDRESS;
|
||||
|
||||
internal_buffer->vir_addr = external_buffer->memory;
|
||||
break;
|
||||
case RGA_PHYSICAL_ADDRESS:
|
||||
// TODO
|
||||
internal_buffer->type = RGA_PHYSICAL_ADDRESS;
|
||||
|
||||
internal_buffer->phy_addr = external_buffer->memory;
|
||||
break;
|
||||
default:
|
||||
pr_err("Illegal external buffer!\n");
|
||||
return -EFAULT;
|
||||
@@ -179,9 +187,23 @@ rga_mm_internal_buffer_lookup_external(struct rga_mm *mm_session,
|
||||
dma_buf_put(dma_buf);
|
||||
break;
|
||||
case RGA_VIRTUAL_ADDRESS:
|
||||
// TODO
|
||||
idr_for_each_entry(&mm_session->memory_idr, temp_buffer, id) {
|
||||
if (temp_buffer->vir_addr == external_buffer->memory) {
|
||||
output_buffer = temp_buffer;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case RGA_PHYSICAL_ADDRESS:
|
||||
// TODO
|
||||
idr_for_each_entry(&mm_session->memory_idr, temp_buffer, id) {
|
||||
if (temp_buffer->phy_addr == external_buffer->memory) {
|
||||
output_buffer = temp_buffer;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
pr_err("Illegal external buffer!\n");
|
||||
return NULL;
|
||||
|
||||
Reference in New Issue
Block a user