mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
drm/amd: Forbid suspending into non-default suspend states
On systems that default to 'deep' some userspace software likes to try to suspend in 'deep' first. If there is a failure for any reason (such as -ENOMEM) the failure is ignored and then it will try to use 's2idle' as a fallback. This fails, but more importantly it leads to graphical problems. Forbid this behavior and only allow suspending in the last state supported by the system. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4093 Acked-by: Alex Deucher <alexander.deucher@amd.com> Link: https://lore.kernel.org/r/20250408180957.4027643-1-superm1@kernel.org Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
8b2ae7d492
commit
2aabd44aa8
@@ -2571,8 +2571,20 @@ static int amdgpu_pmops_suspend(struct device *dev)
|
||||
adev->in_s0ix = true;
|
||||
else if (amdgpu_acpi_is_s3_active(adev))
|
||||
adev->in_s3 = true;
|
||||
if (!adev->in_s0ix && !adev->in_s3)
|
||||
if (!adev->in_s0ix && !adev->in_s3) {
|
||||
/* don't allow going deep first time followed by s2idle the next time */
|
||||
if (adev->last_suspend_state != PM_SUSPEND_ON &&
|
||||
adev->last_suspend_state != pm_suspend_target_state) {
|
||||
drm_err_once(drm_dev, "Unsupported suspend state %d\n",
|
||||
pm_suspend_target_state);
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* cache the state last used for suspend */
|
||||
adev->last_suspend_state = pm_suspend_target_state;
|
||||
|
||||
return amdgpu_device_suspend(drm_dev, true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user