Commit 92915da6 authored by John Keeping's avatar John Keeping Committed by Mark Yao

drm/rockchip: vop: fix crtc size in plane check

If the geometry of a crtc is changing in an atomic update then we must
validate the plane size against the new state of the crtc and not the
current size, otherwise if the crtc size is increasing the plane will be
cropped at the previous size and will not fill the screen.
Signed-off-by: default avatarJohn Keeping <john@metanate.com>
parent 4604202c
...@@ -549,6 +549,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane, ...@@ -549,6 +549,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state) struct drm_plane_state *state)
{ {
struct drm_crtc *crtc = state->crtc; struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
struct drm_framebuffer *fb = state->fb; struct drm_framebuffer *fb = state->fb;
struct vop_win *vop_win = to_vop_win(plane); struct vop_win *vop_win = to_vop_win(plane);
struct vop_plane_state *vop_plane_state = to_vop_plane_state(state); struct vop_plane_state *vop_plane_state = to_vop_plane_state(state);
...@@ -563,12 +564,13 @@ static int vop_plane_atomic_check(struct drm_plane *plane, ...@@ -563,12 +564,13 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
int max_scale = win->phy->scl ? FRAC_16_16(8, 1) : int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
DRM_PLANE_HELPER_NO_SCALING; DRM_PLANE_HELPER_NO_SCALING;
crtc = crtc ? crtc : plane->state->crtc;
/*
* Both crtc or plane->state->crtc can be null.
*/
if (!crtc || !fb) if (!crtc || !fb)
goto out_disable; goto out_disable;
crtc_state = drm_atomic_get_existing_crtc_state(state->state, crtc);
if (WARN_ON(!crtc_state))
return -EINVAL;
src->x1 = state->src_x; src->x1 = state->src_x;
src->y1 = state->src_y; src->y1 = state->src_y;
src->x2 = state->src_x + state->src_w; src->x2 = state->src_x + state->src_w;
...@@ -580,8 +582,8 @@ static int vop_plane_atomic_check(struct drm_plane *plane, ...@@ -580,8 +582,8 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
clip.x1 = 0; clip.x1 = 0;
clip.y1 = 0; clip.y1 = 0;
clip.x2 = crtc->mode.hdisplay; clip.x2 = crtc_state->adjusted_mode.hdisplay;
clip.y2 = crtc->mode.vdisplay; clip.y2 = crtc_state->adjusted_mode.vdisplay;
ret = drm_plane_helper_check_update(plane, crtc, state->fb, ret = drm_plane_helper_check_update(plane, crtc, state->fb,
src, dest, &clip, src, dest, &clip,
......
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