On Fri, Nov 15, 2019 at 04:07:18PM -0500, Lyude Paul wrote: > Since nv50_outp_atomic_check_view() can set crtc_state->mode_changed, we > probably should be calling it before handling any PBN changes. Just a > precaution. > > Signed-off-by: Lyude Paul > Fixes: 232c9eec417a ("drm/nouveau: Use atomic VCPI helpers for MST") > Cc: Ben Skeggs > Cc: Daniel Vetter > Cc: David Airlie > Cc: Jerry Zuo > Cc: Harry Wentland > Cc: Juston Li > Cc: Sean Paul > Cc: Laurent Pinchart > Cc: # v5.1+ > --- > drivers/gpu/drm/nouveau/dispnv50/disp.c | 44 ++++++++++++++----------- > 1 file changed, 24 insertions(+), 20 deletions(-) Looks reasonable: Reviewed-by: Thierry Reding > diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c > index 549486f1d937..6327aaf37c08 100644 > --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c > +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c > @@ -770,32 +770,36 @@ nv50_msto_atomic_check(struct drm_encoder *encoder, > struct nv50_mstm *mstm = mstc->mstm; > struct nv50_head_atom *asyh = nv50_head_atom(crtc_state); > int slots; > + int ret; > > - if (crtc_state->mode_changed || crtc_state->connectors_changed) { > - /* > - * When restoring duplicated states, we need to make sure that > - * the bw remains the same and avoid recalculating it, as the > - * connector's bpc may have changed after the state was > - * duplicated > - */ > - if (!state->duplicated) { > - const int bpp = connector->display_info.bpc * 3; > - const int clock = crtc_state->adjusted_mode.clock; > + ret = nv50_outp_atomic_check_view(encoder, crtc_state, conn_state, > + mstc->native); > + if (ret) > + return ret; > > - asyh->dp.pbn = drm_dp_calc_pbn_mode(clock, bpp); > - } > + if (!crtc_state->mode_changed && !crtc_state->connectors_changed) > + return 0; > > - slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, > - mstc->port, > - asyh->dp.pbn); > - if (slots < 0) > - return slots; > + /* > + * When restoring duplicated states, we need to make sure that the bw > + * remains the same and avoid recalculating it, as the connector's bpc > + * may have changed after the state was duplicated > + */ > + if (!state->duplicated) { > + const int bpp = connector->display_info.bpc * 3; > + const int clock = crtc_state->adjusted_mode.clock; > > - asyh->dp.tu = slots; > + asyh->dp.pbn = drm_dp_calc_pbn_mode(clock, bpp); > } > > - return nv50_outp_atomic_check_view(encoder, crtc_state, conn_state, > - mstc->native); > + slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, mstc->port, > + asyh->dp.pbn); > + if (slots < 0) > + return slots; > + > + asyh->dp.tu = slots; > + > + return 0; > } > > static void > -- > 2.21.0 > > _______________________________________________ > Nouveau mailing list > Nouveau@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/nouveau