]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/dp: Simplify computing DSC BPPs for DP-SST
authorImre Deak <imre.deak@intel.com>
Mon, 22 Dec 2025 15:35:43 +0000 (17:35 +0200)
committerImre Deak <imre.deak@intel.com>
Tue, 13 Jan 2026 16:42:19 +0000 (18:42 +0200)
The maximum pipe BPP value (used as the DSC input BPP) has been aligned
already to the corresponding source/sink input BPP capabilities in
intel_dp_compute_config_limits(). So it isn't needed to perform the same
alignment again in intel_dp_dsc_compute_pipe_bpp() called later, this
function can simply use the already aligned maximum pipe BPP value, do
that.

Also, there is no point in trying pipe BPP values lower than the
maximum: this would only make dsc_compute_compressed_bpp() start with a
lower _compressed_ BPP value, but this lower compressed BPP value has
been tried already when dsc_compute_compressed_bpp() was called with the
higher pipe BPP value (i.e. the first dsc_compute_compressed_bpp() call
tries already all the possible compressed BPP values which are all below
the pipe BPP value passed to it). Simplify the function accordingly
trying only the maximum pipe BPP value.

Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patch.msgid.link/20251222153547.713360-17-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_dp.c

index e38e307bddfff111c69b6c86ca1ac57b86ad28b2..4603745dee37993dfbb70b019a2f2cf6b56e19af 100644 (file)
@@ -2295,11 +2295,8 @@ static int intel_dp_dsc_compute_pipe_bpp(struct intel_dp *intel_dp,
                                         struct drm_connector_state *conn_state,
                                         const struct link_config_limits *limits)
 {
-       const struct intel_connector *connector =
-               to_intel_connector(conn_state->connector);
-       u8 dsc_bpc[3] = {};
        int forced_bpp, pipe_bpp;
-       int num_bpc, i, ret;
+       int ret;
 
        forced_bpp = intel_dp_force_dsc_pipe_bpp(intel_dp, limits);
 
@@ -2312,25 +2309,15 @@ static int intel_dp_dsc_compute_pipe_bpp(struct intel_dp *intel_dp,
                }
        }
 
-       /*
-        * Get the maximum DSC bpc that will be supported by any valid
-        * link configuration and compressed bpp.
-        */
-       num_bpc = drm_dp_dsc_sink_supported_input_bpcs(connector->dp.dsc_dpcd, dsc_bpc);
-       for (i = 0; i < num_bpc; i++) {
-               pipe_bpp = dsc_bpc[i] * 3;
-               if (pipe_bpp < limits->pipe.min_bpp || pipe_bpp > limits->pipe.max_bpp)
-                       continue;
+       pipe_bpp = limits->pipe.max_bpp;
+       ret = dsc_compute_compressed_bpp(intel_dp, pipe_config, conn_state,
+                                        limits, pipe_bpp);
+       if (ret)
+               return -EINVAL;
 
-               ret = dsc_compute_compressed_bpp(intel_dp, pipe_config, conn_state,
-                                                limits, pipe_bpp);
-               if (ret == 0) {
-                       pipe_config->pipe_bpp = pipe_bpp;
-                       return 0;
-               }
-       }
+       pipe_config->pipe_bpp = pipe_bpp;
 
-       return -EINVAL;
+       return 0;
 }
 
 static int intel_edp_dsc_compute_pipe_bpp(struct intel_dp *intel_dp,