Skip to content

Commit 45ad07c

Browse files
Andy Yanmmind
authored andcommitted
drm/rockchip: vop: fix format bpp calculation
We can't rely on cpp for bpp calculation as the cpp of some formats(DRM_FORMAT_YUV420_8BIT/10BIT, etc) is zero. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> Acked-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://patchwork.freedesktop.org/patch/msgid/20231018094210.2475771-1-andyshrk@163.com
1 parent 93e82bb commit 45ad07c

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

drivers/gpu/drm/rockchip/rockchip_drm_vop2.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,20 @@ static void vop2_win_disable(struct vop2_win *win)
282282
vop2_win_write(win, VOP2_WIN_CLUSTER_ENABLE, 0);
283283
}
284284

285+
static u32 vop2_get_bpp(const struct drm_format_info *format)
286+
{
287+
switch (format->format) {
288+
case DRM_FORMAT_YUV420_8BIT:
289+
return 12;
290+
case DRM_FORMAT_YUV420_10BIT:
291+
return 15;
292+
case DRM_FORMAT_VUY101010:
293+
return 30;
294+
default:
295+
return drm_format_info_bpp(format, 0);
296+
}
297+
}
298+
285299
static enum vop2_data_format vop2_convert_format(u32 format)
286300
{
287301
switch (format) {
@@ -482,7 +496,7 @@ static u32 vop2_afbc_transform_offset(struct drm_plane_state *pstate,
482496
{
483497
struct drm_rect *src = &pstate->src;
484498
struct drm_framebuffer *fb = pstate->fb;
485-
u32 bpp = fb->format->cpp[0] * 8;
499+
u32 bpp = vop2_get_bpp(fb->format);
486500
u32 vir_width = (fb->pitches[0] << 3) / bpp;
487501
u32 width = drm_rect_width(src) >> 16;
488502
u32 height = drm_rect_height(src) >> 16;
@@ -1080,7 +1094,7 @@ static void vop2_plane_atomic_update(struct drm_plane *plane,
10801094
struct drm_display_mode *adjusted_mode = &crtc->state->adjusted_mode;
10811095
struct vop2 *vop2 = win->vop2;
10821096
struct drm_framebuffer *fb = pstate->fb;
1083-
u32 bpp = fb->format->cpp[0] * 8;
1097+
u32 bpp = vop2_get_bpp(fb->format);
10841098
u32 actual_w, actual_h, dsp_w, dsp_h;
10851099
u32 act_info, dsp_info;
10861100
u32 format;

0 commit comments

Comments
 (0)