aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5041-drm-amd-display-DP-Compliance-400.1.1-failure.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5041-drm-amd-display-DP-Compliance-400.1.1-failure.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5041-drm-amd-display-DP-Compliance-400.1.1-failure.patch97
1 files changed, 97 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5041-drm-amd-display-DP-Compliance-400.1.1-failure.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5041-drm-amd-display-DP-Compliance-400.1.1-failure.patch
new file mode 100644
index 00000000..9f348cad
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5041-drm-amd-display-DP-Compliance-400.1.1-failure.patch
@@ -0,0 +1,97 @@
+From 61a1c2efc2b5d836fcd4fffafdc18a1717c3e6c1 Mon Sep 17 00:00:00 2001
+From: abdoulaye berthe <abdoulaye.berthe@amd.com>
+Date: Thu, 19 Jul 2018 15:39:55 -0400
+Subject: [PATCH 5041/5725] drm/amd/display: DP Compliance 400.1.1 failure
+
+[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.
+
+Signed-off-by: abdoulaye berthe <abdoulaye.berthe@amd.com>
+Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ 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 048b8c8..5658eb1 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -764,39 +764,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.7.4
+