]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
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>
Fri, 15 Jun 2018 17:22:09 +0000 (12:22 -0500)
Extract edid's checksum and send it back for verification if EDID_TEST
is requested.

Also added a flag for EDID checksum write in TEST_RESPONSE structure,
and simple spelling fix.

Signed-off-by: Mikita Lipski <mikita.lipski@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
drivers/gpu/drm/amd/display/dc/dc_dp_types.h

index bd449351803fb27dffd4fbbf2ad52e56bc458651..dea49dc9b518faabd56f1cb3de5d1472dcd3dee7 100644 (file)
@@ -497,6 +497,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};
+
+               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;
 }
index 90bccd5ccaa2b754a739095e9e36b732c4eeaf23..da93ab43f2d8a8c2c7910309fcd7bbf2300f13cd 100644 (file)
@@ -430,7 +430,7 @@ union test_request {
        struct {
        uint8_t LINK_TRAINING         :1;
        uint8_t LINK_TEST_PATTRN      :1;
-       uint8_t EDID_REAT             :1;
+       uint8_t EDID_READ             :1;
        uint8_t PHY_TEST_PATTERN      :1;
        uint8_t AUDIO_TEST_PATTERN    :1;
        uint8_t RESERVED              :1;
@@ -443,7 +443,8 @@ union test_response {
        struct {
                uint8_t ACK         :1;
                uint8_t NO_ACK      :1;
-               uint8_t RESERVED    :6;
+               uint8_t EDID_CHECKSUM_WRITE:1;
+               uint8_t RESERVED    :5;
        } bits;
        uint8_t raw;
 };