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
|