All of lore.kernel.org
 help / color / mirror / Atom feed
From: Imre Deak <imre.deak@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 06/11] drm/i915/dp_mst: Sanitize calculating the DSC DPT bpp limit
Date: Wed, 20 Mar 2024 22:11:46 +0200	[thread overview]
Message-ID: <20240320201152.3487892-7-imre.deak@intel.com> (raw)
In-Reply-To: <20240320201152.3487892-1-imre.deak@intel.com>

Instead of checking each compressed bpp value against the maximum
DSC/DPT bpp, simplify things by calculating the maximum bpp upfront and
limiting the range of bpps looped over using this maximum.

While at it add a comment about the origin of the DSC/DPT bpp limit.

Bspec: 49259, 68912

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

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 40660dc5edb45..516b00f791420 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -51,27 +51,24 @@
 #include "intel_vdsc.h"
 #include "skl_scaler.h"
 
-static int intel_dp_mst_check_constraints(struct drm_i915_private *i915, int bpp,
-					  const struct drm_display_mode *adjusted_mode,
-					  struct intel_crtc_state *crtc_state,
-					  bool dsc)
+static int intel_dp_mst_max_dpt_bpp(const struct intel_crtc_state *crtc_state,
+				    bool dsc)
 {
-	if (intel_dp_is_uhbr(crtc_state) && DISPLAY_VER(i915) < 20 && dsc) {
-		int output_bpp = bpp;
-		int symbol_clock = intel_dp_link_symbol_clock(crtc_state->port_clock);
-		int available_bw = mul_u32_u32(symbol_clock * 72,
-					       drm_dp_bw_channel_coding_efficiency(true)) /
-				   1000000;
+	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
+	const struct drm_display_mode *adjusted_mode =
+		&crtc_state->hw.adjusted_mode;
 
-		if (output_bpp * adjusted_mode->crtc_clock >
-		    available_bw) {
-			drm_dbg_kms(&i915->drm, "UHBR check failed(required bw %d available %d)\n",
-				    output_bpp * adjusted_mode->crtc_clock, available_bw);
-			return -EINVAL;
-		}
-	}
+	if (!intel_dp_is_uhbr(crtc_state) || DISPLAY_VER(i915) >= 20 || !dsc)
+		return INT_MAX;
 
-	return 0;
+	/*
+	 * DSC->DPT interface width:
+	 *   ICL-MTL: 72 bits (each branch has 72 bits, only left branch is used)
+	 *   LNL+:    144 bits (not a bottleneck in any config)
+	 */
+	return div64_u64(mul_u32_u32(intel_dp_link_symbol_clock(crtc_state->port_clock) * 72,
+				     drm_dp_bw_channel_coding_efficiency(true)),
+			 mul_u32_u32(adjusted_mode->crtc_clock, 1000000));
 }
 
 static int intel_dp_mst_bw_overhead(const struct intel_crtc_state *crtc_state,
@@ -160,6 +157,7 @@ static int intel_dp_mst_find_vcpi_slots_for_bpp(struct intel_encoder *encoder,
 	const struct drm_display_mode *adjusted_mode =
 		&crtc_state->hw.adjusted_mode;
 	int bpp, slots = -EINVAL;
+	int max_dpt_bpp;
 	int ret = 0;
 
 	mst_state = drm_atomic_get_mst_topology_state(state, &intel_dp->mst_mgr);
@@ -180,6 +178,13 @@ static int intel_dp_mst_find_vcpi_slots_for_bpp(struct intel_encoder *encoder,
 						      crtc_state->port_clock,
 						      crtc_state->lane_count);
 
+	max_dpt_bpp = intel_dp_mst_max_dpt_bpp(crtc_state, dsc);
+	if (max_bpp > max_dpt_bpp) {
+		drm_dbg_kms(&i915->drm, "Limiting bpp to max DPT bpp (%d -> %d)\n",
+			    max_bpp, max_dpt_bpp);
+		max_bpp = max_dpt_bpp;
+	}
+
 	drm_dbg_kms(&i915->drm, "Looking for slots in range min bpp %d max bpp %d\n",
 		    min_bpp, max_bpp);
 
@@ -191,10 +196,6 @@ static int intel_dp_mst_find_vcpi_slots_for_bpp(struct intel_encoder *encoder,
 
 		drm_dbg_kms(&i915->drm, "Trying bpp %d\n", bpp);
 
-		ret = intel_dp_mst_check_constraints(i915, bpp, adjusted_mode, crtc_state, dsc);
-		if (ret)
-			continue;
-
 		link_bpp_x16 = to_bpp_x16(dsc ? bpp :
 					  intel_dp_output_bpp(crtc_state->output_format, bpp));
 
-- 
2.43.3


  parent reply	other threads:[~2024-03-20 20:11 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-20 20:11 [PATCH 00/11] drm/i915/dp: Few MTL/DSC and a UHBR monitor fix Imre Deak
2024-03-20 20:11 ` [PATCH 01/11] drm/i915/dp: Fix DSC line buffer depth programming Imre Deak
2024-03-26 10:00   ` Nautiyal, Ankit K
2024-03-26 19:50     ` Manasi Navare
2024-03-27 14:46       ` Imre Deak
2024-03-28 13:37   ` Imre Deak
2024-04-03 12:10     ` Jani Nikula
2024-03-20 20:11 ` [PATCH 02/11] drm/i915/dp_mst: Fix symbol clock when calculating the DSC DPT bpp limit Imre Deak
2024-03-26 10:01   ` Nautiyal, Ankit K
2024-03-26 20:04     ` Manasi Navare
2024-03-26 20:07       ` Manasi Navare
2024-03-20 20:11 ` [PATCH 03/11] drm/i915/dp_mst: Fix BW limit check when calculating DSC DPT bpp Imre Deak
2024-03-26 10:05   ` Nautiyal, Ankit K
2024-03-20 20:11 ` [PATCH 04/11] drm/i915/dp_mst: Account for channel coding efficiency in the DSC DPT bpp limit Imre Deak
2024-03-26 10:06   ` Nautiyal, Ankit K
2024-03-20 20:11 ` [PATCH 05/11] drm/i915/dp_mst: Account with the DSC DPT bpp limit on MTL Imre Deak
2024-03-26 10:17   ` Nautiyal, Ankit K
2024-03-26 10:21     ` Nautiyal, Ankit K
2024-03-26 12:11     ` Imre Deak
2024-03-26 12:59       ` Nautiyal, Ankit K
2024-03-29 18:39         ` Manasi Navare
2024-04-02 12:18           ` Imre Deak
2024-03-20 20:11 ` Imre Deak [this message]
2024-03-26 12:54   ` [PATCH 06/11] drm/i915/dp_mst: Sanitize calculating the DSC DPT bpp limit Nautiyal, Ankit K
2024-03-26 20:13     ` Manasi Navare
2024-03-27 14:50       ` Imre Deak
2024-03-20 20:11 ` [PATCH 07/11] drm/dp: Add drm_dp_uhbr_channel_coding_supported() Imre Deak
2024-03-26 12:53   ` Nautiyal, Ankit K
2024-03-26 20:14     ` Manasi Navare
2024-03-20 20:11 ` [PATCH 08/11] drm/dp_mst: Factor out drm_dp_mst_port_is_logical() Imre Deak
2024-03-26 12:52   ` Nautiyal, Ankit K
2024-03-20 20:11 ` [PATCH 09/11] drm/dp_mst: Add drm_dp_mst_aux_for_parent() Imre Deak
2024-03-27  9:00   ` Nautiyal, Ankit K
2024-03-27 14:25     ` Imre Deak
2024-03-28  3:27       ` Nautiyal, Ankit K
2024-03-20 20:11 ` [PATCH 10/11] drm/i915/dp_mst: Make HBLANK expansion quirk work for logical ports Imre Deak
2024-03-27  8:10   ` Nautiyal, Ankit K
2024-03-27 14:19     ` Imre Deak
2024-03-28  3:30       ` Nautiyal, Ankit K
2024-03-20 20:11 ` [PATCH 11/11] drm/i915/dp_mst: Enable HBLANK expansion quirk for UHBR rates Imre Deak
2024-03-27  8:54   ` Nautiyal, Ankit K
2024-03-20 23:51 ` [PATCH 00/11] drm/i915/dp: Few MTL/DSC and a UHBR monitor fix Almahallawy, Khaled
2024-03-21  1:39 ` ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
2024-03-21  1:39 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-03-21  1:54 ` ✓ Fi.CI.BAT: success " Patchwork
2024-03-21 12:39 ` ✗ Fi.CI.IGT: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240320201152.3487892-7-imre.deak@intel.com \
    --to=imre.deak@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.