diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0989-drm-amd-dal-don-t-get-edid-on-mst-disconnect.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0989-drm-amd-dal-don-t-get-edid-on-mst-disconnect.patch | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0989-drm-amd-dal-don-t-get-edid-on-mst-disconnect.patch b/common/recipes-kernel/linux/files/0989-drm-amd-dal-don-t-get-edid-on-mst-disconnect.patch new file mode 100644 index 00000000..f3700b33 --- /dev/null +++ b/common/recipes-kernel/linux/files/0989-drm-amd-dal-don-t-get-edid-on-mst-disconnect.patch @@ -0,0 +1,67 @@ +From 304ee59a3a95dfaa7a50208c372fadc91e756fd3 Mon Sep 17 00:00:00 2001 +From: Eric Yang <eric.yang2@amd.com> +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 <eric.yang2@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../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 + |