On Wed, Aug 05, 2026 at 12:41:53PM +0530, Mallesh Koujalagi wrote:
> Add support for handling errors that require a complete
> device power cycle (cold reset) to recover.
>
> Certain error conditions leave the device in a persistent hardware
> error state that cannot be cleared through existing recovery mechanisms
> such as driver reload or PCIe reset. In these cases, functionality can
> only be restored by performing a cold reset.
>
> To support this, the series introduces a new DRM wedging recovery
> method, DRM_WEDGE_RECOVERY_COLD_RESET (BIT(4)). When a device is wedged
> with this method, the DRM core notifies userspace via a uevent that a cold
> reset is required. This allows userspace to take appropriate action to
> power-cycle the device.
>
> Example uevent received:
> SUBSYSTEM=drm
> WEDGED=cold-reset
> DEVPATH=/devices/.../drm/card0
>
> v2:
> - Add use case: Handling errors from power management unit,
> which requires a complete power cycle to
> recover. (Christian)
> - Add several instead of number to avoid update. (Jani)
>
> v3:
> - Update any scenario that requires cold-reset. (Riana)
> - Update document with generic scenario. (Riana)
> - Consistent with terminology. (Raag)
> - Remove already covered information.
> - Use PUNIT instead of PMU. (Riana)
> - Use consistent wordingi.
> - Remove log. (Raag)
>
> v4:
> - Rename cold reset to power cyclce. (Raag)
> - Update doc. (Raag/Riana)
> - Change commit message. (Raag)
> - Make function static. (Raag)
>
> v5:
> - Make it consistent with consumer expectations. (Raag)
> - Update commit message.
> - Remove unbind.
> - Simplify cold-reset script.
> - Remove kdoc for static function.
> - Remove xe_ prefix for static function.
>
> v6:
> - Drop "last resort" wording. (Riana)
> - Look up the hotplug slot in DEVPATH instead of scanning
> every PCI slot on the system. (Raag)
> - Drop arbitrary sleep values from the example script.
> - Expand commit message to explain why SUR_DN is masked. (Raag/Riana)
> - Check Slot Implemented bit before reading Slot Capabilities, per
> PCIe spec. (Riana)
> - Add debug log.
>
> v7:
> - Update recovery script. (Raag)
> - Handle surprise link down event properly. (Aravind/Riana)
> - Update commit message. (Riana)
> - Correct log message.
>
> v8:
> - Add rescan instead of reset. (Raag)
> - Use find_usp_dev() in punit_error_handler() function.
>
> v9:
> - Remove unwanted header. (Sashiko)
> - Removed #ifdef CONFIG_PCIEAER. (Riana)
> - Used pci_find_ext_capability() instead of usp->aer_cap.
> - Clear the PCI_ERR_UNC_SURPDN status bit (W1C) after
> reset complete. (Lukas Wunner)
> - Use pci_clear_and_set_config_dword() helper.
>
> v10:
> - Rebase.
> - Fix column width. (Sashiko)
>
> v11:
> - Make udev rules in single line. (Sashiko)
>
> v12:
> - Trigger punit handler using fault-inject.
>
> v13:
> - Rebase.
> - Rename inject_punit_error to wedge_cold_reset. (Riana)
> - Sashiko corner case issue addressed with
> commit 20bc4883c7c0 ("drm/xe/ras: Fix boot-time ras error processing").
pushed to drm-xe-next, thanks for the patch, reviews and acks
>
> Cc: André Almeida <[email protected]>
> Cc: Christian König <[email protected]>
> Cc: David Airlie <[email protected]>
> Cc: Simona Vetter <[email protected]>
> Cc: Maxime Ripard <[email protected]>
> Cc: Maarten Lankhorst <[email protected]>
> Cc: Thomas Zimmermann <[email protected]>
>
> Mallesh Koujalagi (4):
> drm: Add DRM_WEDGE_RECOVERY_COLD_RESET recovery method
> drm/doc: Document DRM_WEDGE_RECOVERY_COLD_RESET recovery method
> drm/xe: Handle PUNIT errors by requesting cold-reset recovery
> drm/xe/ras: Use fault-inject to trigger cold-reset wedge
>
> Documentation/gpu/drm-uapi.rst | 93 +++++++++++++++++++++++++++++++--
> drivers/gpu/drm/drm_drv.c | 2 +
> drivers/gpu/drm/xe/xe_debugfs.c | 4 ++
> drivers/gpu/drm/xe/xe_debugfs.h | 2 +
> drivers/gpu/drm/xe/xe_ras.c | 15 +++++-
> include/drm/drm_device.h | 1 +
> 6 files changed, 111 insertions(+), 6 deletions(-)
>
> --
> 2.48.1
>