diff --git a/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c --- a/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c +++ b/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c @@ -1202,10 +1202,14 @@ struct phm_ppt_v1_clock_voltage_dependency_table *dep_table) { int i; + uint32_t dep_count = dep_table->count; + + if (dep_count > MAX_REGULAR_DPM_NUMBER) + dep_count = MAX_REGULAR_DPM_NUMBER; dpm_table->count = 0; - for (i = 0; i < dep_table->count; i++) { + for (i = 0; i < dep_count; i++) { if (i == 0 || dpm_table->dpm_levels[dpm_table->count - 1].value <= dep_table->entries[i].clk) { dpm_table->dpm_levels[dpm_table->count].value = @@ -1340,7 +1344,7 @@ data->dpm_table.eclk_table.count = 0; dpm_table = &(data->dpm_table.eclk_table); - for (i = 0; i < dep_mm_table->count; i++) { + for (i = 0; i < min(dep_mm_table->count, (uint32_t)MAX_REGULAR_DPM_NUMBER); i++) { if (i == 0 || dpm_table->dpm_levels [dpm_table->count - 1].value <= dep_mm_table->entries[i].eclk) { @@ -1356,7 +1360,7 @@ data->dpm_table.vclk_table.count = 0; data->dpm_table.dclk_table.count = 0; dpm_table = &(data->dpm_table.vclk_table); - for (i = 0; i < dep_mm_table->count; i++) { + for (i = 0; i < min(dep_mm_table->count, (uint32_t)MAX_REGULAR_DPM_NUMBER); i++) { if (i == 0 || dpm_table->dpm_levels [dpm_table->count - 1].value <= dep_mm_table->entries[i].vclk) { @@ -1370,7 +1374,7 @@ vega10_init_dpm_state(&(dpm_table->dpm_state)); dpm_table = &(data->dpm_table.dclk_table); - for (i = 0; i < dep_mm_table->count; i++) { + for (i = 0; i < min(dep_mm_table->count, (uint32_t)MAX_REGULAR_DPM_NUMBER); i++) { if (i == 0 || dpm_table->dpm_levels [dpm_table->count - 1].value <= dep_mm_table->entries[i].dclk) {