[PATCH v2 3/3] drm/amdgpu/sdma6: implement ring reset callback for sdma6

Alex Deucher alexdeucher at gmail.com
Tue Sep 10 14:04:51 UTC 2024


On Mon, Sep 9, 2024 at 11:48 PM <jiadong.zhu at amd.com> wrote:
>
> From: Jiadong Zhu <Jiadong.Zhu at amd.com>
>
> Implement sdma queue reset callback using mes_reset_queue_mmio.
>
> v2: check instance id before reset queue.
>
> Signed-off-by: Jiadong Zhu <Jiadong.Zhu at amd.com>

Series is:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> index b2efc678b7e9..581fa550ef29 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> @@ -1491,6 +1491,31 @@ static int sdma_v6_0_ring_preempt_ib(struct amdgpu_ring *ring)
>         return r;
>  }
>
> +static int sdma_v6_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
> +{
> +       struct amdgpu_device *adev = ring->adev;
> +       int i, r;
> +
> +       if (amdgpu_sriov_vf(adev))
> +               return -EINVAL;
> +
> +       for (i = 0; i < adev->sdma.num_instances; i++) {
> +               if (ring == &adev->sdma.instance[i].ring)
> +                       break;
> +       }
> +
> +       if (i == adev->sdma.num_instances) {
> +               DRM_ERROR("sdma instance not found\n");
> +               return -EINVAL;
> +       }
> +
> +       r = amdgpu_mes_reset_legacy_queue(adev, ring, vmid, true);
> +       if (r)
> +               return r;
> +
> +       return sdma_v6_0_gfx_resume_instance(adev, i, true);
> +}
> +
>  static int sdma_v6_0_set_trap_irq_state(struct amdgpu_device *adev,
>                                         struct amdgpu_irq_src *source,
>                                         unsigned type,
> @@ -1674,6 +1699,7 @@ static const struct amdgpu_ring_funcs sdma_v6_0_ring_funcs = {
>         .emit_reg_write_reg_wait = sdma_v6_0_ring_emit_reg_write_reg_wait,
>         .init_cond_exec = sdma_v6_0_ring_init_cond_exec,
>         .preempt_ib = sdma_v6_0_ring_preempt_ib,
> +       .reset = sdma_v6_0_reset_queue,
>  };
>
>  static void sdma_v6_0_set_ring_funcs(struct amdgpu_device *adev)
> --
> 2.25.1
>


More information about the amd-gfx mailing list