habanalabs: fix wait offset handling

Add handling for case where the user doesn't set wait offset,
and keeps it as 0. In such a case the driver will decrement one
from this zero value which will cause the code to wait for
wrong number of signals.

The solution is to treat this case as in legacy wait cs,
and wait for the next signal.

Signed-off-by: farah kassabri <fkassabri@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
This commit is contained in:
farah kassabri 2021-09-12 14:30:35 +03:00 committed by Oded Gabbay
parent 3d3200ae16
commit 42254c2a49

View File

@ -437,6 +437,7 @@ void hl_hw_queue_encaps_sig_set_sob_info(struct hl_device *hdev,
struct hl_cs_compl *cs_cmpl) struct hl_cs_compl *cs_cmpl)
{ {
struct hl_cs_encaps_sig_handle *handle = cs->encaps_sig_hdl; struct hl_cs_encaps_sig_handle *handle = cs->encaps_sig_hdl;
u32 offset = 0;
cs_cmpl->hw_sob = handle->hw_sob; cs_cmpl->hw_sob = handle->hw_sob;
@ -446,9 +447,13 @@ void hl_hw_queue_encaps_sig_set_sob_info(struct hl_device *hdev,
* set offset 1 for example he mean to wait only for the first * set offset 1 for example he mean to wait only for the first
* signal only, which will be pre_sob_val, and if he set offset 2 * signal only, which will be pre_sob_val, and if he set offset 2
* then the value required is (pre_sob_val + 1) and so on... * then the value required is (pre_sob_val + 1) and so on...
* if user set wait offset to 0, then treat it as legacy wait cs,
* wait for the next signal.
*/ */
cs_cmpl->sob_val = handle->pre_sob_val + if (job->encaps_sig_wait_offset)
(job->encaps_sig_wait_offset - 1); offset = job->encaps_sig_wait_offset - 1;
cs_cmpl->sob_val = handle->pre_sob_val + offset;
} }
static int init_wait_cs(struct hl_device *hdev, struct hl_cs *cs, static int init_wait_cs(struct hl_device *hdev, struct hl_cs *cs,