Commit daa9692d authored by Michael Strauss's avatar Michael Strauss Committed by Alex Deucher

drm/amd/display: Add delay after h' watchdog timeout event

[WHY]
Some monitors trigger HDCP2.x timeout after reinitializing (e.g. toggling HDR)
by taking longer than expected to return h' (h prime)
Previously the 200ms watchdog timer retry count would hit
MAX_NUM_OF_ATTEMPTS (4), causing fallback to HDCP1.x

[HOW]
Adding a 1s delay after an h' watchdog timeout provides enough time
for affected monitors to return h' in time without hitting MAX_NUM_OF_ATTEMPTS
Signed-off-by: default avatarMichael Strauss <michael.strauss@amd.com>
Reviewed-by: default avatarWenjing Liu <Wenjing.Liu@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 454425e8
...@@ -114,7 +114,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_transition(struct mod_hdcp *hdcp, ...@@ -114,7 +114,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_transition(struct mod_hdcp *hdcp,
if (event_ctx->event == if (event_ctx->event ==
MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) { MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) {
/* 1A-11-3: consider h' timeout a failure */ /* 1A-11-3: consider h' timeout a failure */
fail_and_restart_in_ms(0, &status, output); fail_and_restart_in_ms(1000, &status, output);
} else { } else {
/* continue h' polling */ /* continue h' polling */
callback_in_ms(100, output); callback_in_ms(100, output);
...@@ -166,7 +166,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_transition(struct mod_hdcp *hdcp, ...@@ -166,7 +166,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_transition(struct mod_hdcp *hdcp,
if (event_ctx->event == if (event_ctx->event ==
MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) { MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) {
/* 1A-11-2: consider h' timeout a failure */ /* 1A-11-2: consider h' timeout a failure */
fail_and_restart_in_ms(0, &status, output); fail_and_restart_in_ms(1000, &status, output);
} else { } else {
/* continue h' polling */ /* continue h' polling */
callback_in_ms(20, output); callback_in_ms(20, output);
...@@ -439,7 +439,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct mod_hdcp *hdcp, ...@@ -439,7 +439,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct mod_hdcp *hdcp,
if (event_ctx->event == if (event_ctx->event ==
MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) MOD_HDCP_EVENT_WATCHDOG_TIMEOUT)
/* 1A-10-3: consider h' timeout a failure */ /* 1A-10-3: consider h' timeout a failure */
fail_and_restart_in_ms(0, &status, output); fail_and_restart_in_ms(1000, &status, output);
else else
increment_stay_counter(hdcp); increment_stay_counter(hdcp);
break; break;
...@@ -484,7 +484,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct mod_hdcp *hdcp, ...@@ -484,7 +484,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct mod_hdcp *hdcp,
if (event_ctx->event == if (event_ctx->event ==
MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) MOD_HDCP_EVENT_WATCHDOG_TIMEOUT)
/* 1A-10-2: consider h' timeout a failure */ /* 1A-10-2: consider h' timeout a failure */
fail_and_restart_in_ms(0, &status, output); fail_and_restart_in_ms(1000, &status, output);
else else
increment_stay_counter(hdcp); increment_stay_counter(hdcp);
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment