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