diff mbox series

[11/14] drm/i915/dp_mst: Queue modeset-retry after a failed payload BW allocation

Message ID 20240722165503.2084999-12-imre.deak@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915/dp_mst: Enable LT fallback for UHBR<->non-UHBR rates | expand

Commit Message

Imre Deak July 22, 2024, 4:55 p.m. UTC
If the MST payload allocation failed, enabling the output also failed
most probably, so send a uevent accordinly requesting the user to retry
the modeset. While at it remove the driver specific debug message, there
is already one printed by drm_dp_add_payload_part1().

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

Comments

Kandpal, Suraj July 24, 2024, 8:07 a.m. UTC | #1
> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Imre
> Deak
> Sent: Monday, July 22, 2024 10:25 PM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 11/14] drm/i915/dp_mst: Queue modeset-retry after a
> failed payload BW allocation
> 
> If the MST payload allocation failed, enabling the output also failed most
> probably, so send a uevent accordinly requesting the user to retry the
> modeset. While at it remove the driver specific debug message, there is
> already one printed by drm_dp_add_payload_part1().
> 
> Signed-off-by: Imre Deak <imre.deak@intel.com>

LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 27ce5c3f5951e..57f29906fa28f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1158,8 +1158,7 @@ static void intel_mst_pre_enable_dp(struct
> intel_atomic_state *state,
>  	ret = drm_dp_add_payload_part1(&intel_dp->mst_mgr, mst_state,
> 
> drm_atomic_get_mst_payload_state(mst_state, connector->port));
>  	if (ret < 0)
> -		drm_dbg_kms(&dev_priv->drm, "Failed to create MST
> payload for %s: %d\n",
> -			    connector->base.name, ret);
> +		intel_dp_queue_modeset_retry_for_link(state, &dig_port-
> >base,
> +pipe_config);
> 
>  	/*
>  	 * Before Gen 12 this is not done as part of @@ -1223,6 +1222,7
> @@ static void intel_mst_enable_dp(struct intel_atomic_state *state,
>  	enum transcoder trans = pipe_config->cpu_transcoder;
>  	bool first_mst_stream = intel_dp->active_mst_links == 1;
>  	struct intel_crtc *pipe_crtc;
> +	int ret;
> 
>  	drm_WARN_ON(&dev_priv->drm, pipe_config->has_pch_encoder);
> 
> @@ -1254,8 +1254,11 @@ static void intel_mst_enable_dp(struct
> intel_atomic_state *state,
>  	if (first_mst_stream)
>  		intel_ddi_wait_for_fec_status(encoder, pipe_config, true);
> 
> -	drm_dp_add_payload_part2(&intel_dp->mst_mgr,
> -
> drm_atomic_get_mst_payload_state(mst_state, connector->port));
> +	ret = drm_dp_add_payload_part2(&intel_dp->mst_mgr,
> +
> drm_atomic_get_mst_payload_state(mst_state,
> +
> 	connector->port));
> +	if (ret < 0)
> +		intel_dp_queue_modeset_retry_for_link(state, &dig_port-
> >base,
> +pipe_config);
> 
>  	if (DISPLAY_VER(dev_priv) >= 12)
>  		intel_de_rmw(dev_priv, hsw_chicken_trans_reg(dev_priv,
> trans),
> --
> 2.44.2
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 27ce5c3f5951e..57f29906fa28f 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1158,8 +1158,7 @@  static void intel_mst_pre_enable_dp(struct intel_atomic_state *state,
 	ret = drm_dp_add_payload_part1(&intel_dp->mst_mgr, mst_state,
 				       drm_atomic_get_mst_payload_state(mst_state, connector->port));
 	if (ret < 0)
-		drm_dbg_kms(&dev_priv->drm, "Failed to create MST payload for %s: %d\n",
-			    connector->base.name, ret);
+		intel_dp_queue_modeset_retry_for_link(state, &dig_port->base, pipe_config);
 
 	/*
 	 * Before Gen 12 this is not done as part of
@@ -1223,6 +1222,7 @@  static void intel_mst_enable_dp(struct intel_atomic_state *state,
 	enum transcoder trans = pipe_config->cpu_transcoder;
 	bool first_mst_stream = intel_dp->active_mst_links == 1;
 	struct intel_crtc *pipe_crtc;
+	int ret;
 
 	drm_WARN_ON(&dev_priv->drm, pipe_config->has_pch_encoder);
 
@@ -1254,8 +1254,11 @@  static void intel_mst_enable_dp(struct intel_atomic_state *state,
 	if (first_mst_stream)
 		intel_ddi_wait_for_fec_status(encoder, pipe_config, true);
 
-	drm_dp_add_payload_part2(&intel_dp->mst_mgr,
-				 drm_atomic_get_mst_payload_state(mst_state, connector->port));
+	ret = drm_dp_add_payload_part2(&intel_dp->mst_mgr,
+				       drm_atomic_get_mst_payload_state(mst_state,
+									connector->port));
+	if (ret < 0)
+		intel_dp_queue_modeset_retry_for_link(state, &dig_port->base, pipe_config);
 
 	if (DISPLAY_VER(dev_priv) >= 12)
 		intel_de_rmw(dev_priv, hsw_chicken_trans_reg(dev_priv, trans),