From: Nevenko Stupar Date: Wed, 19 Nov 2025 20:13:48 +0000 (-0500) Subject: drm/amd/display: Add additional info from DML X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03282bd20124125394f4540e9c6432615158b671;p=thirdparty%2Fkernel%2Flinux.git drm/amd/display: Add additional info from DML for DMU when applicable on future platforms. Reviewed-by: Alvin Lee Signed-off-by: Nevenko Stupar Signed-off-by: Roman Li Tested-by: Dan Wheeler Signed-off-by: Alex Deucher --- 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 a78dab949316..3e6797653223 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 @@ -1511,14 +1511,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,