From: Joan Lee <[email protected]>

[why & how]
Sometimes read DPCD return fail while result not retrieved yet. Add
retries mechanism in Replay handle hpd irq to get real result.

Reviewed-by: Jerry Zuo <[email protected]>
Acked-by: Zaeem Mohamed <[email protected]>
Signed-off-by: Joan Lee <[email protected]>
---
 .../dc/link/protocols/link_dp_irq_handler.c   | 26 ++++++++++++++-----
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git 
a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c
index 659b8064d361..5f087e930cb6 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c
@@ -189,16 +189,30 @@ static void handle_hpd_irq_replay_sink(struct dc_link 
*link)
        union dpcd_replay_configuration replay_configuration = {0};
        /*AMD Replay version reuse DP_PSR_ERROR_STATUS for REPLAY_ERROR 
status.*/
        union psr_error_status replay_error_status = {0};
+       bool ret = false;
+       int retries = 0;
 
        if (!link->replay_settings.replay_feature_enabled)
                return;
 
-       dm_helpers_dp_read_dpcd(
-               link->ctx,
-               link,
-               DP_SINK_PR_REPLAY_STATUS,
-               &replay_configuration.raw,
-               sizeof(replay_configuration.raw));
+       while (retries < 10) {
+               ret = dm_helpers_dp_read_dpcd(
+                       link->ctx,
+                       link,
+                       DP_SINK_PR_REPLAY_STATUS,
+                       &replay_configuration.raw,
+                       sizeof(replay_configuration.raw));
+
+               if (ret)
+                       break;
+
+               retries++;
+       }
+
+       if (!ret)
+               DC_LOG_WARNING("[%s][%d] DPCD read addr.0x%x failed with %d 
retries\n",
+                                       __func__, __LINE__,
+                                       DP_SINK_PR_REPLAY_STATUS, retries);
 
        dm_helpers_dp_read_dpcd(
                link->ctx,
-- 
2.34.1

Reply via email to