From 2d604c4ebc422e8d24c824e60626d5948c95164a Mon Sep 17 00:00:00 2001 From: Mark Yao Date: Tue, 26 Sep 2017 10:08:07 +0800 Subject: [PATCH] video/rockchip: rga2: using common dma_buf api for ion dma fd Change-Id: Iea8e6104f06341a5cadecec84ebdbd01d0512af1 Signed-off-by: Mark Yao --- drivers/video/rockchip/rga2/rga2_drv.c | 101 ++++++++----------------- 1 file changed, 33 insertions(+), 68 deletions(-) diff --git a/drivers/video/rockchip/rga2/rga2_drv.c b/drivers/video/rockchip/rga2/rga2_drv.c index e1492ee09819..4962860d19ec 100644 --- a/drivers/video/rockchip/rga2/rga2_drv.c +++ b/drivers/video/rockchip/rga2/rga2_drv.c @@ -690,72 +690,49 @@ static void rga2_del_running_list_timeout(void) static int rga2_get_img_info(rga_img_info_t *img, u8 mmu_flag, - u8 buf_gem_type_dma, struct sg_table **psgt, struct dma_buf_attachment **pattach) { struct dma_buf_attachment *attach = NULL; - struct ion_client *ion_client = NULL; - struct ion_handle *hdl = NULL; struct device *rga_dev = NULL; struct sg_table *sgt = NULL; struct dma_buf *dma_buf = NULL; u32 vir_w, vir_h; - ion_phys_addr_t phy_addr; - size_t len = 0; int yrgb_addr = -1; int ret = 0; - ion_client = rga2_drvdata->ion_client; rga_dev = rga2_drvdata->dev; yrgb_addr = (int)img->yrgb_addr; vir_w = img->vir_w; vir_h = img->vir_h; if (yrgb_addr > 0) { - if (buf_gem_type_dma) { - dma_buf = dma_buf_get(img->yrgb_addr); - if (IS_ERR(dma_buf)) { - ret = -EINVAL; - pr_err("dma_buf_get fail fd[%d]\n", yrgb_addr); - return ret; - } + dma_buf = dma_buf_get(img->yrgb_addr); + if (IS_ERR(dma_buf)) { + ret = -EINVAL; + pr_err("dma_buf_get fail fd[%d]\n", yrgb_addr); + return ret; + } - attach = dma_buf_attach(dma_buf, rga_dev); - if (IS_ERR(attach)) { - dma_buf_put(dma_buf); - ret = -EINVAL; - pr_err("Failed to attach dma_buf\n"); - return ret; - } + attach = dma_buf_attach(dma_buf, rga_dev); + if (IS_ERR(attach)) { + dma_buf_put(dma_buf); + ret = -EINVAL; + pr_err("Failed to attach dma_buf\n"); + return ret; + } - *pattach = attach; - sgt = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL); - if (IS_ERR(sgt)) { - ret = -EINVAL; - pr_err("Failed to map src attachment\n"); - goto err_get_sg; - } - if (!mmu_flag) { - ret = -EINVAL; - pr_err("Fix it please enable iommu flag\n"); - goto err_get_sg; - } - } else { - hdl = ion_import_dma_buf(ion_client, img->yrgb_addr); - if (IS_ERR(hdl)) { - ret = -EINVAL; - pr_err("RGA2 ERROR ion buf handle\n"); - return ret; - } - if (mmu_flag) { - sgt = ion_sg_table(ion_client, hdl); - if (IS_ERR(sgt)) { - ret = -EINVAL; - pr_err("Fail map src attachment\n"); - goto err_get_sg; - } - } + *pattach = attach; + sgt = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL); + if (IS_ERR(sgt)) { + ret = -EINVAL; + pr_err("Failed to map src attachment\n"); + goto err_get_sg; + } + if (!mmu_flag) { + ret = -EINVAL; + pr_err("Fix it please enable iommu flag\n"); + goto err_get_sg; } if (mmu_flag) { @@ -763,11 +740,6 @@ static int rga2_get_img_info(rga_img_info_t *img, img->yrgb_addr = img->uv_addr; img->uv_addr = img->yrgb_addr + (vir_w * vir_h); img->v_addr = img->uv_addr + (vir_w * vir_h) / 4; - } else { - ion_phys(ion_client, hdl, &phy_addr, &len); - img->yrgb_addr = phy_addr; - img->uv_addr = img->yrgb_addr + (vir_w * vir_h); - img->v_addr = img->uv_addr + (vir_w * vir_h) / 4; } } else { img->yrgb_addr = img->uv_addr; @@ -775,15 +747,10 @@ static int rga2_get_img_info(rga_img_info_t *img, img->v_addr = img->uv_addr + (vir_w * vir_h) / 4; } - if (hdl) - ion_free(ion_client, hdl); - return ret; err_get_sg: - if (hdl) - ion_free(ion_client, hdl); - if (sgt && buf_gem_type_dma) + if (sgt) dma_buf_unmap_attachment(attach, sgt, DMA_BIDIRECTIONAL); if (attach) { dma_buf = attach->dmabuf; @@ -797,11 +764,9 @@ err_get_sg: static int rga2_get_dma_buf(struct rga2_req *req) { struct dma_buf *dma_buf = NULL; - u8 buf_gem_type_dma = 0; u8 mmu_flag = 0; int ret = 0; - buf_gem_type_dma = req->buf_type & RGA_BUF_GEM_TYPE_DMA; req->sg_src0 = NULL; req->sg_src1 = NULL; req->sg_dst = NULL; @@ -810,24 +775,24 @@ static int rga2_get_dma_buf(struct rga2_req *req) req->attach_dst = NULL; req->attach_src1 = NULL; mmu_flag = req->mmu_info.src0_mmu_flag; - ret = rga2_get_img_info(&req->src, mmu_flag, buf_gem_type_dma, - &req->sg_src0, &req->attach_src0); + ret = rga2_get_img_info(&req->src, mmu_flag, &req->sg_src0, + &req->attach_src0); if (ret) { pr_err("src:rga2_get_img_info fail\n"); goto err_src; } mmu_flag = req->mmu_info.dst_mmu_flag; - ret = rga2_get_img_info(&req->dst, mmu_flag, buf_gem_type_dma, - &req->sg_dst, &req->attach_dst); + ret = rga2_get_img_info(&req->dst, mmu_flag, &req->sg_dst, + &req->attach_dst); if (ret) { pr_err("dst:rga2_get_img_info fail\n"); goto err_dst; } mmu_flag = req->mmu_info.src1_mmu_flag; - ret = rga2_get_img_info(&req->src1, mmu_flag, buf_gem_type_dma, - &req->sg_src1, &req->attach_src1); + ret = rga2_get_img_info(&req->src1, mmu_flag, &req->sg_src1, + &req->attach_src1); if (ret) { pr_err("src1:rga2_get_img_info fail\n"); goto err_src1; @@ -836,7 +801,7 @@ static int rga2_get_dma_buf(struct rga2_req *req) return ret; err_src1: - if (buf_gem_type_dma && req->sg_dst && req->attach_dst) { + if (req->sg_dst && req->attach_dst) { dma_buf_unmap_attachment(req->attach_dst, req->sg_dst, DMA_BIDIRECTIONAL); dma_buf = req->attach_dst->dmabuf; @@ -844,7 +809,7 @@ err_src1: dma_buf_put(dma_buf); } err_dst: - if (buf_gem_type_dma && req->sg_src0 && req->attach_src0) { + if (req->sg_src0 && req->attach_src0) { dma_buf_unmap_attachment(req->attach_src0, req->sg_src0, DMA_BIDIRECTIONAL); dma_buf = req->attach_src0->dmabuf;