--- a/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c +++ b/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c @@ -2057,6 +2057,11 @@ static int vega10_populate_clock_stretche struct phm_ppt_v1_clock_voltage_dependency_table *dep_table = table_info->vdd_dep_on_sclk; uint32_t i; + PP_ASSERT_WITH_CODE(dep_table->count <= NUM_GFXCLK_DPM_LEVELS, + "Number Of Entries Exceeded maximum!", + return -1); + for (i = 0; i < dep_table->count; i++) { pp_table->CksEnable[i] = dep_table->entries[i].cks_enable; pp_table->CksVidOffset[i] = (uint8_t)(dep_table->entries[i].cks_voffset @@ -2140,6 +2145,11 @@ static int vega10_populate_avfs_parameters pp_table->AcgAvfsGb.b_shift = 0; + PP_ASSERT_WITH_CODE(dep_table->count <= NUM_GFXCLK_DPM_LEVELS, + "Number Of Entries Exceeded maximum!", + return -1); + for (i = 0; i < dep_table->count; i++) pp_table->StaticVoltageOffsetVid[i] = convert_to_vid((uint8_t)(dep_table->entries[i].sclk_offset)); @@ -2027,6 +2027,11 @@ static int vega10_populate_smc_uvd_levels int result = -EINVAL; uint32_t i, j; + PP_ASSERT_WITH_CODE(dep_table->count <= NUM_UVD_DPM_LEVELS, + "Number Of MM Entries Exceeded maximum!", + return -1); + for (i = 0; i < vclk_dpm_table->count; i++) { result = vega10_populate_single_vclock_level(hwmgr, @@ -1697,6 +1697,12 @@ static void vega10_populate_vddc_soc_leve else vddc_lookup_table = table_info->vddc_lookup_table; + if (vddc_lookup_table->count > NUM_EVV_VOLTAGE_LEVELS) { + pr_info("Number Of VDDC Lookup Entries Exceeded maximum!\n"); + vddc_lookup_table->count = NUM_EVV_VOLTAGE_LEVELS; + } + max_vddc_level = vddc_lookup_table->count; for (i = 0; i < max_vddc_level; i++) {