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@xxxxxxx> Change-Id: Iec3d259fd621ee2a043c9b6ec9076e7be4c66442 Reviewed-by: Hawking Zhang <Hawking.Zhang@xxxxxxx> --- drivers/gpu/drm/amd/powerplay/arcturus_ppt.c | 12 +++--------- drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 3 +++ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c index fad6f3a60dc9..dcbb273674d1 100644 --- a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c +++ b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c @@ -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; } diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c index 2dd48b2c580b..5f7373e86d90 100644 --- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c +++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c @@ -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; } diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c index ee9e04dd8155..906bc7f2e686 100644 --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c @@ -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); -- 2.17.1 _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx