drm/atomic: Move enable/connector check up in check_modeset()
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Thu, 6 Apr 2017 11:19:02 +0000 (13:19 +0200)
committerSean Paul <seanpaul@chromium.org>
Thu, 6 Apr 2017 21:00:27 +0000 (17:00 -0400)
Now that handle_conflicting_encoders no longer touches active state,
so there's no need to do the check quite that late any more.

Doing it with all the other checks makes it a lot more clear what the
below block tries to accomplish, and this feels like a better place to
put the check.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1491477543-31257-4-git-send-email-maarten.lankhorst@linux.intel.com
drivers/gpu/drm/drm_atomic_helper.c

index 2d50682..ff3c6eb 100644 (file)
@@ -494,6 +494,9 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
        int i, ret;
 
        for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
+               bool has_connectors =
+                       !!new_crtc_state->connector_mask;
+
                if (!drm_mode_equal(&old_crtc_state->mode, &new_crtc_state->mode)) {
                        DRM_DEBUG_ATOMIC("[CRTC:%d:%s] mode changed\n",
                                         crtc->base.id, crtc->name);
@@ -521,6 +524,13 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
                                         crtc->base.id, crtc->name);
                        new_crtc_state->active_changed = true;
                }
+
+               if (new_crtc_state->enable != has_connectors) {
+                       DRM_DEBUG_ATOMIC("[CRTC:%d:%s] enabled/connectors mismatch\n",
+                                        crtc->base.id, crtc->name);
+
+                       return -EINVAL;
+               }
        }
 
        ret = handle_conflicting_encoders(state, false);
@@ -554,9 +564,6 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
         * crtc only changed its mode but has the same set of connectors.
         */
        for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
-               bool has_connectors =
-                       !!new_crtc_state->connector_mask;
-
                if (!drm_atomic_crtc_needs_modeset(new_crtc_state))
                        continue;
 
@@ -572,13 +579,6 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
                ret = drm_atomic_add_affected_planes(state, crtc);
                if (ret != 0)
                        return ret;
-
-               if (new_crtc_state->enable != has_connectors) {
-                       DRM_DEBUG_ATOMIC("[CRTC:%d:%s] enabled/connectors mismatch\n",
-                                        crtc->base.id, crtc->name);
-
-                       return -EINVAL;
-               }
        }
 
        return mode_fixup(state);