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 04:09:41 -0400 |
commit | da709a7b27082421289e264f3491a8f43cd4d2f7 (patch) | |
tree | 8df7be0945a6bf80e8967b548fd875cadf09b14f | |
parent | 0b12e9c0e4d5138289a7a9d875ce655842b60b03 (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 a1017a713edf..e59ef93bcd74 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c | |||
@@ -757,7 +757,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane, | |||
757 | spin_lock(&vop->reg_lock); | 757 | spin_lock(&vop->reg_lock); |
758 | 758 | ||
759 | VOP_WIN_SET(vop, win, format, format); | 759 | VOP_WIN_SET(vop, win, format, format); |
760 | VOP_WIN_SET(vop, win, yrgb_vir, fb->pitches[0] >> 2); | 760 | VOP_WIN_SET(vop, win, yrgb_vir, DIV_ROUND_UP(fb->pitches[0], 4)); |
761 | VOP_WIN_SET(vop, win, yrgb_mst, dma_addr); | 761 | VOP_WIN_SET(vop, win, yrgb_mst, dma_addr); |
762 | if (is_yuv_support(fb->format->format)) { | 762 | if (is_yuv_support(fb->format->format)) { |
763 | int hsub = drm_format_horz_chroma_subsampling(fb->format->format); | 763 | int hsub = drm_format_horz_chroma_subsampling(fb->format->format); |
@@ -771,7 +771,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane, | |||
771 | offset += (src->y1 >> 16) * fb->pitches[1] / vsub; | 771 | offset += (src->y1 >> 16) * fb->pitches[1] / vsub; |
772 | 772 | ||
773 | dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1]; | 773 | dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1]; |
774 | VOP_WIN_SET(vop, win, uv_vir, fb->pitches[1] >> 2); | 774 | VOP_WIN_SET(vop, win, uv_vir, DIV_ROUND_UP(fb->pitches[1], 4)); |
775 | VOP_WIN_SET(vop, win, uv_mst, dma_addr); | 775 | VOP_WIN_SET(vop, win, uv_mst, dma_addr); |
776 | } | 776 | } |
777 | 777 | ||