From 141acdb941eeb3f3193b05092ea9b280c63d163f Mon Sep 17 00:00:00 2001 From: Li Huang Date: Tue, 30 Nov 2021 14:27:01 +0800 Subject: [PATCH] video: rockchip: rga3: fixup virtual addr fail on rga2 Signed-off-by: Li Huang Change-Id: I65d0d3ca5b82f25870741138130c2dc7e081496f --- drivers/video/rockchip/rga3/rga_dma_buf.c | 57 ++++++++++++++--------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/drivers/video/rockchip/rga3/rga_dma_buf.c b/drivers/video/rockchip/rga3/rga_dma_buf.c index 1daac020a956..0dfd8c11f0c8 100644 --- a/drivers/video/rockchip/rga3/rga_dma_buf.c +++ b/drivers/video/rockchip/rga3/rga_dma_buf.c @@ -299,14 +299,13 @@ static int rga_dma_buf_get_channel_info(struct rga_img_info_t *channel_info, } #endif - if (core == RGA2_SCHEDULER_CORE0) - channel_info->yrgb_addr = channel_info->uv_addr; - else if (core == RGA3_SCHEDULER_CORE0 || core == RGA3_SCHEDULER_CORE1) + /* The value of dma_fd is no longer needed. */ + channel_info->yrgb_addr = 0; + + if (core == RGA3_SCHEDULER_CORE0 || core == RGA3_SCHEDULER_CORE1) if (*rga_dma_buffer) channel_info->yrgb_addr = (*rga_dma_buffer)->iova; - rga_convert_addr(channel_info); - return 0; } @@ -421,12 +420,16 @@ int rga_dma_get_info(struct rga_job *job) ret = rga_dma_buf_get_channel_info(src0, &job->rga_dma_buffer_src0, mmu_flag, &job->dma_buf_src0, job->core); + + if (unlikely(ret < 0)) { + pr_err("src0 channel get info error!\n"); + goto src0_channel_err; + } + } else { + src0->yrgb_addr = src0->uv_addr; } - if (unlikely(ret < 0)) { - pr_err("src0 channel get info error!\n"); - goto src0_channel_err; - } + rga_convert_addr(src0); if (src0->yrgb_addr <= 0 && job->rga_dma_buffer_src0 != NULL) job->rga_dma_buffer_src0->use_dma_buf = true; @@ -439,12 +442,16 @@ int rga_dma_get_info(struct rga_job *job) ret = rga_dma_buf_get_channel_info(dst, &job->rga_dma_buffer_dst, mmu_flag, &job->dma_buf_dst, job->core); + + if (unlikely(ret < 0)) { + pr_err("dst channel get info error!\n"); + goto dst_channel_err; + } + } else { + dst->yrgb_addr = dst->uv_addr; } - if (unlikely(ret < 0)) { - pr_err("dst channel get info error!\n"); - goto dst_channel_err; - } + rga_convert_addr(dst); if (dst->yrgb_addr <= 0 && job->rga_dma_buffer_dst != NULL) job->rga_dma_buffer_dst->use_dma_buf = true; @@ -457,12 +464,16 @@ int rga_dma_get_info(struct rga_job *job) ret = rga_dma_buf_get_channel_info(src1, &job->rga_dma_buffer_src1, mmu_flag, &job->dma_buf_src1, job->core); + + if (unlikely(ret < 0)) { + pr_err("src1 channel get info error!\n"); + goto src1_channel_err; + } + } else { + src1->yrgb_addr = src1->uv_addr; } - if (unlikely(ret < 0)) { - pr_err("src1 channel get info error!\n"); - goto src1_channel_err; - } + rga_convert_addr(src1); if (src1->yrgb_addr <= 0 && job->rga_dma_buffer_src1 != NULL) job->rga_dma_buffer_src1->use_dma_buf = true; @@ -475,12 +486,16 @@ int rga_dma_get_info(struct rga_job *job) ret = rga_dma_buf_get_channel_info(els, &job->rga_dma_buffer_els, mmu_flag, &job->dma_buf_els, job->core); + + if (unlikely(ret < 0)) { + pr_err("els channel get info error!\n"); + goto els_channel_err; + } + } else { + els->yrgb_addr = els->uv_addr; } - if (unlikely(ret < 0)) { - pr_err("els channel get info error!\n"); - goto els_channel_err; - } + rga_convert_addr(els); if (els->yrgb_addr <= 0 && job->rga_dma_buffer_els != NULL) job->rga_dma_buffer_els->use_dma_buf = true;