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