From: Jacob Chen Date: Mon, 13 Mar 2017 10:09:56 +0000 (+0800) Subject: drm/rockchip: add support for src1 X-Git-Tag: firefly_0821_release~257 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=firefly-linux-kernel-4.4.55.git;a=commitdiff_plain;h=3a03958f9653c232ed1239691f412b856dc89a9b drm/rockchip: add support for src1 Although libdrm didn't implment src1, we should support it in driver in advance. Change-Id: I7da051d1376ded63750f3363f9dd37fe6937a81c Signed-off-by: Jacob Chen --- diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_rga.c b/drivers/gpu/drm/rockchip/rockchip_drm_rga.c index 139bf94a4fb0..29c4e9da5a34 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_rga.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_rga.c @@ -221,10 +221,12 @@ static int rga_check_reg_offset(struct device *dev, switch (reg) { case RGA_BUF_TYPE_GEMFD | RGA_DST_Y_RGB_BASE_ADDR: case RGA_BUF_TYPE_GEMFD | RGA_SRC_Y_RGB_BASE_ADDR: + case RGA_BUF_TYPE_GEMFD | RGA_SRC1_RGB_BASE_ADDR: break; case RGA_BUF_TYPE_USERPTR | RGA_DST_Y_RGB_BASE_ADDR: case RGA_BUF_TYPE_USERPTR | RGA_SRC_Y_RGB_BASE_ADDR: + case RGA_BUF_TYPE_USERPTR | RGA_SRC1_RGB_BASE_ADDR: goto err; default: @@ -327,6 +329,16 @@ static int rga_map_cmdlist_gem(struct rockchip_rga *rga, int index = cmdlist->last - 2 * (i + 1); switch (cmdlist->data[index]) { + case RGA_SRC1_RGB_BASE_ADDR | RGA_BUF_TYPE_GEMFD: + fd = cmdlist->data[index + 1]; + attach = rga_gem_buf_to_pages(rga, &mmu_pages, fd); + if (IS_ERR(attach)) + return PTR_ERR(attach); + + cmdlist->src1_attach = attach; + cmdlist->src1_mmu_pages = mmu_pages; + break; + case RGA_SRC_Y_RGB_BASE_ADDR | RGA_BUF_TYPE_GEMFD: fd = cmdlist->data[index + 1]; attach = rga_gem_buf_to_pages(rga, &mmu_pages, fd); @@ -366,6 +378,14 @@ static void rga_unmap_cmdlist_gem(struct rockchip_rga *rga, } node->cmdlist.src_attach = NULL; + attach = node->cmdlist.src1_attach; + if (attach) { + dma_buf = attach->dmabuf; + dma_buf_detach(dma_buf, attach); + dma_buf_put(dma_buf); + } + node->cmdlist.src1_attach = NULL; + attach = node->cmdlist.dst_attach; if (attach) { dma_buf = attach->dmabuf; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_rga.h b/drivers/gpu/drm/rockchip/rockchip_drm_rga.h index 49426eb0034c..67f86be98231 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_rga.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_rga.h @@ -14,6 +14,7 @@ struct rga_cmdlist { void *dst_mmu_pages; void *src1_mmu_pages; struct dma_buf_attachment *src_attach; + struct dma_buf_attachment *src1_attach; struct dma_buf_attachment *dst_attach; };