aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0647-drm-amd-dal-Properly-handle-sink-removal.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0647-drm-amd-dal-Properly-handle-sink-removal.patch')
-rw-r--r--common/recipes-kernel/linux/files/0647-drm-amd-dal-Properly-handle-sink-removal.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0647-drm-amd-dal-Properly-handle-sink-removal.patch b/common/recipes-kernel/linux/files/0647-drm-amd-dal-Properly-handle-sink-removal.patch
new file mode 100644
index 00000000..263623a4
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0647-drm-amd-dal-Properly-handle-sink-removal.patch
@@ -0,0 +1,77 @@
+From 6d9c0236d50e7730bcafb04c3c5855b9251249f7 Mon Sep 17 00:00:00 2001
+From: Eric Yang <eric.yang2@amd.com>
+Date: Wed, 23 Dec 2015 10:57:17 -0500
+Subject: [PATCH 0647/1110] drm/amd/dal: Properly handle sink removal
+
+This fixes assert in dc_link_remove_sink when unplug mst display
+
+Signed-off-by: Eric Yang <eric.yang2@amd.com>
+Acked-by: Jordan Lazare <Jordan.Lazare@amd.com>
+---
+ drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 3 ++-
+ drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 13 +++++--------
+ drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 2 ++
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c
+index 7ef2e60..e765f57 100644
+--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c
++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c
+@@ -347,7 +347,8 @@ static void dm_dp_destroy_mst_connector(
+ drm_connector_cleanup(connector);
+ drm_modeset_unlock_all(dev);
+
+- dc_link_remove_sink(aconnector->dc_link, aconnector->dc_sink);
++ if (aconnector->dc_sink)
++ dc_link_remove_sink(aconnector->dc_link, aconnector->dc_sink);
+
+ kfree(aconnector);
+ DRM_DEBUG_KMS("\n");
+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 0bb3799..646706e 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+@@ -522,6 +522,7 @@ void dc_link_detect(const struct dc_link *dc_link)
+ if (dc_helpers_dp_mst_start_top_mgr(
+ link->ctx,
+ &link->public)) {
++ link->mst_enabled = true;
+ return;
+ } else {
+ /* MST not supported */
+@@ -636,15 +637,11 @@ void dc_link_detect(const struct dc_link *dc_link)
+
+ } else {
+ /* From Connected-to-Disconnected. */
+- switch (link->public.connector_signal) {
+- case SIGNAL_TYPE_DISPLAY_PORT:
++ if (link->mst_enabled) {
+ dc_helpers_dp_mst_stop_top_mgr(link->ctx, &link->public);
+- break;
+- default:
+- break;
+- }
+-
+- link_disconnect_all_sinks(link);
++ link->mst_enabled = false;
++ } else
++ link_disconnect_all_sinks(link);
+ }
+
+ LINK_INFO("link=%d, dc_sink_in=%p is now %s\n",
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+index 194b3e0..dc871ad 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+@@ -227,6 +227,8 @@ struct core_link {
+ /* MST record stream using this link */
+ const struct core_stream *enabled_streams[MAX_SINKS_PER_LINK];
+ uint8_t enabled_stream_count;
++
++ bool mst_enabled;
+ };
+
+ #define DC_LINK_TO_LINK(dc_link) container_of(dc_link, struct core_link, public)
+--
+2.7.4
+