From 304ee59a3a95dfaa7a50208c372fadc91e756fd3 Mon Sep 17 00:00:00 2001 From: Eric Yang Date: Tue, 29 Mar 2016 17:38:15 -0400 Subject: [PATCH 0989/1110] drm/amd/dal: don't get edid on mst disconnect Change check condition in dm_dp_mst_hotplug such that only on plug in case we get edid from the port for the connector. Also, following the previous change that moved sink creation out of fill_mode ioctl, this change moves freeing the edid block from fill_mode ioctl to dm_dp_destroy_mst_connector. No visible change in behaviour usecase wise. Signed-off-by: Eric Yang Acked-by: Harry Wentland Signed-off-by: Alex Deucher --- .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 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 c00c4d1..d73b246 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 @@ -127,11 +127,6 @@ dm_dp_mst_detect(struct drm_connector *connector, bool force) &master->mst_mgr, aconnector->port); - if (status == connector_status_disconnected && aconnector->edid) { - kfree(aconnector->edid); - aconnector->edid = NULL; - } - /* * we do not want to make this connector connected until we have edid on * it @@ -375,6 +370,14 @@ static void dm_dp_destroy_mst_connector( dc_link_remove_remote_sink(aconnector->dc_link, aconnector->dc_sink); aconnector->dc_sink = NULL; } + if (aconnector->edid) { + kfree(aconnector->edid); + aconnector->edid = NULL; + } + + drm_mode_connector_update_edid_property( + &aconnector->base, + NULL); } static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr) @@ -390,7 +393,11 @@ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr) drm_modeset_lock_all(dev); list_for_each_entry(connector, &dev->mode_config.connector_list, head) { aconnector = to_amdgpu_connector(connector); - if (aconnector->mst_port && !aconnector->dc_sink) { + if (aconnector->port && !aconnector->dc_sink) { + /* + * This is plug in case, where port has been created but + * sink hasn't been created yet + */ if (!aconnector->edid) { edid = drm_dp_mst_get_edid(connector, &aconnector->mst_port->mst_mgr, aconnector->port); -- 2.7.4