]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915: Properly clear crtc state when disabling it fully, again
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 17 Feb 2022 10:32:21 +0000 (12:32 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 23 Feb 2022 11:29:33 +0000 (13:29 +0200)
Currently we just leave the old gunk lying around in the crtc
state when userspace asks us to fully disable the crtc. That
doesn't match what the state would be had we never even enabled
the crtc in the first place. So let's make this consistent and
call intel_crtc_prepare_cleared_state() for disabled crtcs as well
(excluding bigjoiner slaves of course which have had their state
copied from the master).

I actually already did this once in commit 3778b1b99ef7 ("drm/i915:
Clear most of crtc state when disabling the crtc") but then
commit 4d4540cb4e1d ("drm/i915: Try to make bigjoiner work in atomic
check") undid it all :(

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220217103221.10405-5-ville.syrjala@linux.intel.com
Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>
drivers/gpu/drm/i915/display/intel_display.c

index 19f191b19979e4453012b9a1aaf36ada90567d8f..8e4e2fae2fb37cbfdc050d7a0d17930ee771132d 100644 (file)
@@ -7627,9 +7627,8 @@ static int intel_atomic_check(struct drm_device *dev,
                        continue;
                }
 
-               if (!new_crtc_state->uapi.enable) {
-                       if (!intel_crtc_is_bigjoiner_slave(new_crtc_state))
-                               intel_crtc_copy_uapi_to_hw_state_modeset(state, crtc);
+               if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
+                       drm_WARN_ON(&dev_priv->drm, new_crtc_state->uapi.enable);
                        continue;
                }
 
@@ -7637,6 +7636,9 @@ static int intel_atomic_check(struct drm_device *dev,
                if (ret)
                        goto fail;
 
+               if (!new_crtc_state->hw.enable)
+                       continue;
+
                ret = intel_modeset_pipe_config(state, new_crtc_state);
                if (ret)
                        goto fail;