[PATCH] accel/ivpu: Reorder Doorbell Unregister and Command Queue Destruction

Jacek Lawrynowicz jacek.lawrynowicz at linux.intel.com
Wed May 28 09:52:57 UTC 2025


Applied to drm-misc-fixes

On 5/15/2025 11:41 AM, Jacek Lawrynowicz wrote:
> From: Karol Wachowski <karol.wachowski at intel.com>
> 
> 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 <karol.wachowski at intel.com>
> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz at linux.intel.com>
> ---
>  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;
>  



More information about the dri-devel mailing list