aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0676-drm-amd-dal-Release-sink-for-MST-connector-when-rese.patch
blob: a16b6003360bcb7a526a882eb6146ac7e42142d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From 6b700407c7a426c98575368f2ca3489db1358fc8 Mon Sep 17 00:00:00 2001
From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
Date: Thu, 7 Jan 2016 17:08:15 -0500
Subject: [PATCH 0676/1110] drm/amd/dal: Release sink for MST connector when
 resetting the connector.

Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
Acked-by: Jordan Lazare <Jordan.Lazare@amd.com>
---
 drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c           | 5 +++++
 drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
index 1093ab8..a98d1dd 100644
--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
@@ -789,8 +789,13 @@ static void handle_hpd_irq(void *param)
 	struct amdgpu_connector *aconnector = (struct amdgpu_connector *)param;
 	struct drm_connector *connector = &aconnector->base;
 	struct drm_device *dev = connector->dev;
+	bool mst_connector = aconnector->mst_mgr.mst_state;
 
 	dc_link_detect(aconnector->dc_link);
+	/*Wait for complition of all MST connectors reset
+	 * so the link is clean from sinks. */
+	if (mst_connector && aconnector->dc_link->type == dc_connection_none)
+		flush_work(&aconnector->mst_mgr.destroy_connector_work);
 	amdgpu_dm_update_connector_after_detect(aconnector);
 	drm_kms_helper_hotplug_event(dev);
 }
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 3d36e91..80bd0c6 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
@@ -353,6 +353,8 @@ static void dm_dp_destroy_mst_connector(
 				aconnector, connector->base.id, aconnector->mst_port);
 
 	aconnector->port = NULL;
+	if (aconnector->dc_sink)
+		dc_link_remove_sink(aconnector->dc_link, aconnector->dc_sink);
 }
 
 static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
-- 
2.7.4