drm/rockchip: vop: round_up pitches to word align
authorMark Yao <mark.yao@rock-chips.com>
Thu, 1 Jun 2017 02:22:18 +0000 (10:22 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Thu, 1 Jun 2017 06:28:55 +0000 (14:28 +0800)
VOP pitch register is word align, need align to word.

VOP_WIN0_VIR:
  bit[31:16] win0_vir_stride_uv
    Number of words of Win0 uv Virtual width
  bit[15:0] win0_vir_width
    Number of words of Win0 yrgb Virtual width
    ARGB888 : win0_vir_width
    RGB888 : (win0_vir_width*3/4) + (win0_vir_width%3)
    RGB565 : ceil(win0_vir_width/2)
    YUV : ceil(win0_vir_width/4)

Change-Id: I89a74fae725e88cf618c5b02c45538419feba28f
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
drivers/gpu/drm/rockchip/rockchip_drm_vop.c

index 0999af2744c6678872c1b538e3773b027796f1c4..2d08be86cad90a5e90d5899663b924008d782955 100644 (file)
@@ -1221,10 +1221,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, DIV_ROUND_UP(fb->pitches[0], 4));
        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, DIV_ROUND_UP(fb->pitches[1], 4));
                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));