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