]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Add additional info from DML
authorNevenko Stupar <Nevenko.Stupar@amd.com>
Wed, 19 Nov 2025 20:13:48 +0000 (15:13 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 8 Dec 2025 18:56:41 +0000 (13:56 -0500)
for DMU when applicable on future platforms.

Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
Signed-off-by: Nevenko Stupar <Nevenko.Stupar@amd.com>
Signed-off-by: Roman Li <roman.li@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c

index 7b09af1cb306e8a2ddd57ad8122815ebb3b1fbb4..602655dd1323b9af4e875afa1d0439f95e962813 100644 (file)
@@ -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);
 }
index a78dab94931664c450026028f0eec5849b8afdb8..3e6797653223ec9d1443f591df812bbce104c567 100644 (file)
@@ -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,