On 03-11-2026 03:56, Alan Previn wrote:
When user requests to enter survivabilty via configfs, or if
check_boot_failure is hit inside xe_survivability_mode_is_requested,
no indication is published. This patch adds some awareness in dmesg.

  v4 : - Remove logs from enable_boot_survivability_mode to avoid
         duplication (Riana + Sashiko).
       - Rename xe_survivability_mode_is_requested to
         xe_survivability_mode_is_required since it checks fw state
         on top of configfs request. Refactor to avoid duplicated logs.
  v3 : - Limit message to xe_survivability_mode_is_requested. (Riana)
  v2 : - Remove / modify messages to reflect underlying behavior. (Sashiko)

version history should be moved below ---

Signed-off-by: Alan Previn <[email protected]>
---
  drivers/gpu/drm/xe/xe_device.c             |  2 +-
  drivers/gpu/drm/xe/xe_survivability_mode.c | 46 +++++++++++++---------
  drivers/gpu/drm/xe/xe_survivability_mode.h |  2 +-
  3 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 07a7ab6ac083..608309745328 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -735,7 +735,7 @@ int xe_device_probe_early(struct xe_device *xe)
         * the driver will be blocked
         */
        err = xe_pcode_probe_early(xe);
-       if (err || xe_survivability_mode_is_requested(xe)) {
+       if (err || xe_survivability_mode_is_required(xe)) {
                int save_err = err;
/*
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c 
b/drivers/gpu/drm/xe/xe_survivability_mode.c
index d73cdad0b3a9..0650bbca5f5d 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.c
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
@@ -364,11 +364,6 @@ static int enable_boot_survivability_mode(struct pci_dev 
*pdev)
        if (ret)
                goto failed;
- if (check_boot_failure(xe))
-               xe_log_err_fatal(pdev, SURVIVABILITY, 0, "Boot Mode 
enabled!\n");
-       else
-               xe_log_info(pdev, SURVIVABILITY, "Boot Mode enabled!\n");
-
        return 0;
failed:
@@ -390,17 +385,7 @@ bool xe_survivability_mode_is_boot_enabled(struct 
xe_device *xe)
        return survivability->mode && survivability->type == 
XE_SURVIVABILITY_TYPE_BOOT;
  }
-/**
- * xe_survivability_mode_is_requested - check if it's possible to enable 
survivability
- *                                     mode that was requested by firmware or 
userspace
- * @xe: xe device instance
- *
- * This function reads configfs and  boot status from Pcode.
- *
- * Return: true if platform support is available and boot status indicates
- * failure or if survivability mode is requested, false otherwise.
- */
-bool xe_survivability_mode_is_requested(struct xe_device *xe)
+static bool survivability_mode_required(struct xe_device *xe, bool 
log_on_action)
  {
        struct xe_survivability *survivability = &xe->survivability;
        struct xe_mmio *mmio = xe_root_tile_mmio(xe);
@@ -413,13 +398,36 @@ bool xe_survivability_mode_is_requested(struct xe_device 
*xe)
survivability_mode = xe_configfs_get_survivability_mode(pdev);
        /* Enable survivability mode if set via configfs */
-       if (survivability_mode)
+       if (survivability_mode) {
+               if (log_on_action)

Do we need this parameter? Logging would be helpful anyway.
We should rename the existing function as required instead of adding another function
if param is removed.

Thanks
Riana

+                       xe_log_info(xe, SURVIVABILITY, "Boot mode 
requested.\n");
                return true;
+       }
data = xe_mmio_read32(mmio, PCODE_SCRATCH(0));
        survivability->boot_status = REG_FIELD_GET(BOOT_STATUS, data);
- return check_boot_failure(xe);
+       if (check_boot_failure(xe)) {
+               if (log_on_action)
+                       xe_log_err_fatal(pdev, SURVIVABILITY, 0, "Boot Mode 
required!\n");
+               return true;
+       }
+       return false;
+}
+
+/**
+ * xe_survivability_mode_is_required - check if survivability mode is required 
based on
+ *                                     state of firmware or userspace request.
+ * @xe: xe device instance
+ *
+ * This function reads configfs and boot status from Pcode.
+ *
+ * Return: true if platform support is available and boot status indicates
+ * failure or if survivability mode is requested, false otherwise.
+ */
+bool xe_survivability_mode_is_required(struct xe_device *xe)
+{
+       return survivability_mode_required(xe, true);
  }
/**
@@ -468,7 +476,7 @@ int xe_survivability_mode_boot_enable(struct xe_device *xe)
        struct xe_survivability *survivability = &xe->survivability;
        struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
- if (!xe_survivability_mode_is_requested(xe))
+       if (!survivability_mode_required(xe, false))
                return 0;
populate_survivability_info(xe);
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.h 
b/drivers/gpu/drm/xe/xe_survivability_mode.h
index cd040e4d18bb..a68f071a8055 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.h
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.h
@@ -13,6 +13,6 @@ struct xe_device;
  int xe_survivability_mode_boot_enable(struct xe_device *xe);
  void xe_survivability_mode_runtime_enable(struct xe_device *xe);
  bool xe_survivability_mode_is_boot_enabled(struct xe_device *xe);
-bool xe_survivability_mode_is_requested(struct xe_device *xe);
+bool xe_survivability_mode_is_required(struct xe_device *xe);
#endif /* _XE_SURVIVABILITY_MODE_H_ */

base-commit: 2cd78713d917a02987f21b437561a5e1e13ddda2

Reply via email to