Lines Matching +full:boot +full:- +full:enabled
1 // SPDX-License-Identifier: MIT
27 * Survivability Mode is a software based workflow for recovering a system in a failed boot state
28 * Here system recoverability is concerned with recovering the firmware responsible for boot.
30 * Boot Survivability
33 * Boot Survivability is implemented by loading the driver with bare minimum (no drm card) to allow
35 * modified such that it enters survivability mode when pcode initialization is incomplete and boot
41 * In-Field-Repair (IFR) to repair a single card without impacting the other cards in a node.
51 * Survivability mode is indicated by the below admin-only readable sysfs which provides additional
57 * Provides boot status
69 * (:ref:`xe-device-wedging`) requiring a firmware flash to restore normal operation.
97 struct xe_survivability *survivability = &xe->survivability; in populate_survivability_info()
98 struct xe_survivability_info *info = survivability->info; in populate_survivability_info()
132 struct xe_survivability *survivability = &xe->survivability; in log_survivability_info()
133 struct xe_survivability_info *info = survivability->info; in log_survivability_info()
136 dev_info(&pdev->dev, "Survivability Boot Status : Critical Failure (%d)\n", in log_survivability_info()
137 survivability->boot_status); in log_survivability_info()
140 dev_info(&pdev->dev, "%s: 0x%x - 0x%x\n", info[id].name, in log_survivability_info()
147 struct xe_survivability *survivability = &xe->survivability; in check_boot_failure()
149 return survivability->boot_status == NON_CRITICAL_FAILURE || in check_boot_failure()
150 survivability->boot_status == CRITICAL_FAILURE; in check_boot_failure()
158 struct xe_survivability *survivability = &xe->survivability; in survivability_mode_show()
159 struct xe_survivability_info *info = survivability->info; in survivability_mode_show()
163 survivability->type ? "Runtime" : "Boot"); in survivability_mode_show()
170 count += sysfs_emit_at(buff, count, "%s: 0x%x - 0x%x\n", info[index].name, in survivability_mode_show()
182 struct pci_dev *pdev = to_pci_dev(xe->drm.dev); in xe_survivability_mode_fini()
183 struct device *dev = &pdev->dev; in xe_survivability_mode_fini()
185 sysfs_remove_file(&dev->kobj, &dev_attr_survivability_mode.attr); in xe_survivability_mode_fini()
190 struct device *dev = &pdev->dev; in create_survivability_sysfs()
195 ret = sysfs_create_file(&dev->kobj, &dev_attr_survivability_mode.attr); in create_survivability_sysfs()
201 ret = devm_add_action_or_reset(xe->drm.dev, in create_survivability_sysfs()
211 struct device *dev = &pdev->dev; in enable_boot_survivability_mode()
213 struct xe_survivability *survivability = &xe->survivability; in enable_boot_survivability_mode()
221 survivability->mode = true; in enable_boot_survivability_mode()
238 survivability->mode = false; in enable_boot_survivability_mode()
244 struct xe_survivability *survivability = &xe->survivability; in init_survivability_mode()
247 survivability->size = MAX_SCRATCH_MMIO; in init_survivability_mode()
249 info = devm_kcalloc(xe->drm.dev, survivability->size, sizeof(*info), in init_survivability_mode()
252 return -ENOMEM; in init_survivability_mode()
254 survivability->info = info; in init_survivability_mode()
262 * xe_survivability_mode_is_boot_enabled- check if boot survivability mode is enabled
265 * Returns true if in boot survivability mode of type, else false
269 struct xe_survivability *survivability = &xe->survivability; in xe_survivability_mode_is_boot_enabled()
271 return survivability->mode && survivability->type == XE_SURVIVABILITY_TYPE_BOOT; in xe_survivability_mode_is_boot_enabled()
275 * xe_survivability_mode_is_requested - check if it's possible to enable survivability
279 * This function reads configfs and boot status from Pcode.
281 * Return: true if platform support is available and boot status indicates
286 struct xe_survivability *survivability = &xe->survivability; in xe_survivability_mode_is_requested()
288 struct pci_dev *pdev = to_pci_dev(xe->drm.dev); in xe_survivability_mode_is_requested()
292 if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE) in xe_survivability_mode_is_requested()
301 survivability->boot_status = REG_FIELD_GET(BOOT_STATUS, data); in xe_survivability_mode_is_requested()
307 * xe_survivability_mode_runtime_enable - Initialize and enable runtime survivability mode
311 * Runtime survivability mode is enabled when certain errors cause the device to be
312 * in non-recoverable state. The device is declared wedged with the appropriate
315 * Return: 0 if runtime survivability mode is enabled, negative error code otherwise.
319 struct xe_survivability *survivability = &xe->survivability; in xe_survivability_mode_runtime_enable()
320 struct pci_dev *pdev = to_pci_dev(xe->drm.dev); in xe_survivability_mode_runtime_enable()
323 if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE) { in xe_survivability_mode_runtime_enable()
324 dev_err(&pdev->dev, "Runtime Survivability Mode not supported\n"); in xe_survivability_mode_runtime_enable()
325 return -EINVAL; in xe_survivability_mode_runtime_enable()
334 dev_err(&pdev->dev, "Failed to create survivability mode sysfs\n"); in xe_survivability_mode_runtime_enable()
336 survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME; in xe_survivability_mode_runtime_enable()
337 dev_err(&pdev->dev, "Runtime Survivability mode enabled\n"); in xe_survivability_mode_runtime_enable()
341 …dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more… in xe_survivability_mode_runtime_enable()
347 * xe_survivability_mode_boot_enable - Initialize and enable boot survivability mode
350 * Initialize survivability information and enable boot survivability mode
352 * Return: 0 if boot survivability mode is enabled or not requested, negative error
357 struct xe_survivability *survivability = &xe->survivability; in xe_survivability_mode_boot_enable()
358 struct pci_dev *pdev = to_pci_dev(xe->drm.dev); in xe_survivability_mode_boot_enable()
368 /* Log breadcrumbs but do not enter survivability mode for Critical boot errors */ in xe_survivability_mode_boot_enable()
369 if (survivability->boot_status == CRITICAL_FAILURE) { in xe_survivability_mode_boot_enable()
371 return -ENXIO; in xe_survivability_mode_boot_enable()
374 survivability->type = XE_SURVIVABILITY_TYPE_BOOT; in xe_survivability_mode_boot_enable()