drm/i915: Fix IPS disable in intel_plane_disable_noatomic()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 9 Feb 2022 11:35:25 +0000 (13:35 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 9 Feb 2022 19:52:04 +0000 (21:52 +0200)
IPS must be disabled prior to disabling the last plane (excluding
the cursor). Make the code do that instead of assuming the primary
plane would be the last one. This is probably 100% theoretical
as the BIOS should never light up the other planes anyway. But
no harm in making the code totally consistent.

Also let's update the ips_enabled flag in the crtc state afterwards
so that the first atomic commit has accurate information about
the state of IPS.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220209113526.7595-6-ville.syrjala@linux.intel.com
Acked-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_display.c

index 06a0baba493ea450738107cbfec97bd55b0ab162..0443ef3671debeb134268a89acf4903648c2813a 100644 (file)
@@ -753,9 +753,11 @@ void intel_plane_disable_noatomic(struct intel_crtc *crtc,
        crtc_state->data_rate[plane->id] = 0;
        crtc_state->min_cdclk[plane->id] = 0;
 
-       if (plane->id == PLANE_PRIMARY &&
-           hsw_ips_disable(crtc_state))
+       if ((crtc_state->active_planes & ~BIT(PLANE_CURSOR)) == 0 &&
+           hsw_ips_disable(crtc_state)) {
+               crtc_state->ips_enabled = false;
                intel_crtc_wait_for_next_vblank(crtc);
+       }
 
        /*
         * Vblank time updates from the shadow to live plane control register