crypto: stm32 - Move polling into do_one_request

There is no need to poll separate for update and final.  We could
merge them into do_one_request.

Also fix the error handling so that we don't poll (and overwrite
the error) when an error has already occurred.

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Herbert Xu 2023-03-11 17:09:13 +08:00
parent 6bf6b6438f
commit 34f39da79b
1 changed files with 12 additions and 17 deletions

View File

@ -425,6 +425,8 @@ static int stm32_hash_update_cpu(struct stm32_hash_dev *hdev)
bufcnt = rctx->bufcnt;
rctx->bufcnt = 0;
err = stm32_hash_xmit_cpu(hdev, rctx->buffer, bufcnt, 0);
if (err)
return err;
}
stm32_hash_append_sg(rctx);
@ -433,14 +435,6 @@ static int stm32_hash_update_cpu(struct stm32_hash_dev *hdev)
bufcnt = rctx->bufcnt;
rctx->bufcnt = 0;
err = stm32_hash_xmit_cpu(hdev, rctx->buffer, bufcnt, 1);
/* If we have an IRQ, wait for that, else poll for completion */
if (hdev->polled) {
if (stm32_hash_wait_busy(hdev))
return -ETIMEDOUT;
hdev->flags |= HASH_FLAGS_OUTPUT_READY;
err = 0;
}
}
return err;
@ -784,15 +778,6 @@ static int stm32_hash_final_req(struct stm32_hash_dev *hdev)
else
err = stm32_hash_xmit_cpu(hdev, rctx->buffer, buflen, 1);
/* If we have an IRQ, wait for that, else poll for completion */
if (hdev->polled) {
if (stm32_hash_wait_busy(hdev))
return -ETIMEDOUT;
hdev->flags |= HASH_FLAGS_OUTPUT_READY;
/* Caller will call stm32_hash_finish_req() */
err = 0;
}
return err;
}
@ -964,6 +949,16 @@ static int stm32_hash_one_request(struct crypto_engine *engine, void *areq)
else if (rctx->op == HASH_OP_FINAL)
err = stm32_hash_final_req(hdev);
/* If we have an IRQ, wait for that, else poll for completion */
if (err == -EINPROGRESS && hdev->polled) {
if (stm32_hash_wait_busy(hdev))
err = -ETIMEDOUT;
else {
hdev->flags |= HASH_FLAGS_OUTPUT_READY;
err = 0;
}
}
if (err != -EINPROGRESS)
/* done task will not finish it, so do it here */
stm32_hash_finish_req(req, err);