summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorPerry Yuan <perry.yuan@amd.com>2026-03-03 16:37:11 +0800
committerAlex Deucher <alexander.deucher@amd.com>2026-05-11 15:55:56 -0400
commite16d0d16728179fb8eaad93c8a12825eb6746eca (patch)
tree4d45dae3f20e242d9d02ae3201efa4f86f20102d /drivers/gpu/drm/amd
parent1da21802df3a98d54159bba1d1b04d59f030b92a (diff)
downloadlwn-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.c22
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c1
-rw-r--r--drivers/gpu/drm/amd/include/amdgpu_ptl.h1
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,