From: Imre Deak <imre.deak@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Subject: [PATCH v2 06/11] drm/i915/dp_mst: Sanitize calculating the DSC DPT bpp limit
Date: Wed, 17 Apr 2024 01:10:05 +0300 [thread overview]
Message-ID: <20240416221010.376865-7-imre.deak@intel.com> (raw)
In-Reply-To: <20240416221010.376865-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
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp_mst.c | 76 ++++++++++-----------
1 file changed, 38 insertions(+), 38 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 847e264e5bb8b..89ee80a357140 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -51,43 +51,39 @@
#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);
- /*
- * Bspec/49259 suggests that the FEC overhead needs to be
- * applied here, though HW people claim that neither this FEC
- * or any other overhead is applicable here (that is the actual
- * available_bw is just symbol_clock * 72). However based on
- * testing on MTL-P the
- * - DELL U3224KBA display
- * - Unigraf UCD-500 CTS test sink
- * devices the
- * - 5120x2880/995.59Mhz
- * - 6016x3384/1357.23Mhz
- * - 6144x3456/1413.39Mhz
- * modes (all which had a DPT limit on the above devices),
- * both the channel coding efficiency and an additional 3%
- * overhead needs to be accounted for.
- */
- int available_bw = mul_u32_u32(symbol_clock * 72,
- drm_dp_bw_channel_coding_efficiency(true)) /
- 1030000;
+ 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)
+ *
+ * Bspec/49259 suggests that the FEC overhead needs to be
+ * applied here, though HW people claim that neither this FEC
+ * or any other overhead is applicable here (that is the actual
+ * available_bw is just symbol_clock * 72). However based on
+ * testing on MTL-P the
+ * - DELL U3224KBA display
+ * - Unigraf UCD-500 CTS test sink
+ * devices the
+ * - 5120x2880/995.59Mhz
+ * - 6016x3384/1357.23Mhz
+ * - 6144x3456/1413.39Mhz
+ * modes (all which had a DPT limit on the above devices),
+ * both the channel coding efficiency and an additional 3%
+ * overhead needs to be accounted for.
+ */
+ 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, 1030000));
}
static int intel_dp_mst_bw_overhead(const struct intel_crtc_state *crtc_state,
@@ -175,6 +171,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);
@@ -195,6 +192,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);
@@ -206,10 +210,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
next prev parent reply other threads:[~2024-04-16 22:09 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-16 22:09 [PATCH v2 00/11] drm/i915/dp: Few MTL/DSC and a UHBR monitor fix Imre Deak
2024-04-16 22:10 ` [PATCH v2 01/11] drm/i915/dp: Fix DSC line buffer depth programming Imre Deak
2024-04-16 22:10 ` [PATCH v2 02/11] drm/i915/dp_mst: Fix symbol clock when calculating the DSC DPT bpp limit Imre Deak
2024-04-16 22:10 ` [PATCH v2 03/11] drm/i915/dp_mst: Fix BW limit check when calculating DSC DPT bpp Imre Deak
2024-04-16 22:10 ` [PATCH v2 04/11] drm/i915/dp_mst: Account for channel coding efficiency in the DSC DPT bpp limit Imre Deak
2024-04-17 12:42 ` Nautiyal, Ankit K
2024-04-16 22:10 ` [PATCH v2 05/11] drm/i915/dp_mst: Account with the DSC DPT bpp limit on MTL Imre Deak
2024-04-16 22:10 ` Imre Deak [this message]
2024-04-16 22:10 ` [PATCH v2 07/11] drm/dp: Add drm_dp_uhbr_channel_coding_supported() Imre Deak
2024-04-17 9:21 ` Jani Nikula
2024-04-17 11:49 ` Imre Deak
2024-04-17 14:19 ` [PATCH v3 07/11] drm/dp: Add drm_dp_128b132b_supported() Imre Deak
2024-04-16 22:10 ` [PATCH v2 08/11] drm/dp_mst: Factor out drm_dp_mst_port_is_logical() Imre Deak
2024-04-16 22:10 ` [PATCH v2 09/11] drm/dp_mst: Add drm_dp_mst_aux_for_parent() Imre Deak
2024-04-16 22:10 ` [PATCH v2 10/11] drm/i915/dp_mst: Make HBLANK expansion quirk work for logical ports Imre Deak
2024-04-16 22:10 ` [PATCH v2 11/11] drm/i915/dp_mst: Enable HBLANK expansion quirk for UHBR rates Imre Deak
2024-04-17 9:39 ` Jani Nikula
2024-04-17 11:46 ` Imre Deak
2024-04-17 14:22 ` [PATCH v3 " Imre Deak
2024-04-16 22:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dp: Few MTL/DSC and a UHBR monitor fix (rev2) Patchwork
2024-04-16 22:44 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-04-16 22:51 ` ✓ Fi.CI.BAT: success " Patchwork
2024-04-17 6:20 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-04-17 16:34 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dp: Few MTL/DSC and a UHBR monitor fix (rev4) Patchwork
2024-04-17 16:34 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-04-17 16:43 ` ✓ Fi.CI.BAT: success " Patchwork
2024-04-18 12:22 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-04-19 14:45 ` Imre Deak
2024-04-24 12:41 ` Illipilli, TejasreeX
2024-04-24 6:52 ` ✓ Fi.CI.IGT: success " 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=20240416221010.376865-7-imre.deak@intel.com \
--to=imre.deak@intel.com \
--cc=ankit.k.nautiyal@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox