aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0598-drm-amd-dal-do-not-remove-MST-connector-until-reset-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0598-drm-amd-dal-do-not-remove-MST-connector-until-reset-.patch')
-rw-r--r--common/recipes-kernel/linux/files/0598-drm-amd-dal-do-not-remove-MST-connector-until-reset-.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0598-drm-amd-dal-do-not-remove-MST-connector-until-reset-.patch b/common/recipes-kernel/linux/files/0598-drm-amd-dal-do-not-remove-MST-connector-until-reset-.patch
new file mode 100644
index 00000000..84248e1d
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0598-drm-amd-dal-do-not-remove-MST-connector-until-reset-.patch
@@ -0,0 +1,87 @@
+From 7a7302602be80b3033dbd4218be3b8fc8d6b2db0 Mon Sep 17 00:00:00 2001
+From: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Date: Wed, 9 Dec 2015 20:18:00 +0800
+Subject: [PATCH 0598/1110] drm/amd/dal: do not remove MST connector until
+ reset mode
+
+Before MST connector removal we need to make sure reset mode happened
+from user space, and all state is clear
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Acked-by: Harry Wentland<harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 7 +++++++
+ drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c | 5 +++++
+ 2 files changed, 12 insertions(+)
+
+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 16c82a2..733d8aa 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
+@@ -274,6 +274,8 @@ static struct drm_connector *dm_dp_add_mst_connector(struct drm_dp_mst_topology_
+ aconnector->mst_port = master;
+ aconnector->dc_link = master->dc_link;
+
++ sema_init(&aconnector->mst_sem, 1);
++
+ /* Initialize connector state before adding the connectror to drm and framebuffer lists */
+ amdgpu_dm_connector_funcs_reset(connector);
+
+@@ -296,8 +298,13 @@ static void dm_dp_destroy_mst_connector(
+ {
+ struct amdgpu_connector *master =
+ container_of(mgr, struct amdgpu_connector, mst_mgr);
++ struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
+ struct drm_device *dev = master->base.dev;
+ struct amdgpu_device *adev = dev->dev_private;
++
++ /* wait until reset mode occur */
++ down(&aconnector->mst_sem);
++
+ drm_connector_unregister(connector);
+ /* need to nuke the connector */
+ mutex_lock(&dev->mode_config.mutex);
+diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
+index 9f467eb..ea7a623 100644
+--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
+@@ -1856,6 +1856,7 @@ int amdgpu_dm_connector_init(
+ dm->backlight_link = link;
+ }
+ #endif
++ sema_init(&aconnector->mst_sem, 1);
+
+ return 0;
+ }
+@@ -2174,6 +2175,7 @@ int amdgpu_dm_atomic_commit(
+ /* this is the update mode case */
+ dc_target_release(acrtc->target);
+ acrtc->target = NULL;
++ up(&aconnector->mst_sem);
+ }
+
+ /*
+@@ -2187,10 +2189,12 @@ int amdgpu_dm_atomic_commit(
+ acrtc->target = new_target;
+ acrtc->enabled = true;
+ acrtc->base.enabled = true;
++
+ connector_funcs = aconnector->base.helper_private;
+ aconnector->base.encoder =
+ connector_funcs->best_encoder(
+ &aconnector->base);
++ down(&aconnector->mst_sem);
+ break;
+ }
+
+@@ -2209,6 +2213,7 @@ int amdgpu_dm_atomic_commit(
+ acrtc->enabled = false;
+ acrtc->base.enabled = false;
+ aconnector->base.encoder = NULL;
++ up(&aconnector->mst_sem);
+ }
+ break;
+ } /* switch() */
+--
+2.7.4
+