]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/xe/psmi: Add GuC flag to enable PSMI
authorLucas De Marchi <lucas.demarchi@intel.com>
Thu, 21 Aug 2025 16:17:56 +0000 (09:17 -0700)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 22 Aug 2025 18:46:43 +0000 (11:46 -0700)
PSMI allows to capture data from the GPU useful for early
validation. From the kernel side there isn't much to be done, just a few
things:

1) Toggle the feature support in GuC
2) Enable some additional WAs
3) Allocate buffers

Here is the first step, with the next ones to follow. For now everything
is disabled through a check in configfs that is currently hardcoded to
disabled.

Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Link: https://lore.kernel.org/r/20250821-psmi-v5-1-34ab7550d3d8@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_configfs.h
drivers/gpu/drm/xe/xe_guc.c
drivers/gpu/drm/xe/xe_guc_fwif.h

index fb876400808961b15c41e80239b2370f1fb8f7b9..c14588b86e8338763835588f5ded21af81661946 100644 (file)
@@ -16,12 +16,14 @@ void xe_configfs_exit(void);
 bool xe_configfs_get_survivability_mode(struct pci_dev *pdev);
 void xe_configfs_clear_survivability_mode(struct pci_dev *pdev);
 u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
+static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
 #else
 static inline int xe_configfs_init(void) { return 0; }
 static inline void xe_configfs_exit(void) { }
 static inline bool xe_configfs_get_survivability_mode(struct pci_dev *pdev) { return false; }
 static inline void xe_configfs_clear_survivability_mode(struct pci_dev *pdev) { }
 static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
+static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
 #endif
 
 #endif
index 433abc787f7b04bef86918aa44ec50675daae10a..883f700e532a780cbc711e1246cefad2ff5a0a6b 100644 (file)
@@ -16,6 +16,7 @@
 #include "regs/xe_guc_regs.h"
 #include "regs/xe_irq_regs.h"
 #include "xe_bo.h"
+#include "xe_configfs.h"
 #include "xe_device.h"
 #include "xe_force_wake.h"
 #include "xe_gt.h"
@@ -81,11 +82,15 @@ static u32 guc_ctl_debug_flags(struct xe_guc *guc)
 
 static u32 guc_ctl_feature_flags(struct xe_guc *guc)
 {
+       struct xe_device *xe = guc_to_xe(guc);
        u32 flags = GUC_CTL_ENABLE_LITE_RESTORE;
 
-       if (!guc_to_xe(guc)->info.skip_guc_pc)
+       if (!xe->info.skip_guc_pc)
                flags |= GUC_CTL_ENABLE_SLPC;
 
+       if (xe_configfs_get_psmi_enabled(to_pci_dev(xe->drm.dev)))
+               flags |= GUC_CTL_ENABLE_PSMI_LOGGING;
+
        return flags;
 }
 
index ca9f999d38d1ec9231f22276cfaf9a60c2208cc5..400004f1838a043a1749f8d07f4f7f79b9a94849 100644 (file)
@@ -112,6 +112,7 @@ struct guc_update_exec_queue_policy {
 #define GUC_CTL_FEATURE                        2
 #define   GUC_CTL_ENABLE_SLPC          BIT(2)
 #define   GUC_CTL_ENABLE_LITE_RESTORE  BIT(4)
+#define   GUC_CTL_ENABLE_PSMI_LOGGING  BIT(7)
 #define   GUC_CTL_DISABLE_SCHEDULER    BIT(14)
 
 #define GUC_CTL_DEBUG                  3