--- a/sys/dev/drm/amd/powerplay/smumgr/polaris10_smumgr.c +++ b/sys/dev/drm/amd/powerplay/smumgr/polaris10_smumgr.c @@ -654,7 +654,7 @@ count = SMU_MAX_SMIO_LEVELS; for (level = 0; level < count; level++) { table->SmioTable2.Pattern[level].Voltage = - PP_HOST_TO_SMC_US(data->mvdd_voltage_table.entries[count].value * VOLTAGE_SCALE); + PP_HOST_TO_SMC_US(data->mvdd_voltage_table.entries[level].value * VOLTAGE_SCALE); /* Index into DpmTable.Smio. Drive bits from Smio entry to get this voltage level.*/ table->SmioTable2.Pattern[level].Smio = (uint8_t) level; @@ -1180,7 +1180,8 @@ if (SMU7_VOLTAGE_CONTROL_NONE != data->mvdd_control) { /* find mvdd value which clock is more than request */ - for (i = 0; i < table_info->vdd_dep_on_mclk->count; i++) { + for (i = 0; i < table_info->vdd_dep_on_mclk->count && + i < PP_ATOMCTRL_MAX_VOLTAGE_ENTRIES; i++) { if (mclk <= table_info->vdd_dep_on_mclk->entries[i].clk) { smio_pat->Voltage = data->mvdd_voltage_table.entries[i].value; break;