[PATCH 2/6] drm/i915/dp: Extract code to get slice and bpp to a separate function

Ankit Nautiyal ankit.k.nautiyal at intel.com
Tue Aug 12 04:14:23 UTC 2025


Refactor intel_dp_mode_valid() to use a function to get maximum slices
and compressed bpp.

Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 89 +++++++++++++++----------
 1 file changed, 55 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 1c2d4f172dfe..62f28f14423e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1407,6 +1407,54 @@ bool intel_dp_has_dsc(const struct intel_connector *connector)
 	return true;
 }
 
+static void get_dsc_slice_and_bpp(struct intel_connector *connector,
+				  const struct drm_display_mode *mode,
+				  int target_clock,
+				  int num_joined_pipes,
+				  enum intel_output_format output_format,
+				  int max_link_clock,
+				  int max_lanes,
+				  u16 *dsc_max_compressed_bpp,
+				  u8 *dsc_slice_count)
+{
+	struct intel_display *display = to_intel_display(connector);
+	struct intel_dp *intel_dp = intel_attached_dp(connector);
+	int pipe_bpp;
+
+	/*
+	 * TBD pass the connector BPC,
+	 * for now U8_MAX so that max BPC on that platform would be picked
+	 */
+	pipe_bpp = intel_dp_dsc_compute_max_bpp(connector, U8_MAX);
+
+	/*
+	 * Output bpp is stored in 6.4 format so right shift by 4 to get the
+	 * integer value since we support only integer values of bpp.
+	 */
+	if (intel_dp_is_edp(intel_dp)) {
+		*dsc_max_compressed_bpp = drm_edp_dsc_sink_output_bpp(connector->dp.dsc_dpcd) >> 4;
+		*dsc_slice_count = drm_dp_dsc_sink_max_slice_count(connector->dp.dsc_dpcd, true);
+
+		return;
+	}
+
+	if (drm_dp_sink_supports_fec(connector->dp.fec_capability)) {
+		*dsc_max_compressed_bpp =
+			intel_dp_dsc_get_max_compressed_bpp(display, max_link_clock,
+							    max_lanes, target_clock,
+							    mode->hdisplay, num_joined_pipes,
+							    output_format, pipe_bpp, 64);
+		*dsc_slice_count = intel_dp_dsc_get_slice_count(connector,
+								target_clock,
+								mode->hdisplay,
+								num_joined_pipes);
+		return;
+	}
+
+	*dsc_max_compressed_bpp = 0;
+	*dsc_slice_count = 0;
+}
+
 static enum drm_mode_status
 intel_dp_mode_valid(struct drm_connector *_connector,
 		    const struct drm_display_mode *mode)
@@ -1470,40 +1518,13 @@ intel_dp_mode_valid(struct drm_connector *_connector,
 					   intel_dp_mode_min_output_bpp(connector, mode));
 
 	if (intel_dp_has_dsc(connector)) {
-		int pipe_bpp;
-
-		/*
-		 * TBD pass the connector BPC,
-		 * for now U8_MAX so that max BPC on that platform would be picked
-		 */
-		pipe_bpp = intel_dp_dsc_compute_max_bpp(connector, U8_MAX);
-
-		/*
-		 * Output bpp is stored in 6.4 format so right shift by 4 to get the
-		 * integer value since we support only integer values of bpp.
-		 */
-		if (intel_dp_is_edp(intel_dp)) {
-			dsc_max_compressed_bpp =
-				drm_edp_dsc_sink_output_bpp(connector->dp.dsc_dpcd) >> 4;
-			dsc_slice_count =
-				drm_dp_dsc_sink_max_slice_count(connector->dp.dsc_dpcd,
-								true);
-		} else if (drm_dp_sink_supports_fec(connector->dp.fec_capability)) {
-			dsc_max_compressed_bpp =
-				intel_dp_dsc_get_max_compressed_bpp(display,
-								    max_link_clock,
-								    max_lanes,
-								    target_clock,
-								    mode->hdisplay,
-								    num_joined_pipes,
-								    output_format,
-								    pipe_bpp, 64);
-			dsc_slice_count =
-				intel_dp_dsc_get_slice_count(connector,
-							     target_clock,
-							     mode->hdisplay,
-							     num_joined_pipes);
-		}
+		get_dsc_slice_and_bpp(connector, mode, target_clock,
+				      num_joined_pipes,
+				      output_format,
+				      max_link_clock,
+				      max_lanes,
+				      &dsc_max_compressed_bpp,
+				      &dsc_slice_count);
 
 		dsc = dsc_max_compressed_bpp && dsc_slice_count;
 	}
-- 
2.45.2



More information about the Intel-xe mailing list