From: Michael Strauss <michael.stra...@amd.com>

[WHY]
Some sinks are observed to return invalid LTTPR revision and/or invalid
LTTPR link rate capabilities.

[HOW]
Assume any LTTPR which reports invalid max link rate supports HBR3.
Don't validate LTTPR DPCD revision in dp_is_lttpr_present check.

Reviewed-by: George Shen <george.s...@amd.com>
Reviewed-by: Wenjing Liu <wenjing....@amd.com>
Acked-by: Zaeem Mohamed <zaeem.moha...@amd.com>
Signed-off-by: Michael Strauss <michael.stra...@amd.com>
---
 .../dc/link/protocols/link_dp_capability.c    | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

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 964abccebdc6..1ff9876e3ca3 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
@@ -363,10 +363,10 @@ bool dp_is_128b_132b_signal(struct pipe_ctx *pipe_ctx)
 
 bool dp_is_lttpr_present(struct dc_link *link)
 {
+       /* Some sink devices report invalid LTTPR revision, so don't validate 
against that cap */
        return 
(dp_parse_lttpr_repeater_count(link->dpcd_caps.lttpr_caps.phy_repeater_cnt) != 
0 &&
                        link->dpcd_caps.lttpr_caps.max_lane_count > 0 &&
-                       link->dpcd_caps.lttpr_caps.max_lane_count <= 4 &&
-                       link->dpcd_caps.lttpr_caps.revision.raw >= 0x14);
+                       link->dpcd_caps.lttpr_caps.max_lane_count <= 4);
 }
 
 /* in DP compliance test, DPR-120 may have
@@ -399,7 +399,20 @@ static enum dc_link_rate get_link_rate_from_max_link_bw(
 
 static enum dc_link_rate get_lttpr_max_link_rate(struct dc_link *link)
 {
-       enum dc_link_rate lttpr_max_link_rate = 
link->dpcd_caps.lttpr_caps.max_link_rate;
+
+       enum dc_link_rate lttpr_max_link_rate = LINK_RATE_UNKNOWN;
+
+       switch (link->dpcd_caps.lttpr_caps.max_link_rate) {
+       case LINK_RATE_LOW:
+       case LINK_RATE_HIGH:
+       case LINK_RATE_HIGH2:
+       case LINK_RATE_HIGH3:
+               lttpr_max_link_rate = link->dpcd_caps.lttpr_caps.max_link_rate;
+               break;
+       default:
+               // Assume all LTTPRs support up to HBR3 to improve misbehaving 
sink interop
+               lttpr_max_link_rate = LINK_RATE_HIGH3;
+       }
 
        if (link->dpcd_caps.lttpr_caps.supported_128b_132b_rates.bits.UHBR20)
                lttpr_max_link_rate = LINK_RATE_UHBR20;
-- 
2.34.1

Reply via email to