Reviewed-by: Vinod Govindapillai <vinod.govindapillai@xxxxxxxxx> On Mon, 2022-08-29 at 12:58 +0300, Stanislav Lisovskiy wrote: > We currently always exit that bpp loop because drm_dp_atomic_find_vcpi_slots > doesn't care if we actually can fit those or not. > I think that wasn't the initial intention here, especially when > we keep trying with lower bpps, we are supposed to keep trying > until we actually find some _working_ configuration, which isn't the > case here. > So added that drm_dp_mst_check here, so that we can make sure > that try all the bpps before we fail. > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_dp_mst.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c > b/drivers/gpu/drm/i915/display/intel_dp_mst.c > index 13abe2b2170e..c4f92edbdd08 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > @@ -60,6 +60,7 @@ static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder, > &crtc_state->hw.adjusted_mode; > bool constant_n = drm_dp_has_quirk(&intel_dp->desc, DP_DPCD_QUIRK_CONSTANT_N); > int bpp, slots = -EINVAL; > + int ret = 0; > > mst_state = drm_atomic_get_mst_topology_state(state, &intel_dp->mst_mgr); > if (IS_ERR(mst_state)) > @@ -85,10 +86,21 @@ static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder, > connector->port, crtc_state->pbn); > if (slots == -EDEADLK) > return slots; > - if (slots >= 0) > - break; > + if (slots >= 0) { > + ret = drm_dp_mst_atomic_check(state); > + /* > + * If we got slots >= 0 and we can fit those based on check > + * then we can exit the loop. Otherwise keep trying. > + */ > + if (!ret) > + break; > + } > } > > + /* Despite slots are non-zero, we still failed the atomic check */ > + if (ret && slots >= 0) > + slots = ret; > + > if (slots < 0) { > drm_dbg_kms(&i915->drm, "failed finding vcpi slots:%d\n", > slots);