]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Add dp_skip_rbr flag for NUTMEG
authorTimur Kristóf <timur.kristof@gmail.com>
Fri, 29 May 2026 09:09:09 +0000 (11:09 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 17 Jul 2026 21:37:28 +0000 (17:37 -0400)
No functional changes. Just clean up a conceptual mismatch.

Based on feedback on the NUTMEG code in DC, the
preferred_link_setting is meant to force the DP link to a
specific setting, meaning both the link rate and lane count
should be locked to an exact value. What NUTMEG needs is
a lower bound on the link rate, which is not the same concept.

Implement this as a HW workaround flag instead.

Suggested-by: Wenjing Liu <wenjing.liu@amd.com>
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 871ceb853841bcaa4e6cec3723b16c4887a760be)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/link/link_detection.c
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c

index 82d02ebbd82908ad5c214b6c7621f58e1e1cf221..ebdcbfa7db80a7a4b4931e2d3e14f2edf3245438 100644 (file)
@@ -1815,6 +1815,8 @@ struct dc_scratch_space {
                bool dp_skip_DID2;
                bool dp_skip_reset_segment;
                bool dp_skip_fs_144hz;
+               /* Some DP bridges don't work with RBR and must use HBR. */
+               bool dp_skip_rbr;
                bool dp_mot_reset_segment;
                /* Some USB4 docks do not handle turning off MST DSC once it has been enabled. */
                bool dpia_mst_dsc_always_on;
index 7d8951fecd570eda92a89ca0c9b466330d0114b5..29dbb5e410d81c8ad446c71c0c131069c81593b4 100644 (file)
@@ -623,7 +623,7 @@ static bool detect_dp(struct dc_link *link,
                link->dpcd_caps.sink_count.bits.SINK_COUNT = 1;
                /* NUTMEG requires that we use HBR, doesn't work with RBR. */
                if (link->dpcd_caps.branch_dev_id == DP_BRANCH_DEVICE_ID_00001A)
-                       link->preferred_link_setting.link_rate = LINK_RATE_HIGH;
+                       link->wa_flags.dp_skip_rbr = true;
        }
 
        return true;
index 4079f128bade56d34a7a17621a21eef72796d03b..1cd17a0272bc8c1981f3249d66f8f0b869c07cbf 100644 (file)
@@ -750,9 +750,9 @@ static bool decide_dp_link_settings(struct dc_link *link, struct dc_link_setting
        if (req_bw > dp_link_bandwidth_kbps(link, &link->verified_link_cap))
                return false;
 
-       if (link->preferred_link_setting.link_rate != LINK_RATE_UNKNOWN) {
-               initial_link_setting.link_rate = link->preferred_link_setting.link_rate;
-               current_link_setting.link_rate = link->preferred_link_setting.link_rate;
+       if (link->wa_flags.dp_skip_rbr) {
+               initial_link_setting.link_rate = LINK_RATE_HIGH;
+               current_link_setting.link_rate = LINK_RATE_HIGH;
        }
 
        /* search for the minimum link setting that: