]> git.itanic.dy.fi Git - linux-stable/blobdiff - drivers/gpu/drm/i915/display/intel_cdclk.c
drm/i915/cdclk: Fix CDCLK programming order when pipes are active
[linux-stable] / drivers / gpu / drm / i915 / display / intel_cdclk.c
index c985ebb6831a3755d14548d9925839cb426bb52d..6e36a15284537e1019671a852ba72033e4a4d651 100644 (file)
@@ -2521,7 +2521,7 @@ intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state)
        if (IS_DG2(i915))
                intel_cdclk_pcode_pre_notify(state);
 
-       if (pipe == INVALID_PIPE ||
+       if (new_cdclk_state->disable_pipes ||
            old_cdclk_state->actual.cdclk <= new_cdclk_state->actual.cdclk) {
                drm_WARN_ON(&i915->drm, !new_cdclk_state->base.changed);
 
@@ -2553,7 +2553,7 @@ intel_set_cdclk_post_plane_update(struct intel_atomic_state *state)
        if (IS_DG2(i915))
                intel_cdclk_pcode_post_notify(state);
 
-       if (pipe != INVALID_PIPE &&
+       if (!new_cdclk_state->disable_pipes &&
            old_cdclk_state->actual.cdclk > new_cdclk_state->actual.cdclk) {
                drm_WARN_ON(&i915->drm, !new_cdclk_state->base.changed);
 
@@ -3036,6 +3036,7 @@ static struct intel_global_state *intel_cdclk_duplicate_state(struct intel_globa
                return NULL;
 
        cdclk_state->pipe = INVALID_PIPE;
+       cdclk_state->disable_pipes = false;
 
        return &cdclk_state->base;
 }
@@ -3214,6 +3215,8 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
                if (ret)
                        return ret;
 
+               new_cdclk_state->disable_pipes = true;
+
                drm_dbg_kms(&dev_priv->drm,
                            "Modeset required for cdclk change\n");
        }