@@ -1473,7 +1473,7 @@ static int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
const struct drm_display_mode *adjusted_mode =
&pipe_config->hw.adjusted_mode;
- int pipe_bpp;
+ int pipe_bpp, pipe_bpp_max;
int ret;
pipe_config->fec_enable = !intel_dp_is_edp(intel_dp) &&
@@ -1482,11 +1482,23 @@ static int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
if (!intel_dp_supports_dsc(intel_dp, pipe_config))
return -EINVAL;
- pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, conn_state->max_requested_bpc);
+ /*
+ * If Force DSC BPC is set, try to use that to compute the pipe bpp,
+ * otherwise set pipe_bpp to the max bpp.
+ */
+ pipe_bpp_max = intel_dp_dsc_compute_bpp(intel_dp, conn_state->max_requested_bpc);
- if (intel_dp->force_dsc_bpc) {
+ if (intel_dp->force_dsc_bpc &&
+ intel_dp->force_dsc_bpc <= conn_state->max_requested_bpc) {
pipe_bpp = intel_dp->force_dsc_bpc * 3;
drm_dbg_kms(&dev_priv->drm, "Input DSC BPP forced to %d", pipe_bpp);
+ } else if (intel_dp->force_dsc_bpc < conn_state->max_requested_bpc) {
+ drm_dbg_kms(&dev_priv->drm,
+ "Ignoring force dsc bpc:%d, conflict with max requested bpc:%d",
+ intel_dp->force_dsc_bpc, conn_state->max_requested_bpc);
+ pipe_bpp = pipe_bpp_max;
+ } else {
+ pipe_bpp = pipe_bpp_max;
}
/* Min Input BPC for ICL+ is 8 */
@@ -1496,12 +1508,13 @@ static int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
return -EINVAL;
}
+ pipe_config->pipe_bpp = pipe_bpp;
+
/*
- * For now enable DSC for max bpp, max link rate, max lane count.
+ * For now enable DSC for max link rate, max lane count.
* Optimize this later for the minimum possible link rate/lane count
* with DSC enabled for the requested mode.
*/
- pipe_config->pipe_bpp = pipe_bpp;
pipe_config->port_clock = limits->max_rate;
pipe_config->lane_count = limits->max_lane_count;
Add a check to use force DSC bpc only if its less that the connector max requested bpc. Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> --- drivers/gpu/drm/i915/display/intel_dp.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-)