On Wed, Jun 17, 2026 at 3:24 PM Timur Kristóf <[email protected]> wrote:
>
> IP block soft reset is a way to reset just one IP block
> in a GPU without resetting the whole GPU or losing the
> contents of VRAM. Currently this is implemented for various
> IP blocks, but actually only used on Carrizo and Stoney
> as part of the ASIC reset code, and it fails.
>
> Let's rework that.
>
> Delete the defunct code from the ASIC reset code path.
> Also delete check_soft_reset() and pre/post_soft_reset()
> which were quite useless and redundant (see the commit
> messages for details).
>
> Add IP block soft reset as a GPU recovery method instead.
> This works similarly to ring reset, but will affect all
> rings that belong to the IP block. For example, a GFX
> IP block soft reset will affect all graphics and compute
> rings. It is called when a job is timed out. Attempt
> to minimize the effect on non-guilty jobs, then back
> up the contents of all affected rings, perform the HW
> specific soft reset, then restore the rings.
> For this, I am also including some patches from Alex
> which were written for pipe reset and solve some
> problems also for IP block soft reset.
>
> Finally, let's fix up the soft reset implementation
> on GFX8 to make sure it works on every GFX8 chip.
> Specifically, fix an issue with compute rings hanging
> after the reset, and fix an issue with increased power
> consumption after the reset, among others.
> With those issues gone, enable the new GPU recovery
> method on GFX8.
>
> Tested with the "hard_reset_cp_wait" test case from the
> Hang Test Suite created by Natalie Vock and Konstantin Seurer.
> This Vulkan testcase waits for an event that never occurs,
> effectively a WAIT_REG_MEM packet that intentionally hangs.
> IP block soft reset can resolve that hang and allow
> the rest of the system to move on and keep functioning
> without needing a full ASIC reset.
>
> Tested on the following chips:
>
> Polaris 10 (Radeon RX 570)
> Polaris 11 (Radeon RX 560)
> Polaris 12 (Radeon RX 550)
> Fiji (Radeon R9 Nano)
> Tonga (Radeon R9 380X)
> Carrizo (A8-9600)

Nice work.  Patches 1-6, 11-17 are:
Reviewed-by: Alex Deucher <[email protected]>

I'll pull these in today.

Thanks!

Alex

>
> Alex Deucher (4):
>   drm/amdgpu: don't reemit if there is nothing to reemit
>   drm/amdgpu: track guilty fence for queue reset
>   drm/amdgpu/fence: add helper to extract the guilty fence (v2)
>   drm/amdgpu: amdgpu_ring_set_fence_errors_and_reemit() handle NULL
>     fence
>
> Timur Kristóf (13):
>   drm/amdgpu: Clarify name of soft recovery to avoid confusion
>   drm/amdgpu: Clean up defunct soft reset from ASIC reset code path
>   drm/amdgpu: Delete GMC 8 soft reset
>   drm/amdgpu: Delete soft reset code from legacy display driver
>   drm/amdgpu: Delete check_soft_reset() from amd_ip_funcs
>   drm/amdgpu: Delete pre/post_soft_reset() from amd_ip_funcs
>   drm/amdgpu: Add IP block soft reset as a GPU recovery method
>   drm/amdgpu/gfx8: Stop CP and RLC during reset
>   drm/amdgpu/gfx8: Return error when testing all rings
>   drm/amdgpu/gfx8: Support COND_EXEC on compute rings
>   drm/amdgpu/gfx8: Adjust EDC GPR workaround
>   drm/amdgpu/gfx8: Fixup IP block soft reset
>   drm/amdgpu/gfx8: Enable IP block soft reset as a GPU recovery method
>
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h           |   7 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c    | 179 +-------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c       |  10 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c     |  54 ++++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h       |   2 -
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h       |   1 -
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ip.c        | 154 ++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ip.h        |   5 +
>  drivers/gpu/drm/amd/amdgpu/amdgpu_job.c       |  13 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c      | 171 +++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h      |   8 +
>  drivers/gpu/drm/amd/amdgpu/cik.c              |   7 -
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c        |  66 ------
>  drivers/gpu/drm/amd/amdgpu/dce_v6_0.c         |  57 -----
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c         |  57 -----
>  drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c        |  36 +--
>  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c         | 224 +++++-------------
>  drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c         | 125 ----------
>  drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c      |   3 -
>  drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_2.c      |   3 -
>  drivers/gpu/drm/amd/amdgpu/nv.c               |   6 -
>  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c        |  62 -----
>  drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c        |  18 --
>  drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c        |  18 --
>  drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c        |  18 --
>  drivers/gpu/drm/amd/amdgpu/si.c               |   7 -
>  drivers/gpu/drm/amd/amdgpu/soc15.c            |   9 -
>  drivers/gpu/drm/amd/amdgpu/soc21.c            |  12 -
>  drivers/gpu/drm/amd/amdgpu/soc24.c            |  11 -
>  drivers/gpu/drm/amd/amdgpu/soc_v1_0.c         |  10 -
>  drivers/gpu/drm/amd/amdgpu/tonga_ih.c         |  40 ----
>  drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c         |  45 ----
>  drivers/gpu/drm/amd/amdgpu/vce_v3_0.c         |  69 ------
>  drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c       |   3 -
>  drivers/gpu/drm/amd/amdgpu/vcn_v5_0_2.c       |   3 -
>  drivers/gpu/drm/amd/amdgpu/vi.c               |  22 --
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |   6 -
>  drivers/gpu/drm/amd/include/amd_shared.h      |   3 -
>  drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c     |   1 -
>  39 files changed, 487 insertions(+), 1058 deletions(-)
>
> --
> 2.54.0
>

Reply via email to