aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0989-drm-amd-dal-don-t-get-edid-on-mst-disconnect.patch
diff options
context:
space:
mode:
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.patch67
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
+