drm/amd/display: rx_validation failed resume from sleep
authorJing Zhou <Jing.Zhou@amd.com>
Thu, 14 Nov 2019 08:39:52 +0000 (16:39 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 7 Jan 2020 17:13:27 +0000 (12:13 -0500)
[why]
Most DP/HDMI monitors need more time to response rx_validation
request.

[how]
Add generic 1000ms delay.

Signed-off-by: Jing Zhou <Jing.Zhou@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/hdcp1_transition.c

index 136b8011ff3fc375439780948402bd18d18c414f..21ebc62bb9d9e150d423b28a026974ddfef3d14c 100644 (file)
@@ -67,11 +67,19 @@ enum mod_hdcp_status mod_hdcp_hdcp1_transition(struct mod_hdcp *hdcp,
                break;
        case H1_A2_COMPUTATIONS_A3_VALIDATE_RX_A6_TEST_FOR_REPEATER:
                if (input->bcaps_read != PASS ||
-                               input->r0p_read != PASS ||
-                               input->rx_validation != PASS ||
-                               (!conn->is_repeater && input->encryption != PASS)) {
+                               input->r0p_read != PASS) {
+                       fail_and_restart_in_ms(0, &status, output);
+                       break;
+               } else if (input->rx_validation != PASS) {
                        /* 1A-06: consider invalid r0' a failure */
                        /* 1A-08: consider bksv listed in SRM a failure */
+                       /*
+                        * some slow RX will fail rx validation when it is
+                        * not ready. give it more time to react before retry.
+                        */
+                       fail_and_restart_in_ms(1000, &status, output);
+                       break;
+               } else if (!conn->is_repeater && input->encryption != PASS) {
                        fail_and_restart_in_ms(0, &status, output);
                        break;
                }
@@ -212,7 +220,11 @@ enum mod_hdcp_status mod_hdcp_hdcp1_dp_transition(struct mod_hdcp *hdcp,
                                 * after 3 attempts.
                                 * 1A-08: consider bksv listed in SRM a failure
                                 */
-                               fail_and_restart_in_ms(0, &status, output);
+                               /*
+                                * some slow RX will fail rx validation when it is
+                                * not ready. give it more time to react before retry.
+                                */
+                               fail_and_restart_in_ms(1000, &status, output);
                        }
                        break;
                } else if ((!conn->is_repeater && input->encryption != PASS) ||