]> git.ipfire.org Git - thirdparty/linux.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)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 24 Apr 2026 15:10:44 +0000 (11:10 -0400)
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
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 737ef1ef96a5595883fbf390b3d16fdf0735ca35..66ca043658ff8eb8a1eb5e0144ed32818946810d 100644 (file)
@@ -2839,8 +2839,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__);