diff options
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-.patch | 87 |
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 + |