--- /dev/null
+From 4b31b92b143f7d209f3d494c56d4c4673e9fc53d Mon Sep 17 00:00:00 2001
+From: Harsh Jain <harsh.jain@amd.com>
+Date: Wed, 2 Nov 2022 15:23:08 +0530
+Subject: drm/amdgpu: complete gfxoff allow signal during suspend without delay
+
+From: Harsh Jain <harsh.jain@amd.com>
+
+commit 4b31b92b143f7d209f3d494c56d4c4673e9fc53d upstream.
+
+change guarantees that gfxoff is allowed before moving further in
+s2idle sequence to add more reliablity about gfxoff in amdgpu IP's
+suspend flow
+
+Signed-off-by: Harsh Jain <harsh.jain@amd.com>
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: "Limonciello, Mario" <Mario.Limonciello@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
+@@ -580,10 +580,14 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_d
+ 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,
++ if (adev->in_s0ix) {
++ if (!amdgpu_dpm_set_powergating_by_smu(adev,
++ AMD_IP_BLOCK_TYPE_GFX, true))
++ adev->gfx.gfx_off_state = true;
++ } else {
++ schedule_delayed_work(&adev->gfx.gfx_off_delay_work,
+ delay);
++ }
+ }
+ } else {
+ if (adev->gfx.gfx_off_req_count == 0) {