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