drm/amd/display: Write TEST_EDID_CHECKSUM_WRITE for EDID tests
authorMikita Lipski <mikita.lipski@amd.com>
Thu, 17 May 2018 19:44:20 +0000 (15:44 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 18 Apr 2023 20:28:54 +0000 (16:28 -0400)
Extract edid's checksum and send it back for verification if EDID_TEST
is requested.

Signed-off-by: Mikita Lipski <mikita.lipski@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c

index c6ce2b7123b795439b01936e18a96406399cfbe4..09e056a647087639dc834409f8985ecabc22c791 100644 (file)
@@ -885,10 +885,34 @@ enum dc_edid_status dm_helpers_read_local_edid(
                DRM_ERROR("EDID err: %d, on connector: %s",
                                edid_status,
                                aconnector->base.name);
+       if (link->aux_mode) {
+               union test_request test_request = {0};
+               union test_response test_response = {0};
 
-       /* DP Compliance Test 4.2.2.3 */
-       if (link->aux_mode)
-               drm_dp_send_real_edid_checksum(&aconnector->dm_dp_aux.aux, sink->dc_edid.raw_edid[sink->dc_edid.length-1]);
+               dm_helpers_dp_read_dpcd(ctx,
+                                       link,
+                                       DP_TEST_REQUEST,
+                                       &test_request.raw,
+                                       sizeof(union test_request));
+
+               if (!test_request.bits.EDID_READ)
+                       return edid_status;
+
+               test_response.bits.EDID_CHECKSUM_WRITE = 1;
+
+               dm_helpers_dp_write_dpcd(ctx,
+                                       link,
+                                       DP_TEST_EDID_CHECKSUM,
+                                       &sink->dc_edid.raw_edid[sink->dc_edid.length-1],
+                                       1);
+
+               dm_helpers_dp_write_dpcd(ctx,
+                                       link,
+                                       DP_TEST_RESPONSE,
+                                       &test_response.raw,
+                                       sizeof(test_response));
+
+       }
 
        return edid_status;
 }