99 lines
3.1 KiB
Diff
99 lines
3.1 KiB
Diff
From dca14df8b269f207ac834149126964039142b596 Mon Sep 17 00:00:00 2001
|
|
From: Alex Deucher <alexander.deucher@amd.com>
|
|
Date: Thu, 1 May 2025 13:00:16 -0400
|
|
Subject: Revert "drm/amd: Stop evicting resources on APUs in suspend"
|
|
|
|
This reverts commit 3a9626c816db901def438dc2513622e281186d39.
|
|
|
|
This breaks S4 because we end up setting the s3/s0ix flags
|
|
even when we are entering s4 since prepare is used by both
|
|
flows. The causes both the S3/s0ix and s4 flags to be set
|
|
which breaks several checks in the driver which assume they
|
|
are mutually exclusive.
|
|
|
|
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3634
|
|
Cc: Mario Limonciello <mario.limonciello@amd.com>
|
|
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
---
|
|
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 --
|
|
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 18 ------------------
|
|
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 11 ++---------
|
|
3 files changed, 2 insertions(+), 29 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
|
@@ -1594,11 +1594,9 @@ static inline void amdgpu_acpi_get_backl
|
|
#if defined(CONFIG_ACPI) && defined(CONFIG_SUSPEND)
|
|
bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev);
|
|
bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev);
|
|
-void amdgpu_choose_low_power_state(struct amdgpu_device *adev);
|
|
#else
|
|
static inline bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev) { return false; }
|
|
static inline bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev) { return false; }
|
|
-static inline void amdgpu_choose_low_power_state(struct amdgpu_device *adev) { }
|
|
#endif
|
|
|
|
void amdgpu_register_gpu_instance(struct amdgpu_device *adev);
|
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
|
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
|
|
@@ -1533,22 +1533,4 @@ bool amdgpu_acpi_is_s0ix_active(struct a
|
|
#endif /* CONFIG_AMD_PMC */
|
|
}
|
|
|
|
-/**
|
|
- * amdgpu_choose_low_power_state
|
|
- *
|
|
- * @adev: amdgpu_device_pointer
|
|
- *
|
|
- * Choose the target low power state for the GPU
|
|
- */
|
|
-void amdgpu_choose_low_power_state(struct amdgpu_device *adev)
|
|
-{
|
|
- if (adev->in_runpm)
|
|
- return;
|
|
-
|
|
- if (amdgpu_acpi_is_s0ix_active(adev))
|
|
- adev->in_s0ix = true;
|
|
- else if (amdgpu_acpi_is_s3_active(adev))
|
|
- adev->in_s3 = true;
|
|
-}
|
|
-
|
|
#endif /* CONFIG_SUSPEND */
|
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
@@ -4861,15 +4861,13 @@ int amdgpu_device_prepare(struct drm_dev
|
|
struct amdgpu_device *adev = drm_to_adev(dev);
|
|
int i, r;
|
|
|
|
- amdgpu_choose_low_power_state(adev);
|
|
-
|
|
if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
|
|
return 0;
|
|
|
|
/* Evict the majority of BOs before starting suspend sequence */
|
|
r = amdgpu_device_evict_resources(adev);
|
|
if (r)
|
|
- goto unprepare;
|
|
+ return r;
|
|
|
|
flush_delayed_work(&adev->gfx.gfx_off_delay_work);
|
|
|
|
@@ -4880,15 +4878,10 @@ int amdgpu_device_prepare(struct drm_dev
|
|
continue;
|
|
r = adev->ip_blocks[i].version->funcs->prepare_suspend(&adev->ip_blocks[i]);
|
|
if (r)
|
|
- goto unprepare;
|
|
+ return r;
|
|
}
|
|
|
|
return 0;
|
|
-
|
|
-unprepare:
|
|
- adev->in_s0ix = adev->in_s3 = adev->in_s4 = false;
|
|
-
|
|
- return r;
|
|
}
|
|
|
|
/**
|