drm/xe: Move xe_device_sysfs_init() to xe_device_probe()
authorRaag Jadav <raag.jadav@intel.com>
Tue, 6 May 2025 05:48:33 +0000 (11:18 +0530)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 7 May 2025 19:31:10 +0000 (15:31 -0400)
Since xe_device_sysfs_init() exposes device specific attributes, a better
place for it is xe_device_probe().

Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Riana Tauro <riana.tauro@intel.com>
Link: https://lore.kernel.org/r/20250506054835.3395220-2-raag.jadav@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_device.c
drivers/gpu/drm/xe/xe_device_sysfs.c
drivers/gpu/drm/xe/xe_pm.c

index 75e753e0a68203d727cb9b2541c52d7614236094..c02c4c4e941286a13384b3a1d71649911c49a27a 100644 (file)
@@ -26,6 +26,7 @@
 #include "xe_bo_evict.h"
 #include "xe_debugfs.h"
 #include "xe_devcoredump.h"
+#include "xe_device_sysfs.h"
 #include "xe_dma_buf.h"
 #include "xe_drm_client.h"
 #include "xe_drv.h"
@@ -915,6 +916,10 @@ int xe_device_probe(struct xe_device *xe)
        if (err)
                goto err_unregister_display;
 
+       err = xe_device_sysfs_init(xe);
+       if (err)
+               goto err_unregister_display;
+
        xe_debugfs_register(xe);
 
        err = xe_hwmon_register(xe);
index 7efbd4c52791c2a9d6e6f7b68ba3a701b4eb8b28..d4c73acea1cf9db229001d5f373a2d880b5a2f43 100644 (file)
@@ -67,7 +67,8 @@ static void xe_device_sysfs_fini(void *arg)
 {
        struct xe_device *xe = arg;
 
-       sysfs_remove_file(&xe->drm.dev->kobj, &dev_attr_vram_d3cold_threshold.attr);
+       if (xe->d3cold.capable)
+               sysfs_remove_file(&xe->drm.dev->kobj, &dev_attr_vram_d3cold_threshold.attr);
 }
 
 int xe_device_sysfs_init(struct xe_device *xe)
@@ -75,9 +76,11 @@ int xe_device_sysfs_init(struct xe_device *xe)
        struct device *dev = xe->drm.dev;
        int ret;
 
-       ret = sysfs_create_file(&dev->kobj, &dev_attr_vram_d3cold_threshold.attr);
-       if (ret)
-               return ret;
+       if (xe->d3cold.capable) {
+               ret = sysfs_create_file(&dev->kobj, &dev_attr_vram_d3cold_threshold.attr);
+               if (ret)
+                       return ret;
+       }
 
        return devm_add_action_or_reset(dev, xe_device_sysfs_fini, xe);
 }
index 38514cef817eccc9174b5a163aedf758d2cb0084..693866def1831300f8d74f3c250a695063935dcc 100644 (file)
@@ -16,7 +16,6 @@
 #include "xe_bo.h"
 #include "xe_bo_evict.h"
 #include "xe_device.h"
-#include "xe_device_sysfs.h"
 #include "xe_ggtt.h"
 #include "xe_gt.h"
 #include "xe_guc.h"
@@ -273,6 +272,7 @@ int xe_pm_init_early(struct xe_device *xe)
        if (err)
                return err;
 
+       xe->d3cold.capable = xe_pm_pci_d3cold_capable(xe);
        return 0;
 }
 ALLOW_ERROR_INJECTION(xe_pm_init_early, ERRNO); /* See xe_pci_probe() */
@@ -344,13 +344,7 @@ int xe_pm_init(struct xe_device *xe)
        if (!xe_device_uc_enabled(xe))
                return 0;
 
-       xe->d3cold.capable = xe_pm_pci_d3cold_capable(xe);
-
        if (xe->d3cold.capable) {
-               err = xe_device_sysfs_init(xe);
-               if (err)
-                       goto err_unregister;
-
                vram_threshold = vram_threshold_value(xe);
                err = xe_pm_set_vram_threshold(xe, vram_threshold);
                if (err)