]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Revert "drm/amd/display: Rework YCbCr422 DSC policy"
authorRelja Vojvodic <Relja.Vojvodic@amd.com>
Tue, 17 Mar 2026 20:47:07 +0000 (16:47 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 30 Mar 2026 18:56:26 +0000 (14:56 -0400)
Revert commit 19b79e4f2182 ("drm/amd/display: Rework YCbCr422 DSC policy")

Reason for Revert:
This commit is causing compliance failures

Reviewed-by: Wenjing Liu <wenjing.liu@amd.com>
Signed-off-by: Relja Vojvodic <Relja.Vojvodic@amd.com>
Signed-off-by: Chuanyu Tseng <chuanyu.tseng@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dc_dsc.h
drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c
drivers/gpu/drm/amd/display/dc/dsc/dcn20/dcn20_dsc.c
drivers/gpu/drm/amd/display/dc/dsc/dcn35/dcn35_dsc.c
drivers/gpu/drm/amd/display/dc/dsc/dcn401/dcn401_dsc.c
drivers/gpu/drm/amd/display/dc/link/link_detection.c
drivers/gpu/drm/amd/display/dc/link/link_dpms.c
drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c

index 48b523fabbbe09a590fca59356e48926ed9c5861..ab7dea9d47f74645612ba6052000b4d5001248ef 100644 (file)
@@ -563,7 +563,6 @@ struct dc_config {
        bool frame_update_cmd_version2;
        struct spl_sharpness_range dcn_sharpness_range;
        struct spl_sharpness_range dcn_override_sharpness_range;
-       bool no_native422_support;
 };
 
 enum visual_confirm {
@@ -988,6 +987,7 @@ struct link_service;
  * causing an issue or not.
  */
 struct dc_debug_options {
+       bool native422_support;
        bool disable_dsc;
        enum visual_confirm visual_confirm;
        int visual_confirm_rect_height;
index 101bce6b8de64f703e220a1c0c5ce1a25300e9fe..9d18f1c080791a97145032886903601a6d1a6eba 100644 (file)
@@ -52,7 +52,6 @@ struct dc_dsc_policy {
        uint32_t max_target_bpp;
        uint32_t min_target_bpp;
        bool enable_dsc_when_not_needed;
-       bool ycbcr422_simple;
 };
 
 struct dc_dsc_config_options {
index 8dfb6dd14eb297923e0b239ad5651cbad8616c81..5b3584ad5b6b3d14f146dcae6ff483b3d4be3f48 100644 (file)
@@ -680,6 +680,9 @@ static void get_dsc_enc_caps(
        } else {
                build_dsc_enc_caps(dsc, dsc_enc_caps);
        }
+
+       if (dsc->ctx->dc->debug.native422_support)
+               dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_422 = 1;
 }
 
 /* Returns 'false' if no intersection was found for at least one capability.
@@ -1097,14 +1100,13 @@ static bool setup_dsc_config(
                branch_max_throughput_mps = dsc_sink_caps->branch_overall_throughput_0_mps;
                break;
        case PIXEL_ENCODING_YCBCR422:
-               if (policy.ycbcr422_simple) {
+               is_dsc_possible = (bool)dsc_common_caps.color_formats.bits.YCBCR_NATIVE_422;
+               sink_per_slice_throughput_mps = dsc_sink_caps->throughput_mode_1_mps;
+               branch_max_throughput_mps = dsc_sink_caps->branch_overall_throughput_1_mps;
+               if (!is_dsc_possible) {
                        is_dsc_possible = (bool)dsc_common_caps.color_formats.bits.YCBCR_SIMPLE_422;
                        dsc_cfg->ycbcr422_simple = is_dsc_possible;
                        sink_per_slice_throughput_mps = dsc_sink_caps->throughput_mode_0_mps;
-               } else {
-                       is_dsc_possible = (bool)dsc_common_caps.color_formats.bits.YCBCR_NATIVE_422;
-                       sink_per_slice_throughput_mps = dsc_sink_caps->throughput_mode_1_mps;
-                       branch_max_throughput_mps = dsc_sink_caps->branch_overall_throughput_1_mps;
                }
                break;
        case PIXEL_ENCODING_YCBCR420:
@@ -1404,7 +1406,6 @@ void dc_dsc_get_policy_for_timing(const struct dc_crtc_timing *timing,
                policy->min_target_bpp = 8;
                /* DP specs limits to 3 x bpc */
                policy->max_target_bpp = 3 * bpc;
-               policy->ycbcr422_simple = true;
                break;
        case PIXEL_ENCODING_YCBCR420:
                /* DP specs limits to 6 */
index 6e1e759462bf9569c093c931496a0e60ff0d0631..242f1e6f0d8f723778643aa6e9017e3705c8547f 100644 (file)
@@ -100,7 +100,7 @@ void dsc2_get_enc_caps(struct dsc_enc_caps *dsc_enc_caps, int pixel_clock_100Hz)
        dsc_enc_caps->color_formats.bits.RGB = 1;
        dsc_enc_caps->color_formats.bits.YCBCR_444 = 1;
        dsc_enc_caps->color_formats.bits.YCBCR_SIMPLE_422 = 1;
-       dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_422 = 1;
+       dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_422 = 0;
        dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_420 = 1;
 
        dsc_enc_caps->color_depth.bits.COLOR_DEPTH_8_BPC = 1;
index 17acb64a9d8041367b37b31f9b09325a207ce965..e712985f7abdbcc16f71f4796f814f0296b19fb3 100644 (file)
@@ -128,7 +128,7 @@ void dsc35_get_single_enc_caps(struct dsc_enc_caps *dsc_enc_caps, unsigned int m
        dsc_enc_caps->color_formats.bits.RGB = 1;
        dsc_enc_caps->color_formats.bits.YCBCR_444 = 1;
        dsc_enc_caps->color_formats.bits.YCBCR_SIMPLE_422 = 1;
-       dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_422 = 1;
+       dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_422 = 0;
        dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_420 = 1;
 
        dsc_enc_caps->color_depth.bits.COLOR_DEPTH_8_BPC = 1;
index bbb8b5b18a4e6b087958cf861756cff5758c706b..c1bdbb38c690b803b4a99dc461e10cae22ef6369 100644 (file)
@@ -78,7 +78,7 @@ static void dsc401_get_single_enc_caps(struct dsc_enc_caps *dsc_enc_caps, unsign
        dsc_enc_caps->color_formats.bits.RGB = 1;
        dsc_enc_caps->color_formats.bits.YCBCR_444 = 1;
        dsc_enc_caps->color_formats.bits.YCBCR_SIMPLE_422 = 1;
-       dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_422 = 1;
+       dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_422 = 0;
        dsc_enc_caps->color_formats.bits.YCBCR_NATIVE_420 = 1;
 
        dsc_enc_caps->color_depth.bits.COLOR_DEPTH_8_BPC = 1;
index 7f1761080aba0ec46aca6aeb2d2168e079de242a..b761f330311f35bc34f3addb0f1c2701d97a879c 100644 (file)
@@ -781,8 +781,10 @@ static void restore_phy_clocks_for_destructive_link_verification(const struct dc
 }
 
 static void verify_link_capability_destructive(struct dc_link *link,
+               struct dc_sink *sink,
                enum dc_detect_reason reason)
 {
+       (void)sink;
        bool should_prepare_phy_clocks =
                        should_prepare_phy_clocks_for_link_verification(link->dc, reason);
 
@@ -854,11 +856,11 @@ static bool should_verify_link_capability_destructively(struct dc_link *link,
        return destrictive;
 }
 
-static void verify_link_capability(struct dc_link *link,
+static void verify_link_capability(struct dc_link *link, struct dc_sink *sink,
                enum dc_detect_reason reason)
 {
        if (should_verify_link_capability_destructively(link, reason))
-               verify_link_capability_destructive(link, reason);
+               verify_link_capability_destructive(link, sink, reason);
        else
                verify_link_capability_non_destructive(link);
 }
@@ -1452,9 +1454,8 @@ bool link_detect(struct dc_link *link, enum dc_detect_reason reason)
 
        is_local_sink_detect_success = detect_link_and_local_sink(link, reason);
 
-       if (is_local_sink_detect_success && link->local_sink) {
-               verify_link_capability(link, reason);
-       }
+       if (is_local_sink_detect_success && link->local_sink)
+               verify_link_capability(link, link->local_sink, reason);
 
        DC_LOG_DC("%s: link_index=%d is_local_sink_detect_success=%d pre_link_type=%d link_type=%d\n", __func__,
                                link->link_index, is_local_sink_detect_success, pre_link_type, link->type);
index e12c25896364a606ff96f5273b63ccf92ad9cbbb..b4f46408a0005fd5488703fe09e1a0f818b61b44 100644 (file)
@@ -181,8 +181,7 @@ void link_set_all_streams_dpms_off_for_link(struct dc_link *link)
        /* link can be also enabled by vbios. In this case it is not recorded
         * in pipe_ctx. Disable link phy here to make sure it is completely off
         */
-       if (dc_is_dp_signal(link->connector_signal))
-               dp_disable_link_phy(link, &link_res, link->connector_signal);
+       dp_disable_link_phy(link, &link_res, link->connector_signal);
 }
 
 void link_resume(struct dc_link *link)
index 55a11d61a2aaa1a7231432b2b8b749a1b88fb69b..4920bc136282f7d766020e1fdcc52ae098f0b425 100644 (file)
@@ -1963,8 +1963,6 @@ static bool dcn31_resource_construct(
        dc->config.use_pipe_ctx_sync_logic = true;
        dc->config.disable_hbr_audio_dp2 = true;
 
-       dc->config.no_native422_support = true;
-
        /* read VBIOS LTTPR caps */
        {
                if (ctx->dc_bios->funcs->get_lttpr_caps) {
index d69c18872b53a18cda841e759e7fbddc18b27861..d9818bc2dfdb645f359e20d1b4b851386c9e8973 100644 (file)
@@ -1926,8 +1926,6 @@ static bool dcn315_resource_construct(
        dc->caps.color.mpc.ogam_rom_caps.hlg = 0;
        dc->caps.color.mpc.ocsc = 1;
 
-       dc->config.no_native422_support = true;
-
        /* read VBIOS LTTPR caps */
        {
                if (ctx->dc_bios->funcs->get_lttpr_caps) {