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

[ Upstream commit 29956d0fded036a570bd8e7d4ea4b1a1730307d2 ]

[WHY]
LTTPRs can in very rare instsances fail to increment DPCD LTTPR count.
This results in aux-i LTTPR requests to be sent to the wrong DPCD
address, which causes link training failure.

[HOW]
Override internal repeater count if fixed_vs flag is set for a given link

Reviewed-by: George Shen <george.s...@amd.com>
Acked-by: Wayne Lin <wayne....@amd.com>
Signed-off-by: Michael Strauss <michael.stra...@amd.com>
Tested-by: Daniel Wheeler <daniel.whee...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
index a4fc9a6c850e..0c52506b367d 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
@@ -5211,6 +5211,14 @@ bool dp_retrieve_lttpr_cap(struct dc_link *link)
                                lttpr_dpcd_data[DP_PHY_REPEATER_128B132B_RATES -
                                                                
DP_LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV];
 
+               /* If this chip cap is set, at least one retimer must exist in 
the chain
+                * Override count to 1 if we receive a known bad count (0 or an 
invalid value) */
+               if (link->chip_caps & EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN &&
+                               
(dp_convert_to_count(link->dpcd_caps.lttpr_caps.phy_repeater_cnt) == 0)) {
+                       ASSERT(0);
+                       link->dpcd_caps.lttpr_caps.phy_repeater_cnt = 0x80;
+               }
+
                /* Attempt to train in LTTPR transparent mode if repeater count 
exceeds 8. */
                is_lttpr_present = (link->dpcd_caps.lttpr_caps.max_lane_count > 
0 &&
                                link->dpcd_caps.lttpr_caps.max_lane_count <= 4 
&&
-- 
2.35.1

Reply via email to