[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