OSDN Git Service

drm/amdgpu: Issue ras enable_feature for gfx ip only
authorHawking Zhang <Hawking.Zhang@amd.com>
Mon, 3 Jul 2023 08:17:46 +0000 (16:17 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 7 Aug 2023 21:12:49 +0000 (17:12 -0400)
For non-GFX IP blocks, set up ras obj if ras feature
is allowed. For GFX IP blocks, force issue ras
enable_feature command to firmware and only set up ras
obj if ras feature is allowed

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c

index 664b841..bb29cb5 100644 (file)
@@ -757,16 +757,6 @@ static int __amdgpu_ras_feature_enable(struct amdgpu_device *adev,
        return 0;
 }
 
-static int amdgpu_ras_check_feature_allowed(struct amdgpu_device *adev,
-               struct ras_common_if *head)
-{
-       if (amdgpu_ras_is_feature_allowed(adev, head) ||
-               amdgpu_ras_is_poison_mode_supported(adev))
-               return 1;
-       else
-               return 0;
-}
-
 /* wrapper of psp_ras_enable_features */
 int amdgpu_ras_feature_enable(struct amdgpu_device *adev,
                struct ras_common_if *head, bool enable)
@@ -778,7 +768,16 @@ int amdgpu_ras_feature_enable(struct amdgpu_device *adev,
        if (!con)
                return -EINVAL;
 
-       if (head->block == AMDGPU_RAS_BLOCK__GFX) {
+       /* Do not enable ras feature if it is not allowed */
+       if (enable &&
+           head->block != AMDGPU_RAS_BLOCK__GFX &&
+           !amdgpu_ras_is_feature_allowed(adev, head))
+               goto out;
+
+       /* Only enable gfx ras feature from host side */
+       if (head->block == AMDGPU_RAS_BLOCK__GFX &&
+           !amdgpu_sriov_vf(adev) &&
+           !amdgpu_ras_intr_triggered()) {
                info = kzalloc(sizeof(union ta_ras_cmd_input), GFP_KERNEL);
                if (!info)
                        return -ENOMEM;
@@ -794,16 +793,7 @@ int amdgpu_ras_feature_enable(struct amdgpu_device *adev,
                                .error_type = amdgpu_ras_error_to_ta(head->type),
                        };
                }
-       }
 
-       /* Do not enable if it is not allowed. */
-       if (enable && !amdgpu_ras_check_feature_allowed(adev, head))
-               goto out;
-
-       /* Only enable ras feature operation handle on host side */
-       if (head->block == AMDGPU_RAS_BLOCK__GFX &&
-               !amdgpu_sriov_vf(adev) &&
-               !amdgpu_ras_intr_triggered()) {
                ret = psp_ras_enable_features(&adev->psp, info, enable);
                if (ret) {
                        dev_err(adev->dev, "ras %s %s failed poison:%d ret:%d\n",