Check if VCN instances are harvested when controlling
VCN power gating.

Fixes: 1b592d00b4ac83 ("drm/amdgpu/vcn: remove manual instance setting")
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1743
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 .../amd/pm/swsmu/smu11/sienna_cichlid_ppt.c   | 28 +++++--------------
 1 file changed, 7 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
index 15e66e1912de..9326547fe5fb 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
@@ -902,32 +902,18 @@ static int sienna_cichlid_set_default_dpm_table(struct 
smu_context *smu)
 static int sienna_cichlid_dpm_set_vcn_enable(struct smu_context *smu, bool 
enable)
 {
        struct amdgpu_device *adev = smu->adev;
-       int ret = 0;
+       int i, ret = 0;
 
-       if (enable) {
+       for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+               if (adev->vcn.harvest_config & (1 << i))
+                       continue;
                /* vcn dpm on is a prerequisite for vcn power gate messages */
                if (smu_cmn_feature_is_enabled(smu, SMU_FEATURE_MM_DPM_PG_BIT)) 
{
-                       ret = smu_cmn_send_smc_msg_with_param(smu, 
SMU_MSG_PowerUpVcn, 0, NULL);
+                       ret = smu_cmn_send_smc_msg_with_param(smu, enable ?
+                                                             
SMU_MSG_PowerUpVcn : SMU_MSG_PowerDownVcn,
+                                                             0x10000 * i, 
NULL);
                        if (ret)
                                return ret;
-                       if (adev->vcn.num_vcn_inst > 1) {
-                               ret = smu_cmn_send_smc_msg_with_param(smu, 
SMU_MSG_PowerUpVcn,
-                                                                 0x10000, 
NULL);
-                               if (ret)
-                                       return ret;
-                       }
-               }
-       } else {
-               if (smu_cmn_feature_is_enabled(smu, SMU_FEATURE_MM_DPM_PG_BIT)) 
{
-                       ret = smu_cmn_send_smc_msg_with_param(smu, 
SMU_MSG_PowerDownVcn, 0, NULL);
-                       if (ret)
-                               return ret;
-                       if (adev->vcn.num_vcn_inst > 1) {
-                               ret = smu_cmn_send_smc_msg_with_param(smu, 
SMU_MSG_PowerDownVcn,
-                                                                 0x10000, 
NULL);
-                               if (ret)
-                                       return ret;
-                       }
                }
        }
 
-- 
2.31.1

Reply via email to