]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/dp: Correct max compressed bpp bounds by using link bpp
authorAnkit Nautiyal <ankit.k.nautiyal@intel.com>
Fri, 17 Jan 2025 05:07:13 +0000 (10:37 +0530)
committerAnkit Nautiyal <ankit.k.nautiyal@intel.com>
Wed, 22 Jan 2025 07:35:46 +0000 (13:05 +0530)
While setting the bounds for compressed bpp, we ensure that the
compressed bpp is less than the pipe bpp.

This causes an issue with the 420 output format, where the effective
link bpp (or output bpp) is half that of the pipe bpp. Therefore instead
of using pipe bpp, use the output bpp to set the bounds for the
compressed bpp.

v2: Use identifier output_bpp instead of link_bpp (Imre)

Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250117050713.152012-1-ankit.k.nautiyal@intel.com
drivers/gpu/drm/i915/display/intel_dp.c

index f1f3b1bb1e89b2c3c2f5ba75178d100131305331..9ec23860b593d37e1ac622ac9fbadd07d51ea523 100644 (file)
@@ -2068,9 +2068,10 @@ icl_dsc_compute_link_config(struct intel_dp *intel_dp,
                            int timeslots)
 {
        int i, ret;
+       int output_bpp = intel_dp_output_bpp(pipe_config->output_format, pipe_bpp);
 
        /* Compressed BPP should be less than the Input DSC bpp */
-       dsc_max_bpp = min(dsc_max_bpp, pipe_bpp - 1);
+       dsc_max_bpp = min(dsc_max_bpp, output_bpp - 1);
 
        for (i = 0; i < ARRAY_SIZE(valid_dsc_bpp); i++) {
                if (valid_dsc_bpp[i] < dsc_min_bpp)
@@ -2111,6 +2112,7 @@ xelpd_dsc_compute_link_config(struct intel_dp *intel_dp,
 {
        struct intel_display *display = to_intel_display(intel_dp);
        u8 bppx16_incr = drm_dp_dsc_sink_bpp_incr(connector->dp.dsc_dpcd);
+       int output_bpp = intel_dp_output_bpp(pipe_config->output_format, pipe_bpp);
        u16 compressed_bppx16;
        u8 bppx16_step;
        int ret;
@@ -2121,7 +2123,7 @@ xelpd_dsc_compute_link_config(struct intel_dp *intel_dp,
                bppx16_step = 16 / bppx16_incr;
 
        /* Compressed BPP should be less than the Input DSC bpp */
-       dsc_max_bpp = min(dsc_max_bpp << 4, (pipe_bpp << 4) - bppx16_step);
+       dsc_max_bpp = min(dsc_max_bpp << 4, (output_bpp << 4) - bppx16_step);
        dsc_min_bpp = dsc_min_bpp << 4;
 
        for (compressed_bppx16 = dsc_max_bpp;