diff options
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.patch | 97 |
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 + |