]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: Restrict multi-disp support for in-game FAMS
authorIswara Nagulendran <iswara.nagulendran@amd.com>
Thu, 11 Apr 2024 18:39:50 +0000 (14:39 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 30 Apr 2024 13:53:18 +0000 (09:53 -0400)
[HOW&WHY]
In multi-monitor cases the VBLANK stretch that is required to align both
monitors may be so large that it may create issues for gaming performance.

Use debug value to restrict in-game FAMS support for multi-disp use case.

Reviewed-by: Harry Vanzylldejong <harry.vanzylldejong@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Iswara Nagulendran <iswara.nagulendran@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c
drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c

index a3ebe4f00779886c9faca1713186b642e193037a..3048d5a0e87d12e8bcf4f209f1a4f79bb3954996 100644 (file)
@@ -499,6 +499,12 @@ enum dcc_option {
        DCC_HALF_REQ_DISALBE = 2,
 };
 
+enum in_game_fams_config {
+       INGAME_FAMS_SINGLE_DISP_ENABLE, // enable in-game fams
+       INGAME_FAMS_DISABLE, // disable in-game fams
+       INGAME_FAMS_MULTI_DISP_ENABLE, //enable in-game fams for multi-display
+};
+
 /**
  * enum pipe_split_policy - Pipe split strategy supported by DCN
  *
@@ -951,7 +957,7 @@ struct dc_debug_options {
        /* Enable dmub aux for legacy ddc */
        bool enable_dmub_aux_for_legacy_ddc;
        bool disable_fams;
-       bool disable_fams_gaming;
+       enum in_game_fams_config disable_fams_gaming;
        /* FEC/PSR1 sequence enable delay in 100us */
        uint8_t fec_enable_delay_in100us;
        bool enable_driver_sequence_debug;
index 6472da2c361e18bff87e4ce54687cf8ed2e0b826..a8c36eda1d0962187612def19b10ed227a661b6a 100644 (file)
@@ -580,7 +580,9 @@ struct dc_stream_state *dcn32_can_support_mclk_switch_using_fw_based_vblank_stre
        if (!fpo_candidate_stream->allow_freesync)
                return NULL;
 
-       if (fpo_candidate_stream->vrr_active_variable && dc->debug.disable_fams_gaming)
+       if (fpo_candidate_stream->vrr_active_variable &&
+       ((dc->debug.disable_fams_gaming == INGAME_FAMS_DISABLE) ||
+       (context->stream_count > 1 && !(dc->debug.disable_fams_gaming == INGAME_FAMS_MULTI_DISP_ENABLE))))
                return NULL;
 
        return fpo_candidate_stream;
index fa1305f04341cd4d771eb31b73332d1ac8518941..1ce727351c396693f8fa610b8ef001a90758fb65 100644 (file)
@@ -1996,7 +1996,7 @@ bool dcn30_can_support_mclk_switch_using_fw_based_vblank_stretch(struct dc *dc,
        if (!context->streams[0]->allow_freesync)
                return false;
 
-       if (context->streams[0]->vrr_active_variable && dc->debug.disable_fams_gaming)
+       if (context->streams[0]->vrr_active_variable && (dc->debug.disable_fams_gaming == INGAME_FAMS_DISABLE))
                return false;
 
        context->streams[0]->fpo_in_use = true;