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 <[email protected]>
Signed-off-by: Timur Kristóf <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/dc.h                         | 2 ++
 drivers/gpu/drm/amd/display/dc/link/link_detection.c        | 2 +-
 .../drm/amd/display/dc/link/protocols/link_dp_capability.c  | 6 +++---
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index 75f59ca927ffe..3fb97860722df 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1731,6 +1731,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;
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c 
b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
index 1ac6a22fecfee..9f4e90493fed5 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -621,7 +621,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;
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
index f44c13300a59c..708dd6f336d8c 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
@@ -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:
-- 
2.53.0

Reply via email to