VFs are not able to query error counts for all RAS blocks. Rather than
returning error for queries on these blocks, skip sysfs the creation
all together.

Signed-off-by: Victor Skvortsov <victor.skvort...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c  |  3 +++
 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 16 +++++++++++++++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h |  2 ++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index f0924aa3f4e4..0c338dcdde48 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -1864,6 +1864,9 @@ int amdgpu_ras_sysfs_create(struct amdgpu_device *adev,
        if (!obj || obj->attr_inuse)
                return -EINVAL;
 
+       if (amdgpu_sriov_vf(adev) && !amdgpu_virt_ras_telemetry_block_en(adev, 
head->block))
+               return 0;
+
        get_obj(obj);
 
        snprintf(obj->fs_data.sysfs_name, sizeof(obj->fs_data.sysfs_name),
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index 0af469ec6fcc..51ec98501aea 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -1246,7 +1246,7 @@ amdgpu_ras_block_to_sriov(struct amdgpu_device *adev, 
enum amdgpu_ras_block bloc
        case AMDGPU_RAS_BLOCK__MPIO:
                return RAS_TELEMETRY_GPU_BLOCK_MPIO;
        default:
-               dev_err(adev->dev, "Unsupported SRIOV RAS telemetry block 
0x%x\n", block);
+               DRM_DEV_DEBUG(adev->dev, "Unsupported SRIOV RAS telemetry block 
0x%x\n", block);
                return RAS_TELEMETRY_GPU_BLOCK_COUNT;
        }
 }
@@ -1331,3 +1331,17 @@ int amdgpu_virt_ras_telemetry_post_reset(struct 
amdgpu_device *adev)
 
        return 0;
 }
+
+bool amdgpu_virt_ras_telemetry_block_en(struct amdgpu_device *adev,
+                                       enum amdgpu_ras_block block)
+{
+       enum amd_sriov_ras_telemetry_gpu_block sriov_block;
+
+       sriov_block = amdgpu_ras_block_to_sriov(adev, block);
+
+       if (sriov_block >= RAS_TELEMETRY_GPU_BLOCK_COUNT ||
+           !amdgpu_sriov_ras_telemetry_block_en(adev, sriov_block))
+               return false;
+
+       return true;
+}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
index 5381b8d596e6..270a032e2d70 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
@@ -406,4 +406,6 @@ bool amdgpu_virt_get_ras_capability(struct amdgpu_device 
*adev);
 int amdgpu_virt_req_ras_err_count(struct amdgpu_device *adev, enum 
amdgpu_ras_block block,
                                  struct ras_err_data *err_data);
 int amdgpu_virt_ras_telemetry_post_reset(struct amdgpu_device *adev);
+bool amdgpu_virt_ras_telemetry_block_en(struct amdgpu_device *adev,
+                                       enum amdgpu_ras_block block);
 #endif
-- 
2.34.1

Reply via email to