aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0629-drm-amd-dal-remove-sink-from-MST-link.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0629-drm-amd-dal-remove-sink-from-MST-link.patch')
-rw-r--r--common/recipes-kernel/linux/files/0629-drm-amd-dal-remove-sink-from-MST-link.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0629-drm-amd-dal-remove-sink-from-MST-link.patch b/common/recipes-kernel/linux/files/0629-drm-amd-dal-remove-sink-from-MST-link.patch
new file mode 100644
index 00000000..0c810ae4
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0629-drm-amd-dal-remove-sink-from-MST-link.patch
@@ -0,0 +1,61 @@
+From 135156ce80dfeb517b3f0bb197c94be978267f6a Mon Sep 17 00:00:00 2001
+From: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Date: Thu, 17 Dec 2015 19:19:08 +0800
+Subject: [PATCH 0629/1110] drm/amd/dal: remove sink from MST link
+
+When we remove MST display downstream, we should remove
+sink during connector destruction.
+
+Also do not report error if sink already removed from link.
+This can happen in case of physical disconnect of mst branch.
+
+Links will be removed in dc_link_detect. But fake removal in
+MST connector destruction is not of harm, as sink not in
+array already
+
+Signed-off-by: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Acked-by: Jordan Lazare <Jordan.Lazare@amd.com>
+---
+ drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 7 +++++--
+ drivers/gpu/drm/amd/dal/dc/core/dc.c | 2 --
+ 2 files changed, 5 insertions(+), 4 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 56ca101..164d80a 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
+@@ -74,7 +74,8 @@ dm_dp_mst_detect(struct drm_connector *connector, bool force)
+ &master->mst_mgr,
+ aconnector->port);
+
+- if (status == connector_status_disconnected && aconnector->dc_sink) {
++ if (status == connector_status_disconnected && aconnector->edid) {
++ kfree(aconnector->edid);
+ aconnector->edid = NULL;
+ }
+
+@@ -334,7 +335,9 @@ static void dm_dp_destroy_mst_connector(
+ drm_connector_cleanup(connector);
+ drm_modeset_unlock_all(dev);
+
+- kfree(connector);
++ 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.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+index a37cd87..4a75cb9 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+@@ -992,6 +992,4 @@ void dc_link_remove_sink(const struct dc_link *link, const struct dc_sink *sink)
+ return;
+ }
+ }
+-
+- BREAK_TO_DEBUGGER();
+ }
+--
+2.7.4
+