drm/amd/display: Add retires when read DPCD
[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 <jerry.zuo@amd.com> Acked-by: Zaeem Mohamed <zaeem.mohamed@amd.com> Signed-off-by: Joan Lee <joan.lee@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user