aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4687-drm-amd-display-Disable-chroma-viewport-w-a-when-rot.patch
diff options
context:
space:
mode:
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.patch131
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
+