diff options
| author | Raag Jadav <raag.jadav@intel.com> | 2025-12-20 13:06:56 +0530 |
|---|---|---|
| committer | Rodrigo Vivi <rodrigo.vivi@intel.com> | 2026-01-08 15:35:36 -0500 |
| commit | 644673a69f2b6b7359c78b4a42c5ab17473545f9 (patch) | |
| tree | 4fc1dd1e0f874245202a5eebf7991a75cdb42699 /drivers/gpu | |
| parent | 4e88de313ff4d1c67b644b1f39f9fb4089711b71 (diff) | |
drm/xe/pm: Handle GT resume failure
We've been historically ignoring GT resume failure. Since the function
can return error, handle it properly.
v2: Bring up display before bailing (Matt Roper, Rodrigo)
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Link: https://patch.msgid.link/20251220073657.166810-1-raag.jadav@intel.com
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/xe/xe_pm.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c index 4390ba69610d..559cf5490ac0 100644 --- a/drivers/gpu/drm/xe/xe_pm.c +++ b/drivers/gpu/drm/xe/xe_pm.c @@ -260,10 +260,19 @@ int xe_pm_resume(struct xe_device *xe) xe_irq_resume(xe); - for_each_gt(gt, xe, id) - xe_gt_resume(gt); + for_each_gt(gt, xe, id) { + err = xe_gt_resume(gt); + if (err) + break; + } + /* + * Try to bring up display before bailing from GT resume failure, + * so we don't leave the user clueless with a blank screen. + */ xe_display_pm_resume(xe); + if (err) + goto err; err = xe_bo_restore_late(xe); if (err) @@ -656,10 +665,19 @@ int xe_pm_runtime_resume(struct xe_device *xe) xe_irq_resume(xe); - for_each_gt(gt, xe, id) - xe->d3cold.allowed ? xe_gt_resume(gt) : xe_gt_runtime_resume(gt); + for_each_gt(gt, xe, id) { + err = xe->d3cold.allowed ? xe_gt_resume(gt) : xe_gt_runtime_resume(gt); + if (err) + break; + } + /* + * Try to bring up display before bailing from GT resume failure, + * so we don't leave the user clueless with a blank screen. + */ xe_display_pm_runtime_resume(xe); + if (err) + goto out; if (xe->d3cold.allowed) { err = xe_bo_restore_late(xe); |
