]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amdgpu: fix vega20 pstate status change
authorJonathan Kim <jonathan.kim@amd.com>
Wed, 6 Nov 2019 13:20:21 +0000 (08:20 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 7 Nov 2019 23:08:07 +0000 (18:08 -0500)
vega20 only requires all devices be set to same pstate level for low
pstate and not high.

Signed-off-by: Jonathan Kim <Jonathan.Kim@amd.com>
Reviewed-by: Evan Quan <Evan.Quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c

index de20a9a1c444c5870b1c05438bc46605d223695c..61d13d8b7b20dfc9e0f4c8a558f577d557f110b5 100644 (file)
@@ -276,6 +276,7 @@ int amdgpu_xgmi_set_pstate(struct amdgpu_device *adev, int pstate)
        struct amdgpu_hive_info *hive = amdgpu_get_xgmi_hive(adev, 0);
        struct amdgpu_device *tmp_adev;
        bool update_hive_pstate = true;
+       bool is_high_pstate = pstate && adev->asic_type == CHIP_VEGA20;
 
        if (!hive)
                return 0;
@@ -283,8 +284,8 @@ int amdgpu_xgmi_set_pstate(struct amdgpu_device *adev, int pstate)
        mutex_lock(&hive->hive_lock);
 
        if (hive->pstate == pstate) {
-               mutex_unlock(&hive->hive_lock);
-               return 0;
+               adev->pstate = is_high_pstate ? pstate : adev->pstate;
+               goto out;
        }
 
        dev_dbg(adev->dev, "Set xgmi pstate %d.\n", pstate);
@@ -317,7 +318,7 @@ int amdgpu_xgmi_set_pstate(struct amdgpu_device *adev, int pstate)
                        break;
                }
        }
-       if (update_hive_pstate)
+       if (update_hive_pstate || is_high_pstate)
                hive->pstate = pstate;
 
 out: