RE: [PATCH 2/2] drm/amd/powerplay: input check for unsupported message/clock index
Reviewed-by: Feifei Xu -Original Message- From: amd-gfx On Behalf Of Evan Quan Sent: Friday, July 12, 2019 3:35 PM To: amd-gfx@lists.freedesktop.org Cc: Quan, Evan Subject: [PATCH 2/2] drm/amd/powerplay: input check for unsupported message/clock index This can avoid them to be handled in a wrong way without notice. Since not all SMU messages/clocks are supported on every SMU11 ASIC. Change-Id: I440b80833c81066cd36613beae555f2fa068199f Signed-off-by: Evan Quan --- drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 18 drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 31 +++- drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 33 ++ drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 31 +++- 4 files changed, 88 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c index 69a3078181ef..7015fe1011e8 100644 --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c @@ -307,7 +307,7 @@ int smu_update_table(struct smu_context *smu, enum smu_table_id table_index, int ret = 0; int table_id = smu_table_get_index(smu, table_index); - if (!table_data || table_id >= smu_table->table_count) + if (!table_data || table_id >= smu_table->table_count || table_id < 0) return -EINVAL; table = &smu_table->tables[table_index]; @@ -427,10 +427,12 @@ int smu_feature_init_dpm(struct smu_context *smu) int smu_feature_is_enabled(struct smu_context *smu, enum smu_feature_mask mask) { struct smu_feature *feature = &smu->smu_feature; - uint32_t feature_id; + int feature_id; int ret = 0; feature_id = smu_feature_get_index(smu, mask); + if (feature_id < 0) + return 0; WARN_ON(feature_id > feature->feature_num); @@ -445,10 +447,12 @@ int smu_feature_set_enabled(struct smu_context *smu, enum smu_feature_mask mask, bool enable) { struct smu_feature *feature = &smu->smu_feature; - uint32_t feature_id; + int feature_id; int ret = 0; feature_id = smu_feature_get_index(smu, mask); + if (feature_id < 0) + return -EINVAL; WARN_ON(feature_id > feature->feature_num); @@ -471,10 +475,12 @@ int smu_feature_set_enabled(struct smu_context *smu, enum smu_feature_mask mask, int smu_feature_is_supported(struct smu_context *smu, enum smu_feature_mask mask) { struct smu_feature *feature = &smu->smu_feature; - uint32_t feature_id; + int feature_id; int ret = 0; feature_id = smu_feature_get_index(smu, mask); + if (feature_id < 0) + return 0; WARN_ON(feature_id > feature->feature_num); @@ -490,10 +496,12 @@ int smu_feature_set_supported(struct smu_context *smu, bool enable) { struct smu_feature *feature = &smu->smu_feature; - uint32_t feature_id; + int feature_id; int ret = 0; feature_id = smu_feature_get_index(smu, mask); + if (feature_id < 0) + return -EINVAL; WARN_ON(feature_id > feature->feature_num); diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c index e5fa82e10535..4cb0c18b12ce 100644 --- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c +++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c @@ -216,8 +216,10 @@ static int navi10_get_smu_msg_index(struct smu_context *smc, uint32_t index) return -EINVAL; mapping = navi10_message_map[index]; - if (!(mapping.valid_mapping)) + if (!(mapping.valid_mapping)) { + pr_warn("Unsupported SMU message: %d\n", index); return -EINVAL; + } return mapping.map_to; } @@ -230,8 +232,10 @@ static int navi10_get_smu_clk_index(struct smu_context *smc, uint32_t index) return -EINVAL; mapping = navi10_clk_map[index]; - if (!(mapping.valid_mapping)) + if (!(mapping.valid_mapping)) { + pr_warn("Unsupported SMU clock: %d\n", index); return -EINVAL; + } return mapping.map_to; } @@ -244,8 +248,10 @@ static int navi10_get_smu_feature_index(struct smu_context *smc, uint32_t index) return -EINVAL; mapping = navi10_feature_mask_map[index]; - if (!(mapping.valid_mapping)) + if (!(mapping.valid_mapping)) { + pr_warn("Unsupported SMU feature: %d\n", index); return -EINVAL; + } return mapping.map_to; } @@ -258,8 +264,10 @@ static int navi10_get_smu_table_index(struct smu_context *smc, uint32_t index) return -EINVAL; mapping = navi10_table_map[index]; - if (!(mapping.valid_mapping)) + if (!(mapping.valid_mapping)) { +
RE: [PATCH 2/2] drm/amd/powerplay: input check for unsupported message/clock index
Ping.. > -Original Message- > From: Evan Quan > Sent: Friday, July 12, 2019 3:35 PM > To: amd-gfx@lists.freedesktop.org > Cc: Quan, Evan > Subject: [PATCH 2/2] drm/amd/powerplay: input check for unsupported > message/clock index > > This can avoid them to be handled in a wrong way without notice. > Since not all SMU messages/clocks are supported on every SMU11 ASIC. > > Change-Id: I440b80833c81066cd36613beae555f2fa068199f > Signed-off-by: Evan Quan > --- > drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 18 > drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 31 +++- > drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 33 > ++ drivers/gpu/drm/amd/powerplay/vega20_ppt.c > | 31 +++- > 4 files changed, 88 insertions(+), 25 deletions(-) > > diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > index 69a3078181ef..7015fe1011e8 100644 > --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > @@ -307,7 +307,7 @@ int smu_update_table(struct smu_context *smu, > enum smu_table_id table_index, > int ret = 0; > int table_id = smu_table_get_index(smu, table_index); > > - if (!table_data || table_id >= smu_table->table_count) > + if (!table_data || table_id >= smu_table->table_count || table_id < 0) > return -EINVAL; > > table = &smu_table->tables[table_index]; @@ -427,10 +427,12 @@ > int smu_feature_init_dpm(struct smu_context *smu) int > smu_feature_is_enabled(struct smu_context *smu, enum > smu_feature_mask mask) { > struct smu_feature *feature = &smu->smu_feature; > - uint32_t feature_id; > + int feature_id; > int ret = 0; > > feature_id = smu_feature_get_index(smu, mask); > + if (feature_id < 0) > + return 0; > > WARN_ON(feature_id > feature->feature_num); > > @@ -445,10 +447,12 @@ int smu_feature_set_enabled(struct smu_context > *smu, enum smu_feature_mask mask, > bool enable) > { > struct smu_feature *feature = &smu->smu_feature; > - uint32_t feature_id; > + int feature_id; > int ret = 0; > > feature_id = smu_feature_get_index(smu, mask); > + if (feature_id < 0) > + return -EINVAL; > > WARN_ON(feature_id > feature->feature_num); > > @@ -471,10 +475,12 @@ int smu_feature_set_enabled(struct smu_context > *smu, enum smu_feature_mask mask, int > smu_feature_is_supported(struct smu_context *smu, enum > smu_feature_mask mask) { > struct smu_feature *feature = &smu->smu_feature; > - uint32_t feature_id; > + int feature_id; > int ret = 0; > > feature_id = smu_feature_get_index(smu, mask); > + if (feature_id < 0) > + return 0; > > WARN_ON(feature_id > feature->feature_num); > > @@ -490,10 +496,12 @@ int smu_feature_set_supported(struct > smu_context *smu, > bool enable) > { > struct smu_feature *feature = &smu->smu_feature; > - uint32_t feature_id; > + int feature_id; > int ret = 0; > > feature_id = smu_feature_get_index(smu, mask); > + if (feature_id < 0) > + return -EINVAL; > > WARN_ON(feature_id > feature->feature_num); > > diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c > b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c > index e5fa82e10535..4cb0c18b12ce 100644 > --- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c > +++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c > @@ -216,8 +216,10 @@ static int navi10_get_smu_msg_index(struct > smu_context *smc, uint32_t index) > return -EINVAL; > > mapping = navi10_message_map[index]; > - if (!(mapping.valid_mapping)) > + if (!(mapping.valid_mapping)) { > + pr_warn("Unsupported SMU message: %d\n", index); > return -EINVAL; > + } > > return mapping.map_to; > } > @@ -230,8 +232,10 @@ static int navi10_get_smu_clk_index(struct > smu_context *smc, uint32_t index) > return -EINVAL; > > mapping = navi10_clk_map[index]; > - if (!(mapping.valid_mapping)) > + if (!(mapping.valid_mapping)) { > + pr_warn("Unsupported SMU clock: %d\n", index); > return -EINVAL; > + } > > return mapping.map_to; > } > @@ -244,8 +248,10 @@ static int navi10_get_smu_feature_index(struct > smu_context *smc, uint32_t index) > return -EINVAL; > > mapping = navi10_feature_mask_map[index]; > - if (!(mapping.valid_mapping)) > + if (!(mapping.valid_mapping)) { > + pr_warn("Unsupported SMU feature: %d\n", index); > return -EINVAL; > + } > > return mapping.map_to; > } > @@ -258,8 +264,10 @@ static int navi10_get_smu_table_index(struct > smu_context *smc, uint32_t index) > return -EINVAL; > > mapping = navi10_table_map[index]; > - if (!(ma