+++ /dev/null
-From 1d617c029fd9c960f8ba7a8d1a10699d820bd6b9 Mon Sep 17 00:00:00 2001
-From: Lijo Lazar <lijo.lazar@amd.com>
-Date: Fri, 1 Oct 2021 16:49:07 +0800
-Subject: drm/amdgpu: During s0ix don't wait to signal GFXOFF
-
-From: Lijo Lazar <lijo.lazar@amd.com>
-
-commit 1d617c029fd9c960f8ba7a8d1a10699d820bd6b9 upstream.
-
-In the rare event when GFX IP suspend coincides with a s0ix entry, don't
-schedule a delayed work, instead signal PMFW immediately to allow GFXOFF
-entry. GFXOFF is a prerequisite for s0ix entry. PMFW needs to be
-signaled about GFXOFF status before amd-pmc module passes OS HINT
-to PMFW telling that everything is ready for a safe s0ix entry.
-
-Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1712
-
-Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-Reviewed-by: Mario Limonciello <mario.limonciell@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-Cc: stable@vger.kernel.org
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
-
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
-@@ -31,6 +31,8 @@
- /* delay 0.1 second to enable gfx off feature */
- #define GFX_OFF_DELAY_ENABLE msecs_to_jiffies(100)
-
-+#define GFX_OFF_NO_DELAY 0
-+
- /*
- * GPU GFX IP block helpers function.
- */
-@@ -551,6 +553,8 @@ int amdgpu_gfx_enable_kcq(struct amdgpu_
-
- void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
- {
-+ unsigned long delay = GFX_OFF_DELAY_ENABLE;
-+
- if (!(adev->pm.pp_feature & PP_GFXOFF_MASK))
- return;
-
-@@ -566,8 +570,14 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_d
-
- adev->gfx.gfx_off_req_count--;
-
-- if (adev->gfx.gfx_off_req_count == 0 && !adev->gfx.gfx_off_state)
-- schedule_delayed_work(&adev->gfx.gfx_off_delay_work, GFX_OFF_DELAY_ENABLE);
-+ if (adev->gfx.gfx_off_req_count == 0 &&
-+ !adev->gfx.gfx_off_state) {
-+ /* If going to s2idle, no need to wait */
-+ if (adev->in_s0ix)
-+ delay = GFX_OFF_NO_DELAY;
-+ schedule_delayed_work(&adev->gfx.gfx_off_delay_work,
-+ delay);
-+ }
- } else {
- if (adev->gfx.gfx_off_req_count == 0) {
- cancel_delayed_work_sync(&adev->gfx.gfx_off_delay_work);