[v3 3/3] drm/amdgpu: Add soft reset callback to SDMA v4.4.x
Lazar, Lijo
lijo.lazar at amd.com
Wed Jun 11 09:57:06 UTC 2025
On 6/11/2025 3:12 PM, Jesse Zhang wrote:
> 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)
>
> Signed-off-by: Lijo Lazar <lijo.lazar at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 34 +++---------------------
> drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c | 10 +++++++
> 2 files changed, 14 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..ea0eabd9166e 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,13 @@ 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 */
For clarity, you may keep your original comments here (for that alone a
v4 is not required).
"we need to convert the logical instance ID to physical instance ID
before reset"
Thanks,
Lijo
> + 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,
More information about the amd-gfx
mailing list