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)

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..b50128cf4b18 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)
+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)
+                       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
-- 
2.43.0

Reply via email to