Here's another alternative change, which may be more thorough. It does seem to fix the issue, at least. The issue does indeed appear to be no-op plane changes sent to the cursor plane.
If anyone wants to propose style changes, and suggest a proper commit message, if this is indeed a welcome fix for the problem, please let me know. diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index c2726af6698e..b741939698e8 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -1087,17 +1087,22 @@ int drm_atomic_set_property(struct drm_atomic_state *state, } /* ask the driver if this non-primary plane is supported */ - if (plane->type != DRM_PLANE_TYPE_PRIMARY) { - ret = -EINVAL; + else if (plane->type != DRM_PLANE_TYPE_PRIMARY) { + ret = drm_atomic_plane_get_property(plane, plane_state, + prop, &old_val); + + if (ret || old_val != prop_value) { + ret = -EINVAL; - if (plane_funcs && plane_funcs->atomic_async_check) - ret = plane_funcs->atomic_async_check(plane, state, true); + if (plane_funcs && plane_funcs->atomic_async_check) + ret = plane_funcs->atomic_async_check(plane, state, true); - if (ret) { - drm_dbg_atomic(prop->dev, - "[PLANE:%d:%s] does not support async flips\n", - obj->id, plane->name); - break; + if (ret) { + drm_dbg_atomic(prop->dev, + "[PLANE:%d:%s] does not support async flips\n", + obj->id, plane->name); + break; + } } } }