]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/amd/display: Add delay after h' watchdog timeout event
authorMichael Strauss <michael.strauss@amd.com>
Mon, 23 Sep 2019 12:47:47 +0000 (08:47 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 7 Jan 2020 17:13:35 +0000 (12:13 -0500)
[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: Michael Strauss <michael.strauss@amd.com>
Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c

index e8043c903a84f67202d4c69bc7d88b146d7c5b75..da190739a969c23d996fa35a5f65e1c33299731d 100644 (file)
@@ -114,7 +114,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_transition(struct mod_hdcp *hdcp,
                        if (event_ctx->event ==
                                        MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) {
                                /* 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 {
                                /* continue h' polling */
                                callback_in_ms(100, output);
@@ -166,7 +166,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_transition(struct mod_hdcp *hdcp,
                        if (event_ctx->event ==
                                        MOD_HDCP_EVENT_WATCHDOG_TIMEOUT) {
                                /* 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 {
                                /* continue h' polling */
                                callback_in_ms(20, output);
@@ -439,7 +439,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct mod_hdcp *hdcp,
                        if (event_ctx->event ==
                                        MOD_HDCP_EVENT_WATCHDOG_TIMEOUT)
                                /* 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
                                increment_stay_counter(hdcp);
                        break;
@@ -484,7 +484,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct mod_hdcp *hdcp,
                        if (event_ctx->event ==
                                        MOD_HDCP_EVENT_WATCHDOG_TIMEOUT)
                                /* 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
                                increment_stay_counter(hdcp);
                        break;