aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4066-drm-amd-display-Program-DWB-watermarks-from-correct-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4066-drm-amd-display-Program-DWB-watermarks-from-correct-.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4066-drm-amd-display-Program-DWB-watermarks-from-correct-.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4066-drm-amd-display-Program-DWB-watermarks-from-correct-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4066-drm-amd-display-Program-DWB-watermarks-from-correct-.patch
new file mode 100644
index 00000000..9df5aee1
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4066-drm-amd-display-Program-DWB-watermarks-from-correct-.patch
@@ -0,0 +1,88 @@
+From 8c06029a1c75c844a6365be605a5979bc794b9a4 Mon Sep 17 00:00:00 2001
+From: Julian Parkin <julian.parkin@amd.com>
+Date: Thu, 29 Aug 2019 17:06:05 -0400
+Subject: [PATCH 4066/4256] drm/amd/display: Program DWB watermarks from
+ correct state
+
+[Why]
+When diags adds a DWB via a stream update, we calculate MMHUBBUB
+paramaters, but dc->current_state has not yet been updated
+when the DWB programming happens. This leads to overflow on
+high bandwidth tests since the incorrect MMHUBBUB arbitration
+parameters are programmed.
+
+[How]
+Pass the updated context down to the (enable|update)_writeback functions
+so that they can use the correct watermarks when programming MMHUBBUB.
+
+Signed-off-by: Julian Parkin <julian.parkin@amd.com>
+Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 4 ++--
+ drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 5 +++--
+ drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h | 6 ++++--
+ 3 files changed, 9 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+index 41032c4c5bdf..4431cc6000a1 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+@@ -420,10 +420,10 @@ bool dc_stream_add_writeback(struct dc *dc,
+
+ if (dwb->funcs->is_enabled(dwb)) {
+ /* writeback pipe already enabled, only need to update */
+- dc->hwss.update_writeback(dc, stream_status, wb_info);
++ dc->hwss.update_writeback(dc, stream_status, wb_info, dc->current_state);
+ } else {
+ /* Enable writeback pipe from scratch*/
+- dc->hwss.enable_writeback(dc, stream_status, wb_info);
++ dc->hwss.enable_writeback(dc, stream_status, wb_info, dc->current_state);
+ }
+ }
+
+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 4a0038293569..2dce3e4b5e51 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
+@@ -1626,7 +1626,8 @@ bool dcn20_update_bandwidth(
+ static void dcn20_enable_writeback(
+ struct dc *dc,
+ const struct dc_stream_status *stream_status,
+- struct dc_writeback_info *wb_info)
++ struct dc_writeback_info *wb_info,
++ struct dc_state *context)
+ {
+ struct dwbc *dwb;
+ struct mcif_wb *mcif_wb;
+@@ -1643,7 +1644,7 @@ static void dcn20_enable_writeback(
+ optc->funcs->set_dwb_source(optc, wb_info->dwb_pipe_inst);
+ /* set MCIF_WB buffer and arbitration configuration */
+ mcif_wb->funcs->config_mcif_buf(mcif_wb, &wb_info->mcif_buf_params, wb_info->dwb_params.dest_height);
+- mcif_wb->funcs->config_mcif_arb(mcif_wb, &dc->current_state->bw_ctx.bw.dcn.bw_writeback.mcif_wb_arb[wb_info->dwb_pipe_inst]);
++ mcif_wb->funcs->config_mcif_arb(mcif_wb, &context->bw_ctx.bw.dcn.bw_writeback.mcif_wb_arb[wb_info->dwb_pipe_inst]);
+ /* Enable MCIF_WB */
+ mcif_wb->funcs->enable_mcif(mcif_wb);
+ /* Enable DWB */
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+index de9d0a312180..e775d7aa062f 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+@@ -331,10 +331,12 @@ struct hw_sequencer_funcs {
+ struct dc_state *context);
+ void (*update_writeback)(struct dc *dc,
+ const struct dc_stream_status *stream_status,
+- struct dc_writeback_info *wb_info);
++ struct dc_writeback_info *wb_info,
++ struct dc_state *context);
+ void (*enable_writeback)(struct dc *dc,
+ const struct dc_stream_status *stream_status,
+- struct dc_writeback_info *wb_info);
++ struct dc_writeback_info *wb_info,
++ struct dc_state *context);
+ void (*disable_writeback)(struct dc *dc,
+ unsigned int dwb_pipe_inst);
+ #endif
+--
+2.17.1
+