Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: 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

+13 -10
+13 -10
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
··· 6823 6823 struct amdgpu_fence *timedout_fence) 6824 6824 { 6825 6825 struct amdgpu_device *adev = ring->adev; 6826 + bool use_mmio = false; 6826 6827 int r; 6827 6828 6828 6829 amdgpu_ring_reset_helper_begin(ring, timedout_fence); 6829 6830 6830 - r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, false); 6831 + r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio); 6831 6832 if (r) { 6832 6833 6833 6834 dev_warn(adev->dev, "reset via MES failed and try pipe reset %d\n", r); ··· 6837 6836 return r; 6838 6837 } 6839 6838 6840 - r = gfx_v11_0_kgq_init_queue(ring, true); 6841 - if (r) { 6842 - dev_err(adev->dev, "failed to init kgq\n"); 6843 - return r; 6844 - } 6839 + if (use_mmio) { 6840 + r = gfx_v11_0_kgq_init_queue(ring, true); 6841 + if (r) { 6842 + dev_err(adev->dev, "failed to init kgq\n"); 6843 + return r; 6844 + } 6845 6845 6846 - r = amdgpu_mes_map_legacy_queue(adev, ring); 6847 - if (r) { 6848 - dev_err(adev->dev, "failed to remap kgq\n"); 6849 - return r; 6846 + r = amdgpu_mes_map_legacy_queue(adev, ring); 6847 + if (r) { 6848 + dev_err(adev->dev, "failed to remap kgq\n"); 6849 + return r; 6850 + } 6850 6851 } 6851 6852 6852 6853 return amdgpu_ring_reset_helper_end(ring, timedout_fence);