aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/1241-drm-amd-dal-Release-sink-for-MST-connector-when-rese.patch
blob: f300f6ba623e18f1cc3837ee55763fe3a5f1f19f (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
48
From 19c7b18ee85b5150e0afe802d553555050db6134 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 1241/1565] drm/amd/dal: Release sink for MST connector when
 resetting the connector.

Change-Id: Ie94206f5bcdb739fd4eb82ed718ca82a1049977b
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 0ff1ec3..2184985 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
@@ -352,6 +352,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)
-- 
1.9.1