aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0592-drm-amd-dal-fix-issue-when-removing-sinks-where-arra.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0592-drm-amd-dal-fix-issue-when-removing-sinks-where-arra.patch')
-rw-r--r--common/recipes-kernel/linux/files/0592-drm-amd-dal-fix-issue-when-removing-sinks-where-arra.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0592-drm-amd-dal-fix-issue-when-removing-sinks-where-arra.patch b/common/recipes-kernel/linux/files/0592-drm-amd-dal-fix-issue-when-removing-sinks-where-arra.patch
new file mode 100644
index 00000000..3767a7dc
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0592-drm-amd-dal-fix-issue-when-removing-sinks-where-arra.patch
@@ -0,0 +1,48 @@
+From b16aa9724e42f2a9d6f581ab5940f649fe44eea9 Mon Sep 17 00:00:00 2001
+From: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Date: Wed, 9 Dec 2015 19:20:12 +0800
+Subject: [PATCH 0592/1110] drm/amd/dal: fix issue when removing sinks where
+ array index is incorrect
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Acked-by: Harry Wentland<harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+index e7a12e0..fe36786 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+@@ -357,10 +357,13 @@ static bool is_dp_active_dongle(enum display_dongle_type dongle_type)
+
+ static void link_disconnect_all_sinks(struct core_link *link)
+ {
+- int i;
+-
+- for (i = 0; i < link->public.sink_count; i++)
+- dc_link_remove_sink(&link->public, link->public.sink[i]);
++ /*
++ * as sink_count changed inside dc_link_remove_sink, we should not
++ * use it for range check for loop, because half of sinks will not
++ * be removed
++ */
++ while (link->public.sink_count)
++ dc_link_remove_sink(&link->public, link->public.sink[0]);
+
+ link->dpcd_sink_count = 0;
+ }
+@@ -516,7 +519,9 @@ void dc_link_detect(const struct dc_link *dc_link)
+ * ->sink = NULL
+ * TODO: s3 resume check*/
+
+- if (dc_helpers_dp_mst_start_top_mgr(link->ctx, &link->public)) {
++ if (dc_helpers_dp_mst_start_top_mgr(
++ link->ctx,
++ &link->public)) {
+ return;
+ } else {
+ /* MST not supported */
+--
+2.7.4
+