Skip to content

Commit 45dfbd9

Browse files
ideakjlahtine-intel
authored andcommitted
drm/i915: Fix PIPEDMC disabling for a bigjoiner configuration
For a bigjoiner configuration display->crtc_disable() will be called first for the slave CRTCs and then for the master CRTC. However slave CRTCs will be actually disabled only after the master CRTC is disabled (from the encoder disable hooks called with the master CRTC state). Hence the slave PIPEDMCs can be disabled only after the master CRTC is disabled, make this so. intel_encoders_post_pll_disable() must be called only for the master CRTC, as for the other two encoder disable hooks. While at it fix this up as well. This didn't cause a problem, since intel_encoders_post_pll_disable() will call the corresponding hook only for an encoder/connector connected to the given CRTC, however slave CRTCs will have no associated encoder/connector. Fixes: 3af2ff0 ("drm/i915: Enable a PIPEDMC whenever its corresponding pipe is enabled") Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230510103131.1618266-2-imre.deak@intel.com (cherry picked from commit 7eeef32) Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
1 parent 44c026a commit 45dfbd9

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

drivers/gpu/drm/i915/display/intel_display.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,9 +1851,17 @@ static void hsw_crtc_disable(struct intel_atomic_state *state,
18511851

18521852
intel_disable_shared_dpll(old_crtc_state);
18531853

1854-
intel_encoders_post_pll_disable(state, crtc);
1854+
if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
1855+
struct intel_crtc *slave_crtc;
1856+
1857+
intel_encoders_post_pll_disable(state, crtc);
18551858

1856-
intel_dmc_disable_pipe(i915, crtc->pipe);
1859+
intel_dmc_disable_pipe(i915, crtc->pipe);
1860+
1861+
for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc,
1862+
intel_crtc_bigjoiner_slave_pipes(old_crtc_state))
1863+
intel_dmc_disable_pipe(i915, slave_crtc->pipe);
1864+
}
18571865
}
18581866

18591867
static void i9xx_pfit_enable(const struct intel_crtc_state *crtc_state)

0 commit comments

Comments
 (0)