drm/i915: Use crtc state in intel_modeset_pipe_config
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Mon, 15 Jun 2015 10:33:38 +0000 (12:33 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 22 Jun 2015 12:17:55 +0000 (14:17 +0200)
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.lankhorst@linux.intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Tested-by(IVB): Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_display.c

index 98bb15ac4c663e80beac51b5cc5437936f9e2c3b..a483a65f07575b09cef499486864b44ab4a0c8d8 100644 (file)
@@ -12056,10 +12056,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;
@@ -12072,26 +12071,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 =
@@ -12919,6 +12898,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
@@ -12965,7 +12949,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;