RE: [PATCH 2/2] drm/amd/powerplay: input check for unsupported message/clock index

2019-07-15 Thread Xu, Feifei


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

2019-07-15 Thread Quan, Evan
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