drm/atomic: Check old_plane_state->crtc in drm_atomic_helper_async_check()
authorBoris Brezillon <boris.brezillon@bootlin.com>
Tue, 24 Jul 2018 13:32:15 +0000 (15:32 +0200)
committerBoris Brezillon <boris.brezillon@bootlin.com>
Wed, 25 Jul 2018 19:11:02 +0000 (21:11 +0200)
Async plane update is supposed to work only when updating the FB or FB
position of an already enabled plane. That does not apply to requests
where the plane was previously disabled or assigned to a different
CTRC.

Check old_plane_state->crtc value to make sure async plane update is
allowed.

Fixes: fef9df8b5945 ("drm/atomic: initial support for asynchronous plane update")
Cc: <stable@vger.kernel.org>
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20180724133215.31917-1-boris.brezillon@bootlin.com
drivers/gpu/drm/drm_atomic_helper.c

index 130da5195f3b622062c274507eb0727c76601473..ff858b890045490a7aafb70204aaf52f4b3e0d65 100644 (file)
@@ -1527,7 +1527,8 @@ int drm_atomic_helper_async_check(struct drm_device *dev,
        if (n_planes != 1)
                return -EINVAL;
 
-       if (!new_plane_state->crtc)
+       if (!new_plane_state->crtc ||
+           old_plane_state->crtc != new_plane_state->crtc)
                return -EINVAL;
 
        funcs = plane->helper_private;