]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/cdclk: Handle the force_min_cdclk state locking in intel_cdclk_atomic_check()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 23 Sep 2025 17:19:30 +0000 (20:19 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 10 Oct 2025 23:50:15 +0000 (02:50 +0300)
Clean up the mess inside intel_modeset_calc_cdclk() a bit by
moving the intel_atomic_lock_global_state() for force_min_cdclk
changes into intel_cdclk_atomic_check().

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250923171943.7319-9-ville.syrjala@linux.intel.com
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
drivers/gpu/drm/i915/display/intel_cdclk.c

index ce3d47b6b7aae2dcecc97980d0284d37b48353b5..0ef87e0aaeb1ad5bb05e0b24834ec5a1d38882c5 100644 (file)
@@ -3229,7 +3229,7 @@ int intel_cdclk_atomic_check(struct intel_atomic_state *state,
                             bool *need_cdclk_calc)
 {
        const struct intel_cdclk_state *old_cdclk_state;
-       const struct intel_cdclk_state *new_cdclk_state;
+       struct intel_cdclk_state *new_cdclk_state;
        struct intel_plane_state __maybe_unused *plane_state;
        struct intel_plane *plane;
        int ret;
@@ -3258,8 +3258,13 @@ int intel_cdclk_atomic_check(struct intel_atomic_state *state,
        new_cdclk_state = intel_atomic_get_new_cdclk_state(state);
 
        if (new_cdclk_state &&
-           old_cdclk_state->force_min_cdclk != new_cdclk_state->force_min_cdclk)
+           old_cdclk_state->force_min_cdclk != new_cdclk_state->force_min_cdclk) {
+               ret = intel_atomic_lock_global_state(&new_cdclk_state->base);
+               if (ret)
+                       return ret;
+
                *need_cdclk_calc = true;
+       }
 
        return 0;
 }
@@ -3332,8 +3337,7 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
                ret = intel_atomic_serialize_global_state(&new_cdclk_state->base);
                if (ret)
                        return ret;
-       } else if (old_cdclk_state->force_min_cdclk != new_cdclk_state->force_min_cdclk ||
-                  intel_cdclk_changed(&old_cdclk_state->logical,
+       } else if (intel_cdclk_changed(&old_cdclk_state->logical,
                                       &new_cdclk_state->logical)) {
                ret = intel_atomic_lock_global_state(&new_cdclk_state->base);
                if (ret)