From d7b8d42d2f95aebda4a744d2053410eb4834da0a Mon Sep 17 00:00:00 2001 From: Mark Yao Date: Thu, 9 Nov 2017 20:05:15 +0800 Subject: [PATCH] drm/rockchip: vop: enable axi outstanding function On some scenes, win lite area may flush with short width. As the Technical Reference Manual description, need enable axi outstanding function if use IOMMU. From testing, after setting axi outstanding max number to 30 solve windows flush problem. Change-Id: Id4ea7b5f5dae334e88cf1fb106c0b7bc6af9b8d0 Signed-off-by: Mark Yao --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 2 ++ drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 2 ++ drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index c21df228a9c0..6c389eb8d7cd 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -990,6 +990,8 @@ static void vop_initial(struct drm_crtc *crtc) VOP_CTRL_SET(vop, global_regdone_en, 1); VOP_CTRL_SET(vop, dsp_blank, 0); + VOP_CTRL_SET(vop, axi_outstanding_max_num, 30); + VOP_CTRL_SET(vop, axi_max_outstanding_en, 1); /* * restore the lut table. diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index ceb8467a41b3..e483186e01c4 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -94,6 +94,8 @@ struct vop_csc { struct vop_ctrl { struct vop_reg version; struct vop_reg standby; + struct vop_reg axi_outstanding_max_num; + struct vop_reg axi_max_outstanding_en; struct vop_reg htotal_pw; struct vop_reg hact_st_end; struct vop_reg vtotal_pw; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index c1cd1925ccd1..39426b83b1e2 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -171,6 +171,8 @@ static const struct vop_win_phy *rk3288_area_data[] = { static const struct vop_ctrl rk3288_ctrl_data = { .version = VOP_REG(RK3288_VERSION_INFO, 0xffff, 16), .standby = VOP_REG(RK3288_SYS_CTRL, 0x1, 22), + .axi_outstanding_max_num = VOP_REG(RK3288_SYS_CTRL1, 0x1f, 13), + .axi_max_outstanding_en = VOP_REG(RK3288_SYS_CTRL1, 0x1, 12), .htotal_pw = VOP_REG(RK3288_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), .hact_st_end = VOP_REG(RK3288_DSP_HACT_ST_END, 0x1fff1fff, 0), .vtotal_pw = VOP_REG(RK3288_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), @@ -601,6 +603,8 @@ static const struct vop_data rk322x_vop = { static const struct vop_ctrl rk3328_ctrl_data = { .standby = VOP_REG(RK3328_SYS_CTRL, 0x1, 22), + .axi_outstanding_max_num = VOP_REG(RK3328_SYS_CTRL1, 0x1f, 13), + .axi_max_outstanding_en = VOP_REG(RK3328_SYS_CTRL1, 0x1, 12), .auto_gate_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 23), .htotal_pw = VOP_REG(RK3328_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), .hact_st_end = VOP_REG(RK3328_DSP_HACT_ST_END, 0x1fff1fff, 0),