drm/amd/display: Populate dcn2.1 bounding box before state duplication
authorSung Lee <sung.lee@amd.com>
Wed, 3 Feb 2021 22:08:39 +0000 (17:08 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 18 Feb 2021 21:43:10 +0000 (16:43 -0500)
[Why]
If system is overclocked, only 1 bounding box state will
be sent by SMU. This results in an empty state being copied
for DML calculations causing black screens and corruption.

[How]
Fully populate bounding box before duplicating last state.

Signed-off-by: Sung Lee <sung.lee@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Qingqing Zhuo <Qingqing.Zhuo@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/dcn21/dcn21_resource.c

index 072f8c8..2b3f049 100644 (file)
@@ -1632,11 +1632,11 @@ static void update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param
                dcn2_1_soc.clock_limits[i] = clock_limits[i];
        if (clk_table->num_entries) {
                dcn2_1_soc.num_states = clk_table->num_entries + 1;
+               /* fill in min DF PState */
+               dcn2_1_soc.clock_limits[1] = construct_low_pstate_lvl(clk_table, closest_clk_lvl);
                /* duplicate last level */
                dcn2_1_soc.clock_limits[dcn2_1_soc.num_states] = dcn2_1_soc.clock_limits[dcn2_1_soc.num_states - 1];
                dcn2_1_soc.clock_limits[dcn2_1_soc.num_states].state = dcn2_1_soc.num_states;
-               /* fill in min DF PState */
-               dcn2_1_soc.clock_limits[1] = construct_low_pstate_lvl(clk_table, closest_clk_lvl);
        }
 
        dml_init_instance(&dc->dml, &dcn2_1_soc, &dcn2_1_ip, DML_PROJECT_DCN21);