Grabbing crtc state from atomic state is a lot more involved,
and make sure connectors are added before calling this function.

Move check_digital_port_conflicts to intel_modeset_checks,
it's only useful to check it on a modeset.

Signed-off-by: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 39 ++++++++++++++----------------------
 1 file changed, 15 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index a1f99a32bddb..0f031658a297 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11748,10 +11748,9 @@ clear_intel_crtc_state(struct intel_crtc_state 
*crtc_state)
 
 static int
 intel_modeset_pipe_config(struct drm_crtc *crtc,
-                         struct drm_atomic_state *state)
+                         struct intel_crtc_state *pipe_config)
 {
-       struct drm_crtc_state *crtc_state;
-       struct intel_crtc_state *pipe_config;
+       struct drm_atomic_state *state = pipe_config->base.state;
        struct intel_encoder *encoder;
        struct drm_connector *connector;
        struct drm_connector_state *connector_state;
@@ -11764,26 +11763,6 @@ intel_modeset_pipe_config(struct drm_crtc *crtc,
                return -EINVAL;
        }
 
-       if (!check_digital_port_conflicts(state)) {
-               DRM_DEBUG_KMS("rejecting conflicting digital port 
configuration\n");
-               return -EINVAL;
-       }
-
-       crtc_state = drm_atomic_get_existing_crtc_state(state, crtc);
-       if (WARN_ON(!crtc_state))
-               return -EINVAL;
-
-       pipe_config = to_intel_crtc_state(crtc_state);
-
-       /*
-        * XXX: Add all connectors to make the crtc state match the encoders.
-        */
-       if (!needs_modeset(&pipe_config->base)) {
-               ret = drm_atomic_add_affected_connectors(state, crtc);
-               if (ret)
-                       return ret;
-       }
-
        clear_intel_crtc_state(pipe_config);
 
        pipe_config->cpu_transcoder =
@@ -12614,6 +12593,11 @@ static int intel_modeset_checks(struct 
drm_atomic_state *state)
        struct drm_device *dev = state->dev;
        int ret;
 
+       if (!check_digital_port_conflicts(state)) {
+               DRM_DEBUG_KMS("rejecting conflicting digital port 
configuration\n");
+               return -EINVAL;
+       }
+
        /*
         * See if the config requires any additional preparation, e.g.
         * to adjust global state with pipes off.  We need to do this
@@ -12656,7 +12640,14 @@ intel_modeset_compute_config(struct drm_atomic_state 
*state)
                if (!crtc_state->enable)
                        continue;
 
-               ret = intel_modeset_pipe_config(crtc, state);
+               if (!needs_modeset(crtc_state)) {
+                       ret = drm_atomic_add_affected_connectors(state, crtc);
+                       if (ret)
+                               return ret;
+               }
+
+               ret = intel_modeset_pipe_config(crtc,
+                                       to_intel_crtc_state(crtc_state));
                if (ret)
                        return ret;
 
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to