From: Nevenko Stupar <[email protected]> for DMU when applicable on future platforms.
Reviewed-by: Alvin Lee <[email protected]> Signed-off-by: Nevenko Stupar <[email protected]> Signed-off-by: Roman Li <[email protected]> --- drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c | 18 ++++++++++-------- .../amd/display/dc/hwss/dcn401/dcn401_hwseq.c | 7 ++++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c index 7b09af1cb306..602655dd1323 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c +++ b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c @@ -1833,9 +1833,10 @@ static void dc_dmub_srv_rb_based_fams2_update_config(struct dc *dc, /* apply feature configuration based on current driver state */ global_cmd->config.global.features.bits.enable_visual_confirm = dc->debug.visual_confirm == VISUAL_CONFIRM_FAMS2; - global_cmd->config.global.features.bits.enable = enable; + global_cmd->config.global.features.bits.enable = enable && context->bw_ctx.bw.dcn.fams2_global_config.features.bits.enable; + global_cmd->config.global.features.bits.enable_ppt_check = dc->debug.fams2_config.bits.enable_ppt_check; - if (enable && context->bw_ctx.bw.dcn.fams2_global_config.features.bits.enable) { + if (enable) { /* set multi pending for global, and unset for last stream cmd */ global_cmd->header.multi_cmd_pending = 1; cmd[2 * context->bw_ctx.bw.dcn.fams2_global_config.num_streams].fams2_config.header.multi_cmd_pending = 0; @@ -1862,16 +1863,16 @@ static void dc_dmub_srv_ib_based_fams2_update_config(struct dc *dc, cmd.ib_fams2_config.ib_data.src.quad_part = dc->ctx->dmub_srv->dmub->ib_mem_gart.gpu_addr; cmd.ib_fams2_config.ib_data.size = sizeof(*config); - if (enable && context->bw_ctx.bw.dcn.fams2_global_config.features.bits.enable) { + if (enable) { + /* send global configuration parameters */ + memcpy(&config->global, &context->bw_ctx.bw.dcn.fams2_global_config, + sizeof(struct dmub_cmd_fams2_global_config)); + /* copy static feature configuration overrides */ config->global.features.bits.enable_stall_recovery = dc->debug.fams2_config.bits.enable_stall_recovery; config->global.features.bits.enable_offload_flip = dc->debug.fams2_config.bits.enable_offload_flip; config->global.features.bits.enable_debug = dc->debug.fams2_config.bits.enable_debug; - /* send global configuration parameters */ - memcpy(&config->global, &context->bw_ctx.bw.dcn.fams2_global_config, - sizeof(struct dmub_cmd_fams2_global_config)); - /* construct per-stream configs */ for (i = 0; i < context->bw_ctx.bw.dcn.fams2_global_config.num_streams; i++) { /* copy stream static base state */ @@ -1887,7 +1888,8 @@ static void dc_dmub_srv_ib_based_fams2_update_config(struct dc *dc, } config->global.features.bits.enable_visual_confirm = dc->debug.visual_confirm == VISUAL_CONFIRM_FAMS2; - config->global.features.bits.enable = enable; + config->global.features.bits.enable = enable && context->bw_ctx.bw.dcn.fams2_global_config.features.bits.enable; + config->global.features.bits.enable_ppt_check = dc->debug.fams2_config.bits.enable_ppt_check; dm_execute_dmub_cmd_list(dc->ctx, 1, &cmd, DM_DMUB_WAIT_TYPE_WAIT); } diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c index ce50e36a414b..1c4497222f7b 100644 --- a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c @@ -1513,14 +1513,15 @@ void dcn401_dmub_hw_control_lock_fast(union block_sequence_params *params) void dcn401_fams2_update_config(struct dc *dc, struct dc_state *context, bool enable) { - bool fams2_required; + bool fams2_info_required; if (!dc->ctx || !dc->ctx->dmub_srv || !dc->debug.fams2_config.bits.enable) return; - fams2_required = context->bw_ctx.bw.dcn.fams2_global_config.features.bits.enable; + fams2_info_required = context->bw_ctx.bw.dcn.fams2_global_config.features.bits.enable; + fams2_info_required |= context->bw_ctx.bw.dcn.fams2_global_config.features.bits.legacy_method_no_fams2; - dc_dmub_srv_fams2_update_config(dc, context, enable && fams2_required); + dc_dmub_srv_fams2_update_config(dc, context, enable && fams2_info_required); } static void update_dsc_for_odm_change(struct dc *dc, struct dc_state *context, -- 2.34.1
