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;
+                                       }
                                }
                        }
                }

Reply via email to