From f860865cf64640f8e6544fc7fa0885d45fa86750 Mon Sep 17 00:00:00 2001 From: Mark Yao Date: Mon, 28 Aug 2017 11:43:31 +0800 Subject: [PATCH] HACK: drm/rockchip: vop: skip lines if image too large Change-Id: I1673964e9171d64c16e88bc670f0579be6443109 Signed-off-by: Mark Yao --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 555f6c6..bc1f7bb 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1219,6 +1219,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane, int ymirror, xmirror; uint32_t val; bool rb_swap; + int skip_lines = 0; /* * can't update plane when vop is disabled. @@ -1231,8 +1232,15 @@ static void vop_plane_atomic_update(struct drm_plane *plane, return; } + /* + * FIXME: force skip lines if image too big. + */ + if (actual_w >= 3840 && actual_h >= 2160) + skip_lines = 1; + WARN_ON(skip_lines > 2); + actual_w = drm_rect_width(src) >> 16; - actual_h = drm_rect_height(src) >> 16; + actual_h = drm_rect_height(src) >> (16 + skip_lines); act_info = (actual_h - 1) << 16 | ((actual_w - 1) & 0xffff); dsp_info = (drm_rect_height(dest) - 1) << 16; @@ -1254,10 +1262,10 @@ static void vop_plane_atomic_update(struct drm_plane *plane, VOP_WIN_SET(vop, win, xmirror, xmirror); VOP_WIN_SET(vop, win, ymirror, ymirror); VOP_WIN_SET(vop, win, format, vop_plane_state->format); - VOP_WIN_SET(vop, win, yrgb_vir, fb->pitches[0] >> 2); + VOP_WIN_SET(vop, win, yrgb_vir, fb->pitches[0] >> (2 - skip_lines)); VOP_WIN_SET(vop, win, yrgb_mst, vop_plane_state->yrgb_mst); if (is_yuv_support(fb->pixel_format)) { - VOP_WIN_SET(vop, win, uv_vir, fb->pitches[1] >> 2); + VOP_WIN_SET(vop, win, uv_vir, fb->pitches[1] >> (2 - skip_lines)); VOP_WIN_SET(vop, win, uv_mst, vop_plane_state->uv_mst); } VOP_WIN_SET(vop, win, fmt_10, is_yuv_10bit(fb->pixel_format)); -- 2.7.4