diff options
| author | Perry Yuan <perry.yuan@amd.com> | 2026-03-03 16:37:11 +0800 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2026-05-11 15:55:56 -0400 |
| commit | e16d0d16728179fb8eaad93c8a12825eb6746eca (patch) | |
| tree | 4d45dae3f20e242d9d02ae3201efa4f86f20102d /drivers/gpu/drm/amd | |
| parent | 1da21802df3a98d54159bba1d1b04d59f030b92a (diff) | |
| download | lwn-e16d0d16728179fb8eaad93c8a12825eb6746eca.tar.gz lwn-e16d0d16728179fb8eaad93c8a12825eb6746eca.zip | |
drm/amdgpu: create PTL sysfs after XGMI reset-on-init restore
Create PTL sysfs in xgmi_reset_on_init restore path for MINIMAL_XGMI
Signed-off-by: Perry Yuan <perry.yuan@amd.com>
Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/include/amdgpu_ptl.h | 1 |
3 files changed, 21 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index a1db694063b1..aec284c6b6d7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -1543,18 +1543,34 @@ static umode_t amdgpu_ptl_is_visible(struct kobject *kobj, struct attribute *att int amdgpu_ptl_sysfs_init(struct amdgpu_device *adev) { - if (!adev->psp.ptl.hw_supported) + struct amdgpu_ptl *ptl = &adev->psp.ptl; + int ret; + + if (!ptl->hw_supported) return 0; - return sysfs_create_group(&adev->dev->kobj, &amdgpu_ptl_attr_group); + if (ptl->ptl_sysfs_created) + return 0; + + ret = sysfs_create_group(&adev->dev->kobj, &amdgpu_ptl_attr_group); + if (!ret) + ptl->ptl_sysfs_created = true; + + return ret; } void amdgpu_ptl_sysfs_fini(struct amdgpu_device *adev) { - if (!adev->psp.ptl.hw_supported) + struct amdgpu_ptl *ptl = &adev->psp.ptl; + + if (!ptl->hw_supported) + return; + + if (!ptl->ptl_sysfs_created) return; sysfs_remove_group(&adev->dev->kobj, &amdgpu_ptl_attr_group); + ptl->ptl_sysfs_created = false; } int psp_spatial_partition(struct psp_context *psp, int mode) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c index 1b982b803e6f..428c3cbc4a40 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c @@ -90,6 +90,7 @@ static int amdgpu_reset_xgmi_reset_on_init_restore_hwctxt( kgd2kfd_init_zone_device(tmp_adev); amdgpu_amdkfd_device_init(tmp_adev); amdgpu_amdkfd_drm_client_create(tmp_adev); + amdgpu_ptl_sysfs_init(tmp_adev); } } diff --git a/drivers/gpu/drm/amd/include/amdgpu_ptl.h b/drivers/gpu/drm/amd/include/amdgpu_ptl.h index dc74119d91c8..154b8da3bfa9 100644 --- a/drivers/gpu/drm/amd/include/amdgpu_ptl.h +++ b/drivers/gpu/drm/amd/include/amdgpu_ptl.h @@ -49,6 +49,7 @@ struct amdgpu_ptl { atomic_t disable_ref; struct mutex mutex; DECLARE_BITMAP(disable_bitmap, AMDGPU_PTL_DISABLE_MAX); + bool ptl_sysfs_created; }; int amdgpu_ptl_perf_monitor_ctrl(struct amdgpu_device *adev, u32 req_code, |
