From 6d9c0236d50e7730bcafb04c3c5855b9251249f7 Mon Sep 17 00:00:00 2001 From: Eric Yang 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 Acked-by: Jordan Lazare --- 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