drm/amdgpu: Show current compute partition on VF
authorLijo Lazar <lijo.lazar@amd.com>
Tue, 17 Sep 2024 06:16:44 +0000 (11:46 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Oct 2024 15:20:32 +0000 (11:20 -0400)
Enable sysfs node for current compute partition mode on VFs also.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Vignesh Chander <Vignesh.Chander@amd.com>
Tested-by: Vignesh Chander <Vignesh.Chander@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c

index ae692d0..b6acbe9 100644 (file)
@@ -1604,21 +1604,46 @@ static DEVICE_ATTR(available_compute_partition, 0444,
 
 int amdgpu_gfx_sysfs_init(struct amdgpu_device *adev)
 {
+       struct amdgpu_xcp_mgr *xcp_mgr = adev->xcp_mgr;
+       bool xcp_switch_supported;
        int r;
 
+       if (!xcp_mgr)
+               return 0;
+
+       xcp_switch_supported =
+               (xcp_mgr->funcs && xcp_mgr->funcs->switch_partition_mode);
+
+       if (!xcp_switch_supported)
+               dev_attr_current_compute_partition.attr.mode &=
+                       ~(S_IWUSR | S_IWGRP | S_IWOTH);
+
        r = device_create_file(adev->dev, &dev_attr_current_compute_partition);
        if (r)
                return r;
 
-       r = device_create_file(adev->dev, &dev_attr_available_compute_partition);
+       if (xcp_switch_supported)
+               r = device_create_file(adev->dev,
+                                      &dev_attr_available_compute_partition);
 
        return r;
 }
 
 void amdgpu_gfx_sysfs_fini(struct amdgpu_device *adev)
 {
+       struct amdgpu_xcp_mgr *xcp_mgr = adev->xcp_mgr;
+       bool xcp_switch_supported;
+
+       if (!xcp_mgr)
+               return;
+
+       xcp_switch_supported =
+               (xcp_mgr->funcs && xcp_mgr->funcs->switch_partition_mode);
        device_remove_file(adev->dev, &dev_attr_current_compute_partition);
-       device_remove_file(adev->dev, &dev_attr_available_compute_partition);
+
+       if (xcp_switch_supported)
+               device_remove_file(adev->dev,
+                                  &dev_attr_available_compute_partition);
 }
 
 int amdgpu_gfx_sysfs_isolation_shader_init(struct amdgpu_device *adev)
index ff86707..33371ca 100644 (file)
@@ -1165,12 +1165,9 @@ static int gfx_v9_4_3_sw_init(struct amdgpu_ip_block *ip_block)
        if (r)
                return r;
 
-
-       if (!amdgpu_sriov_vf(adev)) {
-               r = amdgpu_gfx_sysfs_init(adev);
-               if (r)
-                       return r;
-       }
+       r = amdgpu_gfx_sysfs_init(adev);
+       if (r)
+               return r;
 
        gfx_v9_4_3_alloc_ip_dump(adev);
 
@@ -1201,8 +1198,7 @@ static int gfx_v9_4_3_sw_fini(struct amdgpu_ip_block *ip_block)
        gfx_v9_4_3_mec_fini(adev);
        amdgpu_bo_unref(&adev->gfx.rlc.clear_state_obj);
        gfx_v9_4_3_free_microcode(adev);
-       if (!amdgpu_sriov_vf(adev))
-               amdgpu_gfx_sysfs_fini(adev);
+       amdgpu_gfx_sysfs_fini(adev);
        amdgpu_gfx_sysfs_isolation_shader_fini(adev);
 
        kfree(adev->gfx.ip_dump_core);