[Public]

> -----Original Message-----
> From: amd-gfx <[email protected]> On Behalf Of Jesse
> Zhang
> Sent: Wednesday, June 11, 2025 6:05 AM
> To: [email protected]
> Cc: Deucher, Alexander <[email protected]>; Koenig, Christian
> <[email protected]>; Kim, Jonathan <[email protected]>; Zhu,
> Jiadong <[email protected]>; Lazar, Lijo <[email protected]>
> Subject: [v4 3/3] drm/amdgpu: Add soft reset callback to SDMA v4.4.x
>
> From: Lijo Lazar <[email protected]>
>
> Implement soft reset engine callback for SDMA 4.4.x IPs. This avoids IP 
> version
> check in generic implementation.
>
> V2: Correct physical instance ID calculation in soft_reset_engine (Jesse)
> v4: keep origin comments (Lijo)
>
> Signed-off-by: Lijo Lazar <[email protected]>

Series is:
Reviewed-by: Alex Deucher <[email protected]>


> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 34 +++---------------------
> drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c | 12 +++++++++
>  2 files changed, 16 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
> index 9b54a1ece447..a1e54bcef495 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
> @@ -534,37 +534,11 @@ bool amdgpu_sdma_is_shared_inv_eng(struct
> amdgpu_device *adev, struct amdgpu_rin  static int
> amdgpu_sdma_soft_reset(struct amdgpu_device *adev, u32 instance_id)  {
>       struct amdgpu_sdma_instance *sdma_instance = &adev-
> >sdma.instance[instance_id];
> -     int r = -EOPNOTSUPP;
> -
> -     switch (amdgpu_ip_version(adev, SDMA0_HWIP, 0)) {
> -     case IP_VERSION(4, 4, 2):
> -     case IP_VERSION(4, 4, 4):
> -     case IP_VERSION(4, 4, 5):
> -             /* For SDMA 4.x, use the existing DPM interface for backward
> compatibility,
> -              * we need to convert the logical instance ID to physical 
> instance ID
> before reset.
> -              */
> -             r = amdgpu_dpm_reset_sdma(adev, 1 << GET_INST(SDMA0,
> instance_id));
> -             break;
> -     case IP_VERSION(5, 0, 0):
> -     case IP_VERSION(5, 0, 1):
> -     case IP_VERSION(5, 0, 2):
> -     case IP_VERSION(5, 0, 5):
> -     case IP_VERSION(5, 2, 0):
> -     case IP_VERSION(5, 2, 2):
> -     case IP_VERSION(5, 2, 4):
> -     case IP_VERSION(5, 2, 5):
> -     case IP_VERSION(5, 2, 6):
> -     case IP_VERSION(5, 2, 3):
> -     case IP_VERSION(5, 2, 1):
> -     case IP_VERSION(5, 2, 7):
> -             if (sdma_instance->funcs->soft_reset_kernel_queue)
> -                     r = sdma_instance->funcs->soft_reset_kernel_queue(adev,
> instance_id);
> -             break;
> -     default:
> -             break;
> -     }
>
> -     return r;
> +     if (sdma_instance->funcs->soft_reset_kernel_queue)
> +             return sdma_instance->funcs->soft_reset_kernel_queue(adev,
> +instance_id);
> +
> +     return -EOPNOTSUPP;
>  }
>
>  /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
> index 3de125062ee3..35b0a7fb37b9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
> @@ -109,6 +109,8 @@ static void sdma_v4_4_2_set_ras_funcs(struct
> amdgpu_device *adev);  static void sdma_v4_4_2_update_reset_mask(struct
> amdgpu_device *adev);  static int sdma_v4_4_2_stop_queue(struct amdgpu_ring
> *ring);  static int sdma_v4_4_2_restore_queue(struct amdgpu_ring *ring);
> +static int sdma_v4_4_2_soft_reset_engine(struct amdgpu_device *adev,
> +                                      u32 instance_id);
>
>  static u32 sdma_v4_4_2_get_reg_offset(struct amdgpu_device *adev,
>               u32 instance, u32 offset)
> @@ -1337,6 +1339,7 @@ static bool
> sdma_v4_4_2_fw_support_paging_queue(struct amdgpu_device *adev)  static
> const struct amdgpu_sdma_funcs sdma_v4_4_2_sdma_funcs = {
>       .stop_kernel_queue = &sdma_v4_4_2_stop_queue,
>       .start_kernel_queue = &sdma_v4_4_2_restore_queue,
> +     .soft_reset_kernel_queue = &sdma_v4_4_2_soft_reset_engine,
>  };
>
>  static int sdma_v4_4_2_early_init(struct amdgpu_ip_block *ip_block) @@ 
> -1745,6
> +1748,15 @@ static int sdma_v4_4_2_restore_queue(struct amdgpu_ring *ring)
>       return sdma_v4_4_2_inst_start(adev, inst_mask, true);  }
>
> +static int sdma_v4_4_2_soft_reset_engine(struct amdgpu_device *adev,
> +                                      u32 instance_id)
> +{
> +     /* For SDMA 4.x, use the existing DPM interface for backward 
> compatibility
> +      * we need to convert the logical instance ID to physical instance ID 
> before
> reset.
> +      */
> +     return amdgpu_dpm_reset_sdma(adev, 1 << GET_INST(SDMA0,
> instance_id));
> +}
> +
>  static int sdma_v4_4_2_set_trap_irq_state(struct amdgpu_device *adev,
>                                       struct amdgpu_irq_src *source,
>                                       unsigned type,
> --
> 2.34.1

Reply via email to