drm/amd/display: Workaround to do HDCP authentication twice on certain displays
authorGeorge Shen <george.shen@amd.com>
Wed, 19 Feb 2020 00:15:55 +0000 (19:15 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 5 Mar 2020 05:30:04 +0000 (00:30 -0500)
[Why]
When transitioning from SST to MST, the HDCP repeater in some MST
displays will enter a bad state. The HDCP repeater is recovered after
failing and performing authentication again.

[How]
Add monitor patch to trigger HDCP authentication failure after
encryption is enabled and re-authenticate.

Signed-off-by: George Shen <george.shen@amd.com>
Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_transition.c
drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h

index 5bc6706d2af75a8735c3192c4c991003c2dfb131..f3711914364e5958811d846ab880c4ddaf465b57 100644 (file)
@@ -230,6 +230,9 @@ enum mod_hdcp_status mod_hdcp_hdcp1_dp_transition(struct mod_hdcp *hdcp,
                                (!conn->is_repeater && is_dp_mst_hdcp(hdcp) && input->stream_encryption_dp != PASS)) {
                        fail_and_restart_in_ms(0, &status, output);
                        break;
+               } else if (conn->hdcp1_retry_count < conn->link.adjust.hdcp1.min_auth_retries_wa) {
+                       fail_and_restart_in_ms(0, &status, output);
+                       break;
                }
                if (conn->is_repeater) {
                        set_watchdog_in_ms(hdcp, 5000, output);
index 891bca555e173b78b3ef5e769cac2c073d8a5630..bb855ea5d5a3031a7a5cc7f862f47eafcff6a235 100644 (file)
@@ -157,7 +157,8 @@ struct mod_hdcp_display_adjustment {
 struct mod_hdcp_link_adjustment_hdcp1 {
        uint8_t disable                 : 1;
        uint8_t postpone_encryption     : 1;
-       uint8_t reserved                : 6;
+       uint8_t min_auth_retries_wa : 1;
+       uint8_t reserved                : 5;
 };
 
 enum mod_hdcp_force_hdcp_type {