diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4687-drm-amd-display-Disable-chroma-viewport-w-a-when-rot.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4687-drm-amd-display-Disable-chroma-viewport-w-a-when-rot.patch | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4687-drm-amd-display-Disable-chroma-viewport-w-a-when-rot.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4687-drm-amd-display-Disable-chroma-viewport-w-a-when-rot.patch new file mode 100644 index 00000000..9682d6fb --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4687-drm-amd-display-Disable-chroma-viewport-w-a-when-rot.patch @@ -0,0 +1,131 @@ +From d3fbb8d0c854c97620eed517bd2b48138144f6cd Mon Sep 17 00:00:00 2001 +From: Michael Strauss <michael.strauss@amd.com> +Date: Sun, 10 Nov 2019 15:22:15 -0500 +Subject: [PATCH 4687/4736] drm/amd/display: Disable chroma viewport w/a when + rotated 180 degrees + +[WHY] +Previous Renoir chroma viewport workaround fixed an MPO flicker by +increasing the chroma viewport size. However, when the MPO plane is +rotated 180 degrees, the viewport is read in reverse. Since the workaround +increases viewport size, when reading in reverse it causes a vertical +chroma offset. + +[HOW] +Pass rotation value to viewport set functions +Temporarily disable the chroma viewport w/a when hubp is rotated 180 degrees + +Signed-off-by: Michael Strauss <michael.strauss@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Leo Li <sunpeng.li@amd.com> +--- + drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c | 3 ++- + drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h | 4 +++- + drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 3 ++- + drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 3 ++- + drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c | 7 +++++-- + drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h | 4 +++- + 6 files changed, 17 insertions(+), 7 deletions(-) + +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 31b64733d693..4d1301e5eaf5 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c +@@ -810,7 +810,8 @@ static void hubp1_set_vm_context0_settings(struct hubp *hubp, + void min_set_viewport( + struct hubp *hubp, + const struct rect *viewport, +- const struct rect *viewport_c) ++ const struct rect *viewport_c, ++ enum dc_rotation_angle rotation) + { + struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp); + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h +index 780af5b3c16f..e44eaae5033b 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h +@@ -749,7 +749,9 @@ void hubp1_set_blank(struct hubp *hubp, bool blank); + + void min_set_viewport(struct hubp *hubp, + const struct rect *viewport, +- const struct rect *viewport_c); ++ const struct rect *viewport_c, ++ enum dc_rotation_angle rotation); ++/* rotation angle added for use by hubp21_set_viewport */ + + void hubp1_clk_cntl(struct hubp *hubp, bool enable); + void hubp1_vtg_sel(struct hubp *hubp, uint32_t otg_inst); +diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +index 528a6a953be4..24bebec84316 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +@@ -2288,7 +2288,8 @@ static void dcn10_update_dchubp_dpp( + hubp->funcs->mem_program_viewport( + hubp, + &pipe_ctx->plane_res.scl_data.viewport, +- &pipe_ctx->plane_res.scl_data.viewport_c); ++ &pipe_ctx->plane_res.scl_data.viewport_c, ++ plane_state->rotation); + } + + if (pipe_ctx->stream->cursor_attributes.address.quad_part != 0) { +diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +index d99e882bd555..3e016a57f1ac 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +@@ -1386,7 +1386,8 @@ static void dcn20_update_dchubp_dpp( + hubp->funcs->mem_program_viewport( + hubp, + &pipe_ctx->plane_res.scl_data.viewport, +- &pipe_ctx->plane_res.scl_data.viewport_c); ++ &pipe_ctx->plane_res.scl_data.viewport_c, ++ plane_state->rotation); + + /* Any updates are handled in dc interface, just need to apply existing for plane enable */ + if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed) +diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c +index 4408aed5087b..38661b9c61f8 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c +@@ -169,7 +169,8 @@ static void hubp21_setup( + void hubp21_set_viewport( + struct hubp *hubp, + const struct rect *viewport, +- const struct rect *viewport_c) ++ const struct rect *viewport_c, ++ enum dc_rotation_angle rotation) + { + struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp); + int patched_viewport_height = 0; +@@ -196,9 +197,11 @@ void hubp21_set_viewport( + * Work around for underflow issue with NV12 + rIOMMU translation + * + immediate flip. This will cause hubp underflow, but will not + * be user visible since underflow is in blank region ++ * Disable w/a when rotated 180 degrees, causes vertical chroma offset + */ + patched_viewport_height = viewport_c->height; +- if (viewport_c->height != 0 && debug->nv12_iflip_vm_wa) { ++ if (viewport_c->height != 0 && debug->nv12_iflip_vm_wa && ++ rotation != ROTATION_ANGLE_180) { + int pte_row_height = 0; + int pte_rows = 0; + +diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h b/drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h +index 9793da0f3c7e..85a34dde8526 100644 +--- a/drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h ++++ b/drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h +@@ -82,7 +82,9 @@ struct hubp_funcs { + void (*mem_program_viewport)( + struct hubp *hubp, + const struct rect *viewport, +- const struct rect *viewport_c); ++ const struct rect *viewport_c, ++ enum dc_rotation_angle rotation); ++ /* rotation needed for Renoir workaround */ + + bool (*hubp_program_surface_flip_and_addr)( + struct hubp *hubp, +-- +2.17.1 + |