aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0617-drm-amd-display-Preserve-refcount-for-S3-case.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0617-drm-amd-display-Preserve-refcount-for-S3-case.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0617-drm-amd-display-Preserve-refcount-for-S3-case.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0617-drm-amd-display-Preserve-refcount-for-S3-case.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0617-drm-amd-display-Preserve-refcount-for-S3-case.patch
new file mode 100644
index 00000000..4b7f69bd
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0617-drm-amd-display-Preserve-refcount-for-S3-case.patch
@@ -0,0 +1,67 @@
+From b432ad86f8069bdba6b4776790386f23ee6e5755 Mon Sep 17 00:00:00 2001
+From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
+Date: Thu, 13 Jul 2017 10:52:47 -0400
+Subject: [PATCH 0617/4131] drm/amd/display: Preserve refcount for S3 case.
+
+Curent_context is zerroed out for suspend, keep the refcount.
+Minor code move in dc_commit_context_no_check
+
+Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 8e580ac..20f4199 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -977,10 +977,10 @@ static bool dc_commit_context_no_check(struct dc *dc, struct validate_context *c
+
+ dc_release_validate_context(core_dc->current_context);
+
+- dc_retain_validate_context(context);
+-
+ core_dc->current_context = context;
+
++ dc_retain_validate_context(core_dc->current_context);
++
+ return (result == DC_OK);
+ }
+
+@@ -1065,8 +1065,6 @@ bool dc_commit_streams(
+
+ result = dc_commit_context_no_check(dc, context);
+
+- return (result == DC_OK);
+-
+ fail:
+ dc_release_validate_context(context);
+
+@@ -1736,6 +1734,7 @@ void dc_set_power_state(
+ enum dc_acpi_cm_power_state power_state)
+ {
+ struct core_dc *core_dc = DC_TO_CORE(dc);
++ int ref_count;
+
+ switch (power_state) {
+ case DC_ACPI_CM_POWER_STATE_D0:
+@@ -1749,8 +1748,13 @@ void dc_set_power_state(
+ * clean state, and dc hw programming optimizations will not
+ * cause any trouble.
+ */
++
++ /* Preserve refcount */
++ ref_count = core_dc->current_context->ref_count;
++ dc_resource_validate_ctx_destruct(core_dc->current_context);
+ memset(core_dc->current_context, 0,
+ sizeof(*core_dc->current_context));
++ core_dc->current_context->ref_count = ref_count;
+
+ break;
+ }
+--
+2.7.4
+