aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0054-drm-amd-display-Fix-refcount-over-dc_sink.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0054-drm-amd-display-Fix-refcount-over-dc_sink.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0054-drm-amd-display-Fix-refcount-over-dc_sink.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0054-drm-amd-display-Fix-refcount-over-dc_sink.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0054-drm-amd-display-Fix-refcount-over-dc_sink.patch
new file mode 100644
index 00000000..63fda12d
--- /dev/null
+++ b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0054-drm-amd-display-Fix-refcount-over-dc_sink.patch
@@ -0,0 +1,51 @@
+From 6f6a9132b79f55dd25cbcce208aaed806a20d7e5 Mon Sep 17 00:00:00 2001
+From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
+Date: Wed, 7 Dec 2016 14:10:05 -0500
+Subject: [PATCH 0054/4131] drm/amd/display: Fix refcount over dc_sink.
+
+Retain a dc_sink pointer until a new physical pointer
+arrives in case of new display connected.
+
+Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
+Reviewed-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index 88c32c1..2f13465 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -737,9 +737,17 @@ void amdgpu_dm_update_connector_after_detect(
+ mutex_lock(&dev->mode_config.mutex);
+
+ if (sink) {
+- if (aconnector->dc_sink)
++ if (aconnector->dc_sink) {
+ amdgpu_dm_remove_sink_from_freesync_module(
+ connector);
++ /* retain and release bellow are used for
++ * bump up refcount for sink because the link don't point
++ * to it anymore after disconnect so on next crtc to connector
++ * reshuffle by UMD we will get into unwanted dc_sink release
++ */
++ if (aconnector->dc_sink != aconnector->dc_em_sink)
++ dc_sink_release(aconnector->dc_sink);
++ }
+ aconnector->dc_sink = sink;
+ amdgpu_dm_add_sink_to_freesync_module(
+ connector, aconnector->edid);
+@@ -747,6 +755,8 @@ void amdgpu_dm_update_connector_after_detect(
+ amdgpu_dm_remove_sink_from_freesync_module(connector);
+ if (!aconnector->dc_sink)
+ aconnector->dc_sink = aconnector->dc_em_sink;
++ else if (aconnector->dc_sink != aconnector->dc_em_sink)
++ dc_sink_retain(aconnector->dc_sink);
+ }
+
+ mutex_unlock(&dev->mode_config.mutex);
+--
+2.7.4
+