Commit 5fb57ab3 authored by Philipp Zabel's avatar Philipp Zabel

drm/imx: ipuv3-plane: make sure x/y offsets are even in case of chroma subsampling

Odd x/y offsets are not allowed for horizontally/vertically chroma
subsampled planar YUV formats.
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Acked-by: default avatarLiu Ying <gnuiyl@gmail.com>
parent e73aca51
...@@ -259,6 +259,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, ...@@ -259,6 +259,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *fb = state->fb; struct drm_framebuffer *fb = state->fb;
struct drm_framebuffer *old_fb = old_state->fb; struct drm_framebuffer *old_fb = old_state->fb;
unsigned long eba, ubo, vbo, old_ubo, old_vbo; unsigned long eba, ubo, vbo, old_ubo, old_vbo;
int hsub, vsub;
/* Ok to disable */ /* Ok to disable */
if (!fb) if (!fb)
...@@ -372,6 +373,16 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, ...@@ -372,6 +373,16 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
if (old_fb && old_fb->pitches[1] != fb->pitches[1]) if (old_fb && old_fb->pitches[1] != fb->pitches[1])
crtc_state->mode_changed = true; crtc_state->mode_changed = true;
/*
* The x/y offsets must be even in case of horizontal/vertical
* chroma subsampling.
*/
hsub = drm_format_horz_chroma_subsampling(fb->pixel_format);
vsub = drm_format_vert_chroma_subsampling(fb->pixel_format);
if (((state->src_x >> 16) & (hsub - 1)) ||
((state->src_y >> 16) & (vsub - 1)))
return -EINVAL;
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment