drm/amd/powerplay: enable SMC message filter
authorWenhui Sheng <Wenhui.Sheng@amd.com>
Fri, 22 May 2020 04:30:58 +0000 (12:30 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 May 2020 18:00:50 +0000 (14:00 -0400)
1. enable SMC message filter in SRIOV situation
2. return -EACCESS if msg is blocked from smu_msg_get_index
3. if msg is block, always return 0 from smu_v11_0_send_msg_with_param

Signed-off-by: Wenhui Sheng <Wenhui.Sheng@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
drivers/gpu/drm/amd/powerplay/navi10_ppt.c
drivers/gpu/drm/amd/powerplay/smu_v11_0.c

index fad6f3a60dc9443c44ae1d9817250fd3ff2150ba..dcbb273674d143ac60e66809b3eecbc5f75ce1b0 100644 (file)
@@ -208,6 +208,9 @@ static int arcturus_get_smu_msg_index(struct smu_context *smc, uint32_t index)
        if (!(mapping.valid_mapping))
                return -EINVAL;
 
+       if (amdgpu_sriov_vf(smc->adev) && !mapping.valid_in_vf)
+               return -EACCES;
+
        return mapping.map_to;
 }
 
@@ -382,11 +385,6 @@ arcturus_set_single_dpm_table(struct smu_context *smu,
                return ret;
        }
 
-       if (!num_of_levels) {
-               pr_err("[%s] number of clk levels is invalid!\n", __func__);
-               return -EINVAL;
-       }
-
        single_dpm_table->count = num_of_levels;
        for (i = 0; i < num_of_levels; i++) {
                ret = smu_send_smc_msg_with_param(smu,
@@ -397,10 +395,6 @@ arcturus_set_single_dpm_table(struct smu_context *smu,
                        pr_err("[%s] failed to get dpm freq by index!\n", __func__);
                        return ret;
                }
-               if (!clk) {
-                       pr_err("[%s] clk value is invalid!\n", __func__);
-                       return -EINVAL;
-               }
                single_dpm_table->dpm_levels[i].value = clk;
                single_dpm_table->dpm_levels[i].enabled = true;
        }
index 2dd48b2c580be6a1cd360117cf7f8974da7d4d09..5f7373e86d90ed2f99fd20126c439bbe4f6386a1 100644 (file)
@@ -228,6 +228,9 @@ static int navi10_get_smu_msg_index(struct smu_context *smc, uint32_t index)
                return -EINVAL;
        }
 
+       if (amdgpu_sriov_vf(smc->adev) && !mapping.valid_in_vf)
+               return -EACCES;
+
        return mapping.map_to;
 }
 
index dc54c0b115c1af0134bfb173b85a13e61d4ae82f..ddd03289d50ebfbd3867048a76602e2be6d5610b 100644 (file)
@@ -100,7 +100,7 @@ smu_v11_0_send_msg_with_param(struct smu_context *smu,
 
        index = smu_msg_get_index(smu, msg);
        if (index < 0)
-               return index;
+               return index == -EACCES ? 0 : index;
 
        mutex_lock(&smu->message_lock);
        ret = smu_v11_0_wait_for_response(smu);