Skip to content

Commit

Permalink
drm/i915: Properly clear crtc state when disabling it fully, again
Browse files Browse the repository at this point in the history
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 fff13e6 ("drm/i915:
Clear most of crtc state when disabling the crtc") but then
commit 19f65a3 ("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>
  • Loading branch information
Ville Syrjälä committed Feb 23, 2022
1 parent 7d70076 commit d95c256
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions drivers/gpu/drm/i915/display/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -7627,16 +7627,18 @@ 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;
}

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, new_crtc_state);
if (ret)
goto fail;
Expand Down

0 comments on commit d95c256

Please sign in to comment.