[PATCH 2/4] drm/i915: Fix intel_dp_mst_compute_link_config
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. Reviewed-by: Vinod Govindapillai Signed-off-by: Stanislav Lisovskiy --- 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 5adfd226d6c4..8c89570e76f8 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c @@ -59,6 +59,7 @@ static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder, const struct drm_display_mode *adjusted_mode = _state->hw.adjusted_mode; int bpp, slots = -EINVAL; + int ret = 0; mst_state = drm_atomic_get_mst_topology_state(state, _dp->mst_mgr); if (IS_ERR(mst_state)) @@ -84,10 +85,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(>drm, "failed finding vcpi slots:%d\n", slots); -- 2.37.3
[PATCH 2/4] drm/i915: Fix intel_dp_mst_compute_link_config
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. Reviewed-by: Vinod Govindapillai Signed-off-by: Stanislav Lisovskiy --- 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 7713c19042f3..24d6a287a6e3 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, _state->hw.adjusted_mode; bool constant_n = drm_dp_has_quirk(_dp->desc, DP_DPCD_QUIRK_CONSTANT_N); int bpp, slots = -EINVAL; + int ret = 0; mst_state = drm_atomic_get_mst_topology_state(state, _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(>drm, "failed finding vcpi slots:%d\n", slots); -- 2.37.3
[PATCH 2/4] drm/i915: Fix intel_dp_mst_compute_link_config
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. Reviewed-by: Vinod Govindapillai Signed-off-by: Stanislav Lisovskiy --- 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, _state->hw.adjusted_mode; bool constant_n = drm_dp_has_quirk(_dp->desc, DP_DPCD_QUIRK_CONSTANT_N); int bpp, slots = -EINVAL; + int ret = 0; mst_state = drm_atomic_get_mst_topology_state(state, _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(>drm, "failed finding vcpi slots:%d\n", slots); -- 2.37.3
Re: [PATCH 2/4] drm/i915: Fix intel_dp_mst_compute_link_config
Reviewed-by: Vinod Govindapillai 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 > --- > 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, > _state->hw.adjusted_mode; > bool constant_n = drm_dp_has_quirk(_dp->desc, > DP_DPCD_QUIRK_CONSTANT_N); > int bpp, slots = -EINVAL; > + int ret = 0; > > mst_state = drm_atomic_get_mst_topology_state(state, > _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(>drm, "failed finding vcpi slots:%d\n", > slots);
[PATCH 2/4] drm/i915: Fix intel_dp_mst_compute_link_config
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 --- 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, _state->hw.adjusted_mode; bool constant_n = drm_dp_has_quirk(_dp->desc, DP_DPCD_QUIRK_CONSTANT_N); int bpp, slots = -EINVAL; + int ret = 0; mst_state = drm_atomic_get_mst_topology_state(state, _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(>drm, "failed finding vcpi slots:%d\n", slots); -- 2.24.1.485.gad05a3d8e5
[PATCH 2/4] drm/i915: Fix intel_dp_mst_compute_link_config
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 --- 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 14d2a64193b2..c61fd8b39c27 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c @@ -59,6 +59,7 @@ static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder, _state->hw.adjusted_mode; bool constant_n = drm_dp_has_quirk(_dp->desc, DP_DPCD_QUIRK_CONSTANT_N); int bpp, slots = -EINVAL; + int ret = 0; crtc_state->lane_count = limits->max_lane_count; crtc_state->port_clock = limits->max_rate; @@ -78,10 +79,21 @@ static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder, crtc_state->lane_count)); 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(>drm, "failed finding vcpi slots:%d\n", slots); -- 2.24.1.485.gad05a3d8e5