drm/amd/display: Add workaround flag for EDID read on certain docks
authorJimmy Kizito <Jimmy.Kizito@amd.com>
Tue, 14 Sep 2021 15:37:04 +0000 (11:37 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 Oct 2021 18:26:17 +0000 (14:26 -0400)
[Why]
Certain docks appear to NAK I2C writes to the segment pointer with the
MOT (middle of transaction) bit clear. This behaviour can cause EDID
reads from higher segments to fail.

[How]
Add workaround flag for links which connect to docks exhibiting this
issue.

Cc: Wayne Lin <wayne.lin@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Jimmy Kizito <Jimmy.Kizito@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/dc_link.h

index a1fa50ddf43e5953107fae8575b0f85d1495213c..27b9ff98a569acb526289921df0808c9a93e43cf 100644 (file)
@@ -1765,6 +1765,9 @@ static bool dc_link_construct_dpia(struct dc_link *link,
 
        link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
 
+       /* Some docks seem to NAK I2C writes to segment pointer with mot=0. */
+       link->wa_flags.dp_mot_reset_segment = true;
+
        return true;
 
 ddc_create_fail:
index b991ba1d6f9a418cb5b216433f4c5cf72a3abea2..180ecd860296b250fe40f6d040d6a2a33bb88817 100644 (file)
@@ -190,6 +190,7 @@ struct dc_link {
                bool dp_keep_receiver_powered;
                bool dp_skip_DID2;
                bool dp_skip_reset_segment;
+               bool dp_mot_reset_segment;
        } wa_flags;
        struct link_mst_stream_allocation_table mst_stream_alloc_table;