Message ID | 20220829095832.21770-3-stanislav.lisovskiy@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add DP MST DSC support to i915 | expand |
Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com> 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@intel.com> > --- > 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);
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);
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@intel.com> --- drivers/gpu/drm/i915/display/intel_dp_mst.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)