On Fri, Nov 05, 2021 at 11:21:56PM +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Currently we're only calling intel_update_active_dpll() for the > bigjoiner master pipe but not for the slave. With TC ports this > leads to the two pipes end up trying to use different PLLs > (TC vs. TBT). What's worse we're enabling the PLL that didn't get > intel_update_active_dpll() called on it at the spot where we > need the clocks turned on. So we turn on the wrong PLL and the > DDI is now trying to source its clock from the other PLL which is > still disabled. Naturally that doesn't end so well and the DDI > fails to start up. > > The state checker also gets a bit unhappy (which is a good thing) > when it notices that one of the pipes was using the wrong PLL. > > Let's fix this by remembering to call intel_update_active_dpll() > for both pipes. That should get the correct PLL turned on when > we need it, and the state checker should also be happy. > > Cc: Imre Deak <imre.deak@xxxxxxxxx> > Cc: Manasi Navare <manasi.d.navare@xxxxxxxxx> > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4434 > Fixes: e12d6218fda2 ("drm/i915: Reduce bigjoiner special casing") > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Reviewed-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_ddi.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > index 145d51ac43a3..f9e7e3d1c7d0 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > @@ -3140,8 +3140,14 @@ intel_ddi_update_prepare(struct intel_atomic_state *state, > > intel_tc_port_get_link(enc_to_dig_port(encoder), > required_lanes); > - if (crtc_state && crtc_state->hw.active) > + if (crtc_state && crtc_state->hw.active) { > + struct intel_crtc *slave_crtc = crtc_state->bigjoiner_linked_crtc; > + > intel_update_active_dpll(state, crtc, encoder); > + > + if (slave_crtc) > + intel_update_active_dpll(state, slave_crtc, encoder); > + } > } > > static void > -- > 2.32.0 >