aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0623-drm-amd-dal-Unblanking-logic-change-in-DM-DC.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0623-drm-amd-dal-Unblanking-logic-change-in-DM-DC.patch')
-rw-r--r--common/recipes-kernel/linux/files/0623-drm-amd-dal-Unblanking-logic-change-in-DM-DC.patch135
1 files changed, 135 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0623-drm-amd-dal-Unblanking-logic-change-in-DM-DC.patch b/common/recipes-kernel/linux/files/0623-drm-amd-dal-Unblanking-logic-change-in-DM-DC.patch
new file mode 100644
index 00000000..d05c9d44
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0623-drm-amd-dal-Unblanking-logic-change-in-DM-DC.patch
@@ -0,0 +1,135 @@
+From 56f1ac8be4cdb4f124348e34d9838fc3df9b5ccf Mon Sep 17 00:00:00 2001
+From: Jun Lei <Jun.Lei@amd.com>
+Date: Tue, 15 Dec 2015 18:08:17 -0500
+Subject: [PATCH 0623/1110] drm/amd/dal: Unblanking logic change in DM/DC
+
+DC should unblank and blank displays in commit_surfaces based on *enabled*
+surfaces rather than just surface count.
+
+Signed-off-by: Jun Lei <Jun.Lei@amd.com>
+Acked-by: Jordan Lazare <Jordan.Lazare@amd.com>
+---
+ .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c | 2 +-
+ drivers/gpu/drm/amd/dal/dc/core/dc_target.c | 36 ++++++++++++++--------
+ drivers/gpu/drm/amd/dal/dc/dc.h | 2 +-
+ 3 files changed, 25 insertions(+), 15 deletions(-)
+
+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 465d9bf..516d321 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
+@@ -492,7 +492,7 @@ static void fill_plane_attributes_from_fb(
+ surface->plane_size.grph.surface_pitch =
+ fb->pitches[0] / (fb->bits_per_pixel / 8);
+
+- surface->enabled = true;
++ surface->visible = true;
+ surface->scaling_quality.h_taps_c = 2;
+ surface->scaling_quality.v_taps_c = 2;
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_target.c b/drivers/gpu/drm/amd/dal/dc/core/dc_target.c
+index 9ae98c5..82cdae1 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_target.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_target.c
+@@ -194,36 +194,46 @@ gamma_param_fail:
+
+ bool dc_commit_surfaces_to_target(
+ struct dc *dc,
+- struct dc_surface *surfaces[],
+- uint8_t surface_count,
++ struct dc_surface *new_surfaces[],
++ uint8_t new_surface_count,
+ struct dc_target *dc_target)
+
+ {
+ uint8_t i, j;
+ struct core_target *target = DC_TARGET_TO_CORE(dc_target);
+- bool need_blanking = (target->status.surface_count == 0);
++
++ bool current_enabled_surface_count = 0;
++ bool new_enabled_surface_count = 0;
++
++ for (i = 0; i < target->status.surface_count; i++)
++ if (target->status.surfaces[i]->visible)
++ current_enabled_surface_count++;
++
++ for (i = 0; i < new_surface_count; i++)
++ if (new_surfaces[i]->visible)
++ new_enabled_surface_count++;
+
+ dal_logger_write(dc->ctx->logger,
+ LOG_MAJOR_INTERFACE_TRACE,
+ LOG_MINOR_COMPONENT_DC,
+ "%s: commit %d surfaces to target 0x%x",
+ __func__,
+- surface_count,
++ new_surface_count,
+ dc_target);
+
+
+ if (!logical_attach_surfaces_to_target(
+- surfaces,
+- surface_count,
++ new_surfaces,
++ new_surface_count,
+ dc_target)) {
+ BREAK_TO_DEBUGGER();
+ goto unexpected_fail;
+ }
+
+- for (i = 0; i < surface_count; i++)
++ for (i = 0; i < new_surface_count; i++)
+ for (j = 0; j < target->public.stream_count; j++)
+ build_scaling_params(
+- surfaces[i],
++ new_surfaces[i],
+ DC_STREAM_TO_CORE(target->public.streams[j]));
+
+ if (dc->hwss.validate_bandwidth(dc, &dc->current_context) != DC_OK) {
+@@ -233,11 +243,11 @@ bool dc_commit_surfaces_to_target(
+
+ dc->hwss.program_bw(dc, &dc->current_context);
+
+- if (need_blanking)
++ if (current_enabled_surface_count > 0 && new_enabled_surface_count == 0)
+ dc_target_disable_memory_requests(dc_target);
+
+- for (i = 0; i < surface_count; i++) {
+- struct dc_surface *surface = surfaces[i];
++ for (i = 0; i < new_surface_count; i++) {
++ struct dc_surface *surface = new_surfaces[i];
+ struct core_surface *core_surface = DC_SURFACE_TO_CORE(surface);
+
+ dal_logger_write(dc->ctx->logger,
+@@ -258,13 +268,13 @@ bool dc_commit_surfaces_to_target(
+ dc->hwss.update_plane_address(core_surface, target);
+ }
+
+- if (surface_count > 0 && need_blanking)
++ if (current_enabled_surface_count == 0 && new_enabled_surface_count > 0)
+ dc_target_enable_memory_requests(dc_target);
+
+ return true;
+
+ unexpected_fail:
+- for (i = 0; i < surface_count; i++) {
++ for (i = 0; i < new_surface_count; i++) {
+ target->status.surfaces[i] = NULL;
+ }
+ target->status.surface_count = 0;
+diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h
+index bbeaf23..264b428 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dc.h
++++ b/drivers/gpu/drm/amd/dal/dc/dc.h
+@@ -58,7 +58,7 @@ void dc_destroy(struct dc **dc);
+ ******************************************************************************/
+
+ struct dc_surface {
+- bool enabled;
++ bool visible;
+ bool flip_immediate;
+ struct dc_plane_address address;
+
+--
+2.7.4
+