Skip to content

Commit 7d0f2f6

Browse files
committed
drm/i915/dp: Skip computing a non-DSC link config if DSC is needed
Computing the non-DSC mode link config is redundant once it's determined that DSC will be needed, so skip computing it. In a follow-up patch this simplifies setting the link limits which are dependent on the DSC vs. non-DSC mode. While at it sanitize the debug print about the MST DSC fallback path, making it similar to the SST DSC one. Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230921195159.2646027-4-imre.deak@intel.com
1 parent 703c599 commit 7d0f2f6

2 files changed

Lines changed: 33 additions & 14 deletions

File tree

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2247,7 +2247,8 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
22472247
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
22482248
struct link_config_limits limits;
22492249
bool joiner_needs_dsc = false;
2250-
int ret;
2250+
bool dsc_needed;
2251+
int ret = 0;
22512252

22522253
intel_dp_compute_config_limits(intel_dp, pipe_config,
22532254
respect_downstream_limits, &limits);
@@ -2263,13 +2264,20 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
22632264
*/
22642265
joiner_needs_dsc = DISPLAY_VER(i915) < 13 && pipe_config->bigjoiner_pipes;
22652266

2266-
/*
2267-
* Optimize for slow and wide for everything, because there are some
2268-
* eDP 1.3 and 1.4 panels don't work well with fast and narrow.
2269-
*/
2270-
ret = intel_dp_compute_link_config_wide(intel_dp, pipe_config, conn_state, &limits);
2267+
dsc_needed = joiner_needs_dsc || intel_dp->force_dsc_en;
2268+
2269+
if (!dsc_needed) {
2270+
/*
2271+
* Optimize for slow and wide for everything, because there are some
2272+
* eDP 1.3 and 1.4 panels don't work well with fast and narrow.
2273+
*/
2274+
ret = intel_dp_compute_link_config_wide(intel_dp, pipe_config,
2275+
conn_state, &limits);
2276+
if (ret)
2277+
dsc_needed = true;
2278+
}
22712279

2272-
if (ret || joiner_needs_dsc || intel_dp->force_dsc_en) {
2280+
if (dsc_needed) {
22732281
drm_dbg_kms(&i915->drm, "Try DSC (fallback=%s, joiner=%s, force=%s)\n",
22742282
str_yes_no(ret), str_yes_no(joiner_needs_dsc),
22752283
str_yes_no(intel_dp->force_dsc_en));

drivers/gpu/drm/i915/display/intel_dp_mst.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,8 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
337337
const struct drm_display_mode *adjusted_mode =
338338
&pipe_config->hw.adjusted_mode;
339339
struct link_config_limits limits;
340-
int ret;
340+
bool dsc_needed;
341+
int ret = 0;
341342

342343
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
343344
return -EINVAL;
@@ -348,15 +349,25 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
348349

349350
intel_dp_mst_compute_config_limits(intel_dp, pipe_config, &limits);
350351

351-
ret = intel_dp_mst_compute_link_config(encoder, pipe_config,
352-
conn_state, &limits);
352+
dsc_needed = intel_dp->force_dsc_en;
353353

354-
if (ret == -EDEADLK)
355-
return ret;
354+
if (!dsc_needed) {
355+
ret = intel_dp_mst_compute_link_config(encoder, pipe_config,
356+
conn_state, &limits);
357+
358+
if (ret == -EDEADLK)
359+
return ret;
360+
361+
if (ret)
362+
dsc_needed = true;
363+
}
356364

357365
/* enable compression if the mode doesn't fit available BW */
358-
drm_dbg_kms(&dev_priv->drm, "Force DSC en = %d\n", intel_dp->force_dsc_en);
359-
if (ret || intel_dp->force_dsc_en) {
366+
if (dsc_needed) {
367+
drm_dbg_kms(&dev_priv->drm, "Try DSC (fallback=%s, force=%s)\n",
368+
str_yes_no(ret),
369+
str_yes_no(intel_dp->force_dsc_en));
370+
360371
/*
361372
* FIXME: As bpc is hardcoded to 8, as mentioned above,
362373
* WARN and ignore the debug flag force_dsc_bpc for now.

0 commit comments

Comments
 (0)