[PATCH] drm/atomic: Check old_plane_state->crtc in drm_atomic_helper_async_check()

Boris Brezillon boris.brezillon at bootlin.com
Mon Jul 23 13:43:54 UTC 2018


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")
Signed-off-by: Boris Brezillon <boris.brezillon at bootlin.com>
---
Hello,

As discussed on IRC, I'm not sure this "plane should already be enabled
and assigned to the same CRTC to allow async updates" limitation
applies to all drivers, but it's required for VC4 to work properly.

Just let me know if you think I should move this check to
vc4_plane_atomic_async_check().

Thanks,

Boris
---
 drivers/gpu/drm/drm_atomic_helper.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 866a2cc72ef6..f7ccfebd3ca8 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -1555,7 +1555,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;
-- 
2.14.1



More information about the dri-devel mailing list