aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1223-drm-amd-display-PIP-overlay-corruption.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1223-drm-amd-display-PIP-overlay-corruption.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1223-drm-amd-display-PIP-overlay-corruption.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1223-drm-amd-display-PIP-overlay-corruption.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1223-drm-amd-display-PIP-overlay-corruption.patch
new file mode 100644
index 00000000..63a0ff19
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1223-drm-amd-display-PIP-overlay-corruption.patch
@@ -0,0 +1,77 @@
+From 5e37249780287401aaad81db62211370abfe7630 Mon Sep 17 00:00:00 2001
+From: Murton Liu <murton.liu@amd.com>
+Date: Wed, 23 Jan 2019 17:37:57 -0500
+Subject: [PATCH 1223/2940] drm/amd/display: PIP overlay corruption
+
+[Why]
+When moving mouse onto or off of pip plane,
+screen would flash briefly due to garbage negative
+pos values being programmed for cursor.
+Also, text flashes due to PIP flips taking too long.
+
+[How]
+When negative pos value seen, default to 0 and adjust by modifying cursor hotspot.
+For flip issue, only do post update when optimize required vs all the time.
+
+Change-Id: I38990fe0a916306a781ae06147d5d6bd89f3fe92
+Signed-off-by: Murton Liu <murton.liu@amd.com>
+Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+Acked-by: Sivapiriyan Kumarasamy <Sivapiriyan.Kumarasamy@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 3 +++
+ .../gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c | 23 +++++++++++++++++--
+ 2 files changed, 24 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 3a83f24998c4..85cf8535ec69 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -1125,6 +1125,9 @@ bool dc_post_update_surfaces_to_stream(struct dc *dc)
+ int i;
+ struct dc_state *context = dc->current_state;
+
++ if (dc->optimized_required == false)
++ return true;
++
+ post_surface_trace(dc);
+
+ for (i = 0; i < dc->res_pool->pipe_count; i++)
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c
+index 0ba68d41b9c3..683829466a44 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c
+@@ -1150,9 +1150,28 @@ void hubp1_cursor_set_position(
+ REG_UPDATE(CURSOR_CONTROL,
+ CURSOR_ENABLE, cur_en);
+
+- REG_SET_2(CURSOR_POSITION, 0,
+- CURSOR_X_POSITION, pos->x,
++ //account for cases where we see negative offset relative to overlay plane
++ if (src_x_offset < 0 && src_y_offset < 0) {
++ REG_SET_2(CURSOR_POSITION, 0,
++ CURSOR_X_POSITION, 0,
++ CURSOR_Y_POSITION, 0);
++ x_hotspot -= src_x_offset;
++ y_hotspot -= src_y_offset;
++ } else if (src_x_offset < 0) {
++ REG_SET_2(CURSOR_POSITION, 0,
++ CURSOR_X_POSITION, 0,
+ CURSOR_Y_POSITION, pos->y);
++ x_hotspot -= src_x_offset;
++ } else if (src_y_offset < 0) {
++ REG_SET_2(CURSOR_POSITION, 0,
++ CURSOR_X_POSITION, pos->x,
++ CURSOR_Y_POSITION, 0);
++ y_hotspot -= src_y_offset;
++ } else {
++ REG_SET_2(CURSOR_POSITION, 0,
++ CURSOR_X_POSITION, pos->x,
++ CURSOR_Y_POSITION, pos->y);
++ }
+
+ REG_SET_2(CURSOR_HOT_SPOT, 0,
+ CURSOR_HOT_SPOT_X, x_hotspot,
+--
+2.17.1
+