]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu/gfx11: adjust KGQ reset sequence
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 29 Jan 2026 03:55:46 +0000 (22:55 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 29 Jan 2026 17:39:21 +0000 (12:39 -0500)
Kernel gfx queues do not need to be reinitialized or
remapped after a reset.  This fixes queue reset failures
on APUs.

v2: preserve init and remap for MMIO case.

Fixes: b3e9bfd86658 ("drm/amdgpu/gfx11: add ring reset callbacks")
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4789
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit b340ff216fdabfe71ba0cdd47e9835a141d08e10)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c

index 3b160a67e57a668b55fb61d9d47e44ea85beed09..e642236ea2c511e346512c4797fb7c65a5fe6187 100644 (file)
@@ -6823,11 +6823,12 @@ static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring,
                               struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
+       bool use_mmio = false;
        int r;
 
        amdgpu_ring_reset_helper_begin(ring, timedout_fence);
 
-       r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, false);
+       r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio);
        if (r) {
 
                dev_warn(adev->dev, "reset via MES failed and try pipe reset %d\n", r);
@@ -6836,16 +6837,18 @@ static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring,
                        return r;
        }
 
-       r = gfx_v11_0_kgq_init_queue(ring, true);
-       if (r) {
-               dev_err(adev->dev, "failed to init kgq\n");
-               return r;
-       }
+       if (use_mmio) {
+               r = gfx_v11_0_kgq_init_queue(ring, true);
+               if (r) {
+                       dev_err(adev->dev, "failed to init kgq\n");
+                       return r;
+               }
 
-       r = amdgpu_mes_map_legacy_queue(adev, ring);
-       if (r) {
-               dev_err(adev->dev, "failed to remap kgq\n");
-               return r;
+               r = amdgpu_mes_map_legacy_queue(adev, ring);
+               if (r) {
+                       dev_err(adev->dev, "failed to remap kgq\n");
+                       return r;
+               }
        }
 
        return amdgpu_ring_reset_helper_end(ring, timedout_fence);