diff options
author | Mark yao <mark.yao@rock-chips.com> | 2017-07-31 05:49:50 -0400 |
---|---|---|
committer | Mark Yao <mark.yao@rock-chips.com> | 2017-08-04 03:39:20 -0400 |
commit | 79a0b149d4e3d45fc46673f4b29a157776c174e2 (patch) | |
tree | 9bbe45c7b37ca6455e5f2002fc4586af5dbdab49 | |
parent | 6f04f5925ce763e07cb405d1fbe97a53b6c026a3 (diff) |
drm/rockchip: vop: round_up pitches to word align
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)
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1501494591-7034-1-git-send-email-mark.yao@rock-chips.com
-rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 804d0ff53059..e205c5cf9019 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c | |||
@@ -761,7 +761,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane, | |||
761 | spin_lock(&vop->reg_lock); | 761 | spin_lock(&vop->reg_lock); |
762 | 762 | ||
763 | VOP_WIN_SET(vop, win, format, format); | 763 | VOP_WIN_SET(vop, win, format, format); |
764 | VOP_WIN_SET(vop, win, yrgb_vir, fb->pitches[0] >> 2); | 764 | VOP_WIN_SET(vop, win, yrgb_vir, DIV_ROUND_UP(fb->pitches[0], 4)); |
765 | VOP_WIN_SET(vop, win, yrgb_mst, dma_addr); | 765 | VOP_WIN_SET(vop, win, yrgb_mst, dma_addr); |
766 | if (is_yuv_support(fb->format->format)) { | 766 | if (is_yuv_support(fb->format->format)) { |
767 | int hsub = drm_format_horz_chroma_subsampling(fb->format->format); | 767 | int hsub = drm_format_horz_chroma_subsampling(fb->format->format); |
@@ -775,7 +775,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane, | |||
775 | offset += (src->y1 >> 16) * fb->pitches[1] / vsub; | 775 | offset += (src->y1 >> 16) * fb->pitches[1] / vsub; |
776 | 776 | ||
777 | dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1]; | 777 | dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1]; |
778 | VOP_WIN_SET(vop, win, uv_vir, fb->pitches[1] >> 2); | 778 | VOP_WIN_SET(vop, win, uv_vir, DIV_ROUND_UP(fb->pitches[1], 4)); |
779 | VOP_WIN_SET(vop, win, uv_mst, dma_addr); | 779 | VOP_WIN_SET(vop, win, uv_mst, dma_addr); |
780 | } | 780 | } |
781 | 781 | ||