]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/i915: Factor out a helper to check/compute all the CRTC states
authorImre Deak <imre.deak@intel.com>
Thu, 21 Sep 2023 19:51:56 +0000 (22:51 +0300)
committerImre Deak <imre.deak@intel.com>
Thu, 28 Sep 2023 09:52:19 +0000 (12:52 +0300)
Factor out intel_atomic_check_config() to check and compute all the CRTC
states. This will be used by a follow up patch to recompute/check the
state until required by BW limitations between CRTCs.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230921195159.2646027-9-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_display.c

index e04374319e81c46db65f3c1b884b77c8096e4f43..49ead6efda312aa2fb87c0ca45335efebe656022 100644 (file)
@@ -6283,6 +6283,51 @@ static int intel_bigjoiner_add_affected_crtcs(struct intel_atomic_state *state)
        return 0;
 }
 
+static int intel_atomic_check_config(struct intel_atomic_state *state)
+{
+       struct drm_i915_private *i915 = to_i915(state->base.dev);
+       struct intel_crtc_state *new_crtc_state;
+       struct intel_crtc *crtc;
+       int ret;
+       int i;
+
+       ret = intel_bigjoiner_add_affected_crtcs(state);
+       if (ret)
+               return ret;
+
+       for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
+               if (!intel_crtc_needs_modeset(new_crtc_state)) {
+                       if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
+                               copy_bigjoiner_crtc_state_nomodeset(state, crtc);
+                       else
+                               intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc);
+                       continue;
+               }
+
+               if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
+                       drm_WARN_ON(&i915->drm, new_crtc_state->uapi.enable);
+                       continue;
+               }
+
+               ret = intel_crtc_prepare_cleared_state(state, crtc);
+               if (ret)
+                       break;
+
+               if (!new_crtc_state->hw.enable)
+                       continue;
+
+               ret = intel_modeset_pipe_config(state, crtc);
+               if (ret)
+                       break;
+
+               ret = intel_atomic_check_bigjoiner(state, crtc);
+               if (ret)
+                       break;
+       }
+
+       return ret;
+}
+
 /**
  * intel_atomic_check - validate state object
  * @dev: drm device
@@ -6327,41 +6372,10 @@ int intel_atomic_check(struct drm_device *dev,
                        return ret;
        }
 
-       ret = intel_bigjoiner_add_affected_crtcs(state);
+       ret = intel_atomic_check_config(state);
        if (ret)
                goto fail;
 
-       for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
-                                           new_crtc_state, i) {
-               if (!intel_crtc_needs_modeset(new_crtc_state)) {
-                       if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
-                               copy_bigjoiner_crtc_state_nomodeset(state, crtc);
-                       else
-                               intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc);
-                       continue;
-               }
-
-               if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
-                       drm_WARN_ON(&dev_priv->drm, new_crtc_state->uapi.enable);
-                       continue;
-               }
-
-               ret = intel_crtc_prepare_cleared_state(state, crtc);
-               if (ret)
-                       goto fail;
-
-               if (!new_crtc_state->hw.enable)
-                       continue;
-
-               ret = intel_modeset_pipe_config(state, crtc);
-               if (ret)
-                       goto fail;
-
-               ret = intel_atomic_check_bigjoiner(state, crtc);
-               if (ret)
-                       goto fail;
-       }
-
        for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
                                            new_crtc_state, i) {
                if (!intel_crtc_needs_modeset(new_crtc_state))