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

Reply via email to