@@ -300,7 +300,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_1_soc = {
300
300
.xfc_bus_transport_time_us = 4 ,
301
301
.xfc_xbuf_latency_tolerance_us = 4 ,
302
302
.use_urgent_burst_bw = 1 ,
303
- .num_states = 9
303
+ .num_states = 8
304
304
};
305
305
306
306
#ifndef MAX
@@ -1377,21 +1377,8 @@ static void update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param
1377
1377
unsigned int i , j , k ;
1378
1378
int closest_clk_lvl ;
1379
1379
1380
- // diags does not retrieve proper values from SMU
1381
- // cap states to 5 and make state 5 the max state
1382
- if (IS_FPGA_MAXIMUS_DC (dc -> ctx -> dce_environment ) || IS_DIAG_DC (dc -> ctx -> dce_environment )) {
1383
- dcn2_1_soc .num_states = 5 ;
1384
-
1385
- dcn2_1_soc .clock_limits [5 ].state = 5 ;
1386
- dcn2_1_soc .clock_limits [5 ].dcfclk_mhz = 810.0 ;
1387
- dcn2_1_soc .clock_limits [5 ].fabricclk_mhz = 1600.0 ;
1388
- dcn2_1_soc .clock_limits [5 ].dispclk_mhz = 1395.0 ;
1389
- dcn2_1_soc .clock_limits [5 ].dppclk_mhz = 1285.0 ;
1390
- dcn2_1_soc .clock_limits [5 ].phyclk_mhz = 1325.0 ;
1391
- dcn2_1_soc .clock_limits [5 ].socclk_mhz = 953.0 ;
1392
- dcn2_1_soc .clock_limits [5 ].dscclk_mhz = 489.0 ;
1393
- dcn2_1_soc .clock_limits [5 ].dram_speed_mts = 4266.0 ;
1394
- } else {
1380
+ // Default clock levels are used for diags, which may lead to overclocking.
1381
+ if (!IS_FPGA_MAXIMUS_DC (dc -> ctx -> dce_environment ) && !IS_DIAG_DC (dc -> ctx -> dce_environment )) {
1395
1382
dcn2_1_ip .max_num_otg = pool -> base .res_cap -> num_timing_generator ;
1396
1383
dcn2_1_ip .max_num_dpp = pool -> base .pipe_count ;
1397
1384
dcn2_1_soc .num_chans = bw_params -> num_channels ;
@@ -1404,16 +1391,16 @@ static void update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param
1404
1391
dcn2_1_soc .clock_limits [0 ].dram_speed_mts = clk_table -> entries [0 ].memclk_mhz * 2 ;
1405
1392
1406
1393
/*
1407
- * Other levels: find cloest DCN clocks that fit the given clock limit using dcfclk
1408
- * as indicater
1394
+ * Other levels: find closest DCN clocks that fit the given clock limit using dcfclk
1395
+ * as indicator
1409
1396
*/
1410
1397
1411
1398
closest_clk_lvl = -1 ;
1412
1399
/* index currently being filled */
1413
1400
k = 1 ;
1414
1401
for (i = 1 ; i < clk_table -> num_entries ; i ++ ) {
1415
- /* loop backwards, skip duplicate state, +1 because SMU has precision issue */
1416
- for (j = dcn2_1_soc .num_states - 2 ; j >= k ; j -- ) {
1402
+ /* loop backwards, skip duplicate state*/
1403
+ for (j = dcn2_1_soc .num_states - 1 ; j >= k ; j -- ) {
1417
1404
if ((unsigned int ) dcn2_1_soc .clock_limits [j ].dcfclk_mhz <= clk_table -> entries [i ].dcfclk_mhz ) {
1418
1405
closest_clk_lvl = j ;
1419
1406
break ;
@@ -1438,13 +1425,13 @@ static void update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param
1438
1425
k ++ ;
1439
1426
}
1440
1427
}
1441
-
1442
- /* duplicate last level */
1443
- dcn2_1_soc .clock_limits [k ] = dcn2_1_soc .clock_limits [k - 1 ];
1444
- dcn2_1_soc .clock_limits [k ].state = k ;
1445
- dcn2_1_soc .num_states = k + 1 ;
1428
+ dcn2_1_soc .num_states = k ;
1446
1429
}
1447
1430
1431
+ /* duplicate last level */
1432
+ dcn2_1_soc .clock_limits [dcn2_1_soc .num_states ] = dcn2_1_soc .clock_limits [dcn2_1_soc .num_states - 1 ];
1433
+ dcn2_1_soc .clock_limits [dcn2_1_soc .num_states ].state = dcn2_1_soc .num_states ;
1434
+
1448
1435
dml_init_instance (& dc -> dml , & dcn2_1_soc , & dcn2_1_ip , DML_PROJECT_DCN21 );
1449
1436
}
1450
1437
0 commit comments