]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amdgpu: Avoid reset in AMDGPU unload path for APUs with GFX V11 and higher.
authorShubhankar Milind Sardeshpande <Shubhankar.MilindSardeshpande@amd.com>
Tue, 21 Apr 2026 11:31:21 +0000 (17:01 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 17 May 2026 15:16:31 +0000 (17:16 +0200)
commit 47776ac1e3f4a2aefcf7fe7c7e4a11151b676222 upstream.

GFX V11 has GC block as default off IP.
Every time AMDGPU driver sends a request to PMFW
to unload MP1, PMFW will put GC in reset and
power down the voltage.Hence, skipping reset
for APUs with GFX V11 or later to avoid reset
related failures.

Fixes: 34355e61835e ("drm/amdgpu: Fix GFX hang on SteamDeck when amdgpu is reloaded")
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Shubhankar Milind Sardeshpande <Shubhankar.MilindSardeshpande@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit d0a8cadffc818f51d05bc234d8da1af228bc59a3)
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 6d8531f9b882dd26a1ed60740e556229117a4ca5..2ec69fa05cb1555a02d818264e086b7cd181be02 100644 (file)
@@ -3539,8 +3539,12 @@ static int amdgpu_device_ip_fini_early(struct amdgpu_device *adev)
         * that checks whether the PSP is running. A solution for those issues
         * in the APU is to trigger a GPU reset, but this should be done during
         * the unload phase to avoid adding boot latency and screen flicker.
+        * GFX V11 has GC block as default off IP. Every time AMDGPU driver sends
+        * a request to PMFW to unload MP1, PMFW will put GC in reset and power down
+        * the voltage. Hence, skipping reset for APUs with GFX V11 or later.
         */
-       if ((adev->flags & AMD_IS_APU) && !adev->gmc.is_app_apu) {
+       if ((adev->flags & AMD_IS_APU) && !adev->gmc.is_app_apu &&
+               amdgpu_ip_version(adev, GC_HWIP, 0) < IP_VERSION(11, 0, 0)) {
                r = amdgpu_asic_reset(adev);
                if (r)
                        dev_err(adev->dev, "asic reset on %s failed\n", __func__);