Skip to content

Commit e33a8cf

Browse files
committed
drm/amdgpu:/navi10: use the ODCAP enum to index the caps array
Rather than the FEATURE_ID flags. Avoids a possible reading past the end of the array. Reviewed-by: Evan Quan <[email protected]> Reported-by: Aleksandr Mezin <[email protected]> Signed-off-by: Alex Deucher <[email protected]> Cc: [email protected] # 5.5.x
1 parent c1d66bc commit e33a8cf

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

drivers/gpu/drm/amd/powerplay/navi10_ppt.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -736,9 +736,9 @@ static bool navi10_is_support_fine_grained_dpm(struct smu_context *smu, enum smu
736736
return dpm_desc->SnapToDiscrete == 0 ? true : false;
737737
}
738738

739-
static inline bool navi10_od_feature_is_supported(struct smu_11_0_overdrive_table *od_table, enum SMU_11_0_ODFEATURE_ID feature)
739+
static inline bool navi10_od_feature_is_supported(struct smu_11_0_overdrive_table *od_table, enum SMU_11_0_ODFEATURE_CAP cap)
740740
{
741-
return od_table->cap[feature];
741+
return od_table->cap[cap];
742742
}
743743

744744
static void navi10_od_setting_get_range(struct smu_11_0_overdrive_table *od_table,
@@ -846,23 +846,23 @@ static int navi10_print_clk_levels(struct smu_context *smu,
846846
case SMU_OD_SCLK:
847847
if (!smu->od_enabled || !od_table || !od_settings)
848848
break;
849-
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_GFXCLK_LIMITS))
849+
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_GFXCLK_LIMITS))
850850
break;
851851
size += sprintf(buf + size, "OD_SCLK:\n");
852852
size += sprintf(buf + size, "0: %uMhz\n1: %uMhz\n", od_table->GfxclkFmin, od_table->GfxclkFmax);
853853
break;
854854
case SMU_OD_MCLK:
855855
if (!smu->od_enabled || !od_table || !od_settings)
856856
break;
857-
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_UCLK_MAX))
857+
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_UCLK_MAX))
858858
break;
859859
size += sprintf(buf + size, "OD_MCLK:\n");
860860
size += sprintf(buf + size, "1: %uMHz\n", od_table->UclkFmax);
861861
break;
862862
case SMU_OD_VDDC_CURVE:
863863
if (!smu->od_enabled || !od_table || !od_settings)
864864
break;
865-
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_GFXCLK_CURVE))
865+
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_GFXCLK_CURVE))
866866
break;
867867
size += sprintf(buf + size, "OD_VDDC_CURVE:\n");
868868
for (i = 0; i < 3; i++) {
@@ -887,7 +887,7 @@ static int navi10_print_clk_levels(struct smu_context *smu,
887887
break;
888888
size = sprintf(buf, "%s:\n", "OD_RANGE");
889889

890-
if (navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_GFXCLK_LIMITS)) {
890+
if (navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_GFXCLK_LIMITS)) {
891891
navi10_od_setting_get_range(od_settings, SMU_11_0_ODSETTING_GFXCLKFMIN,
892892
&min_value, NULL);
893893
navi10_od_setting_get_range(od_settings, SMU_11_0_ODSETTING_GFXCLKFMAX,
@@ -896,14 +896,14 @@ static int navi10_print_clk_levels(struct smu_context *smu,
896896
min_value, max_value);
897897
}
898898

899-
if (navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_UCLK_MAX)) {
899+
if (navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_UCLK_MAX)) {
900900
navi10_od_setting_get_range(od_settings, SMU_11_0_ODSETTING_UCLKFMAX,
901901
&min_value, &max_value);
902902
size += sprintf(buf + size, "MCLK: %7uMhz %10uMhz\n",
903903
min_value, max_value);
904904
}
905905

906-
if (navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_GFXCLK_CURVE)) {
906+
if (navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_GFXCLK_CURVE)) {
907907
navi10_od_setting_get_range(od_settings, SMU_11_0_ODSETTING_VDDGFXCURVEFREQ_P1,
908908
&min_value, &max_value);
909909
size += sprintf(buf + size, "VDDC_CURVE_SCLK[0]: %7uMhz %10uMhz\n",
@@ -2056,7 +2056,7 @@ static int navi10_od_edit_dpm_table(struct smu_context *smu, enum PP_OD_DPM_TABL
20562056

20572057
switch (type) {
20582058
case PP_OD_EDIT_SCLK_VDDC_TABLE:
2059-
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_GFXCLK_LIMITS)) {
2059+
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_GFXCLK_LIMITS)) {
20602060
pr_warn("GFXCLK_LIMITS not supported!\n");
20612061
return -ENOTSUPP;
20622062
}
@@ -2102,7 +2102,7 @@ static int navi10_od_edit_dpm_table(struct smu_context *smu, enum PP_OD_DPM_TABL
21022102
}
21032103
break;
21042104
case PP_OD_EDIT_MCLK_VDDC_TABLE:
2105-
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_UCLK_MAX)) {
2105+
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_UCLK_MAX)) {
21062106
pr_warn("UCLK_MAX not supported!\n");
21072107
return -ENOTSUPP;
21082108
}
@@ -2143,7 +2143,7 @@ static int navi10_od_edit_dpm_table(struct smu_context *smu, enum PP_OD_DPM_TABL
21432143
}
21442144
break;
21452145
case PP_OD_EDIT_VDDC_CURVE:
2146-
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODFEATURE_GFXCLK_CURVE)) {
2146+
if (!navi10_od_feature_is_supported(od_settings, SMU_11_0_ODCAP_GFXCLK_CURVE)) {
21472147
pr_warn("GFXCLK_CURVE not supported!\n");
21482148
return -ENOTSUPP;
21492149
}

0 commit comments

Comments
 (0)