From: abdoulaye berthe <[email protected]>

[Why]
400.1.1 is failing because we are not performing link training when
we get an HPD pulse for the same display. This is breaking DP
compliance

[How]
Always perform link training after HPD pulse if the detection
reason is not  DETECT_REASON_HPDRX.

Change-Id: I75b0639523105d1b4d9d83180e77b177b420f167
Signed-off-by: abdoulaye berthe <[email protected]>
Reviewed-by: Wenjing Liu <[email protected]>
Acked-by: Bhawanpreet Lakha <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/core/dc_link.c | 54 ++++++++++++++-------------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
index b180197a41e2..5b4f14ad1a6e 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
@@ -752,39 +752,41 @@ bool dc_link_detect(struct dc_link *link, enum 
dc_detect_reason reason)
                if ((prev_sink != NULL) && ((edid_status == EDID_THE_SAME) || 
(edid_status == EDID_OK)))
                        same_edid = is_same_edid(&prev_sink->dc_edid, 
&sink->dc_edid);
 
-               // If both edid and dpcd are the same, then discard new sink 
and revert back to original sink
-               if ((same_edid) && (same_dpcd)) {
-                       link_disconnect_remap(prev_sink, link);
-                       sink = prev_sink;
-                       prev_sink = NULL;
-               } else {
-                       if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT 
&&
-                                       sink_caps.transaction_type ==
-                                               
DDC_TRANSACTION_TYPE_I2C_OVER_AUX) {
-                               /*
-                                * TODO debug why Dell 2413 doesn't like
-                                *  two link trainings
-                                */
+               if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT &&
+                       sink_caps.transaction_type == 
DDC_TRANSACTION_TYPE_I2C_OVER_AUX &&
+                       reason != DETECT_REASON_HPDRX) {
+                       /*
+                        * TODO debug why Dell 2413 doesn't like
+                        *  two link trainings
+                        */
 
-                               /* deal with non-mst cases */
-                               for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; 
i++) {
-                                       int fail_count = 0;
+                       /* deal with non-mst cases */
+                       for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) {
+                               int fail_count = 0;
 
-                                       dp_verify_link_cap(link,
-                                                         
&link->reported_link_cap,
-                                                         &fail_count);
+                               dp_verify_link_cap(link,
+                                                 &link->reported_link_cap,
+                                                 &fail_count);
 
-                                       if (fail_count == 0)
-                                               break;
-                               }
+                               if (fail_count == 0)
+                                       break;
                        }
 
-                       /* HDMI-DVI Dongle */
-                       if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
-                                       !sink->edid_caps.edid_hdmi)
-                               sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
+               } else {
+                       // If edid is the same, then discard new sink and 
revert back to original sink
+                       if (same_edid) {
+                               link_disconnect_remap(prev_sink, link);
+                               sink = prev_sink;
+                               prev_sink = NULL;
+
+                       }
                }
 
+               /* HDMI-DVI Dongle */
+               if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
+                               !sink->edid_caps.edid_hdmi)
+                       sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
+
                /* Connectivity log: detection */
                for (i = 0; i < sink->dc_edid.length / EDID_BLOCK_SIZE; i++) {
                        CONN_DATA_DETECT(link,
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to