--- /dev/null
+From 9cb66d5c2c964ff2759862a06bc16b6ec942d64d Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Tue, 21 Jan 2025 14:11:06 +0100
+Subject: Revert "drm/amdgpu: rework resume handling for display (v2)"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit 2daba7d857e48035d71cdd95964350b6d0d51545 which is
+commit 73dae652dcac776296890da215ee7dec357a1032 upstream.
+
+The original patch 73dae652dcac (drm/amdgpu: rework resume handling for
+display (v2)), was only targeted at kernels 6.11 and newer. It did not
+apply cleanly to 6.12 so I backported it and it backport landed as
+99a02eab8251 ("drm/amdgpu: rework resume handling for display (v2)"),
+however there was a bug in the backport that was subsequently fixed in
+063d380ca28e ("drm/amdgpu: fix backport of commit 73dae652dcac"). None
+of this was intended for kernels older than 6.11, however the original
+backport eventually landed in 6.6, 6.1, and 5.15.
+
+Please revert the change from kernels 6.6, 6.1, and 5.15.
+
+Link: https://lore.kernel.org/r/BL1PR12MB5144D5363FCE6F2FD3502534F7E72@BL1PR12MB5144.namprd12.prod.outlook.com
+Link: https://lore.kernel.org/r/BL1PR12MB51449ADCFBF2314431F8BCFDF7132@BL1PR12MB5144.namprd12.prod.outlook.com
+Reported-by: Salvatore Bonaccorso <carnil@debian.org>
+Reported-by: Christian König <christian.koenig@amd.com>
+Reported-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 45 +----------------------------
+ 1 file changed, 2 insertions(+), 43 deletions(-)
+
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+@@ -3172,7 +3172,7 @@ static int amdgpu_device_ip_resume_phase
+ *
+ * @adev: amdgpu_device pointer
+ *
+- * Second resume function for hardware IPs. The list of all the hardware
++ * First resume function for hardware IPs. The list of all the hardware
+ * IPs that make up the asic is walked and the resume callbacks are run for
+ * all blocks except COMMON, GMC, and IH. resume puts the hardware into a
+ * functional state after a suspend and updates the software state as
+@@ -3190,7 +3190,6 @@ static int amdgpu_device_ip_resume_phase
+ if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
+ adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC ||
+ adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ||
+- adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE ||
+ adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP)
+ continue;
+ r = adev->ip_blocks[i].version->funcs->resume(adev);
+@@ -3206,36 +3205,6 @@ static int amdgpu_device_ip_resume_phase
+ }
+
+ /**
+- * amdgpu_device_ip_resume_phase3 - run resume for hardware IPs
+- *
+- * @adev: amdgpu_device pointer
+- *
+- * Third resume function for hardware IPs. The list of all the hardware
+- * IPs that make up the asic is walked and the resume callbacks are run for
+- * all DCE. resume puts the hardware into a functional state after a suspend
+- * and updates the software state as necessary. This function is also used
+- * for restoring the GPU after a GPU reset.
+- *
+- * Returns 0 on success, negative error code on failure.
+- */
+-static int amdgpu_device_ip_resume_phase3(struct amdgpu_device *adev)
+-{
+- int i, r;
+-
+- for (i = 0; i < adev->num_ip_blocks; i++) {
+- if (!adev->ip_blocks[i].status.valid || adev->ip_blocks[i].status.hw)
+- continue;
+- if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE) {
+- r = adev->ip_blocks[i].version->funcs->resume(adev);
+- if (r)
+- return r;
+- }
+- }
+-
+- return 0;
+-}
+-
+-/**
+ * amdgpu_device_ip_resume - run resume for hardware IPs
+ *
+ * @adev: amdgpu_device pointer
+@@ -3261,13 +3230,6 @@ static int amdgpu_device_ip_resume(struc
+
+ r = amdgpu_device_ip_resume_phase2(adev);
+
+- if (r)
+- return r;
+-
+- amdgpu_fence_driver_hw_init(adev);
+-
+- r = amdgpu_device_ip_resume_phase3(adev);
+-
+ return r;
+ }
+
+@@ -4267,6 +4229,7 @@ int amdgpu_device_resume(struct drm_devi
+ dev_err(adev->dev, "amdgpu_device_ip_resume failed (%d).\n", r);
+ goto exit;
+ }
++ amdgpu_fence_driver_hw_init(adev);
+
+ r = amdgpu_device_ip_late_init(adev);
+ if (r)
+@@ -5036,10 +4999,6 @@ int amdgpu_do_asic_reset(struct list_hea
+ if (r)
+ goto out;
+
+- r = amdgpu_device_ip_resume_phase3(tmp_adev);
+- if (r)
+- goto out;
+-
+ if (vram_lost)
+ amdgpu_device_fill_reset_magic(tmp_adev);
+