Skip to content

Commit b340ff2

Browse files
committed
drm/amdgpu/gfx11: adjust KGQ reset sequence
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: b3e9bfd ("drm/amdgpu/gfx11: add ring reset callbacks") Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4789 Reviewed-by: Timur Kristóf <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent a2918f9 commit b340ff2

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6828,11 +6828,12 @@ static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring,
68286828
struct amdgpu_fence *timedout_fence)
68296829
{
68306830
struct amdgpu_device *adev = ring->adev;
6831+
bool use_mmio = false;
68316832
int r;
68326833

68336834
amdgpu_ring_reset_helper_begin(ring, timedout_fence);
68346835

6835-
r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, false, 0);
6836+
r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio, 0);
68366837
if (r) {
68376838

68386839
dev_warn(adev->dev, "reset via MES failed and try pipe reset %d\n", r);
@@ -6841,16 +6842,18 @@ static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring,
68416842
return r;
68426843
}
68436844

6844-
r = gfx_v11_0_kgq_init_queue(ring, true);
6845-
if (r) {
6846-
dev_err(adev->dev, "failed to init kgq\n");
6847-
return r;
6848-
}
6845+
if (use_mmio) {
6846+
r = gfx_v11_0_kgq_init_queue(ring, true);
6847+
if (r) {
6848+
dev_err(adev->dev, "failed to init kgq\n");
6849+
return r;
6850+
}
68496851

6850-
r = amdgpu_mes_map_legacy_queue(adev, ring, 0);
6851-
if (r) {
6852-
dev_err(adev->dev, "failed to remap kgq\n");
6853-
return r;
6852+
r = amdgpu_mes_map_legacy_queue(adev, ring, 0);
6853+
if (r) {
6854+
dev_err(adev->dev, "failed to remap kgq\n");
6855+
return r;
6856+
}
68546857
}
68556858

68566859
return amdgpu_ring_reset_helper_end(ring, timedout_fence);

0 commit comments

Comments
 (0)