Applied to drm-misc-fixes

On 5/15/2025 11:41 AM, Jacek Lawrynowicz wrote:
> From: Karol Wachowski <[email protected]>
> 
> Refactor ivpu_cmdq_unregister() to ensure the doorbell is unregistered
> before destroying the command queue. The NPU firmware requires doorbells
> to be unregistered prior to command queue destruction.
> 
> If doorbell remains registered when command queue destroy command is sent
> firmware will automatically unregister the doorbell, making subsequent
> unregister attempts no-operations (NOPs).
> 
> Ensure compliance with firmware expectations by moving the doorbell
> unregister call ahead of the command queue destruction logic,
> thus preventing unnecessary NOP operation.
> 
> Fixes: 465a3914b254 ("accel/ivpu: Add API for command queue 
> create/destroy/submit")
> Signed-off-by: Karol Wachowski <[email protected]>
> Signed-off-by: Jacek Lawrynowicz <[email protected]>
> ---
>  drivers/accel/ivpu/ivpu_job.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
> index b28da35c30b67..1c8e283ad9854 100644
> --- a/drivers/accel/ivpu/ivpu_job.c
> +++ b/drivers/accel/ivpu/ivpu_job.c
> @@ -247,6 +247,10 @@ static int ivpu_cmdq_unregister(struct ivpu_file_priv 
> *file_priv, struct ivpu_cm
>       if (!cmdq->db_id)
>               return 0;
>  
> +     ret = ivpu_jsm_unregister_db(vdev, cmdq->db_id);
> +     if (!ret)
> +             ivpu_dbg(vdev, JOB, "DB %d unregistered\n", cmdq->db_id);
> +
>       if (vdev->fw->sched_mode == VPU_SCHEDULING_MODE_HW) {
>               ret = ivpu_jsm_hws_destroy_cmdq(vdev, file_priv->ctx.id, 
> cmdq->id);
>               if (!ret)
> @@ -254,10 +258,6 @@ static int ivpu_cmdq_unregister(struct ivpu_file_priv 
> *file_priv, struct ivpu_cm
>                                cmdq->id, file_priv->ctx.id);
>       }
>  
> -     ret = ivpu_jsm_unregister_db(vdev, cmdq->db_id);
> -     if (!ret)
> -             ivpu_dbg(vdev, JOB, "DB %d unregistered\n", cmdq->db_id);
> -
>       xa_erase(&file_priv->vdev->db_xa, cmdq->db_id);
>       cmdq->db_id = 0;
>  

Reply via email to