[PATCH 08/10] crypto: sun8i-ce - factor out public versions of finalize request
Ovidiu Panait
ovidiu.panait.oss at gmail.com
Thu Jun 19 05:23:14 PDT 2025
Factor out hash and cipher finalize routines so that they can be used in
the next commits during do_batch_requests() callback.
Signed-off-by: Ovidiu Panait <ovidiu.panait.oss at gmail.com>
---
.../allwinner/sun8i-ce/sun8i-ce-cipher.c | 23 ++++++++++---
.../crypto/allwinner/sun8i-ce/sun8i-ce-hash.c | 33 ++++++++++++++-----
drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 26 +++++++++++++++
3 files changed, 69 insertions(+), 13 deletions(-)
diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c
index d206b4fb5084..22b1fe72aa71 100644
--- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c
+++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c
@@ -346,6 +346,24 @@ static void sun8i_ce_cipher_unprepare(struct skcipher_request *areq,
dma_unmap_single(ce->dev, rctx->addr_key, op->keylen, DMA_TO_DEVICE);
}
+void sun8i_ce_cipher_finalize_req(struct crypto_async_request *async_req,
+ struct ce_task *cet, int err)
+{
+ struct skcipher_request *req = skcipher_request_cast(async_req);
+ struct sun8i_cipher_req_ctx *rctx = skcipher_request_ctx(req);
+ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+ struct sun8i_cipher_tfm_ctx *ctx = crypto_skcipher_ctx(tfm);
+ struct sun8i_ce_flow *chan;
+
+ chan = &ctx->ce->chanlist[rctx->flow];
+
+ sun8i_ce_cipher_unprepare(req, cet);
+
+ local_bh_disable();
+ crypto_finalize_skcipher_request(chan->engine, req, err);
+ local_bh_enable();
+}
+
int sun8i_ce_cipher_do_one(struct crypto_engine *engine, void *areq)
{
struct skcipher_request *req = skcipher_request_cast(areq);
@@ -366,11 +384,8 @@ int sun8i_ce_cipher_do_one(struct crypto_engine *engine, void *areq)
err = sun8i_ce_run_task(ce, rctx->flow,
crypto_tfm_alg_name(req->base.tfm));
- sun8i_ce_cipher_unprepare(req, cet);
- local_bh_disable();
- crypto_finalize_skcipher_request(engine, req, err);
- local_bh_enable();
+ sun8i_ce_cipher_finalize_req(areq, cet, err);
return 0;
}
diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c
index 7811fa17388c..5d8ac1394c0c 100644
--- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c
+++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c
@@ -453,6 +453,29 @@ static void sun8i_ce_hash_unprepare(struct ahash_request *areq,
dma_unmap_sg(ce->dev, areq->src, rctx->nr_sgs, DMA_TO_DEVICE);
}
+void sun8i_ce_hash_finalize_req(struct crypto_async_request *async_req,
+ struct ce_task *cet,
+ int err)
+{
+ struct ahash_request *areq = ahash_request_cast(async_req);
+ struct sun8i_ce_hash_reqctx *rctx = ahash_request_ctx(areq);
+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
+ struct sun8i_ce_hash_tfm_ctx *ctx = crypto_ahash_ctx(tfm);
+ struct sun8i_ce_flow *chan;
+
+ chan = &ctx->ce->chanlist[rctx->flow];
+
+ sun8i_ce_hash_unprepare(areq, cet);
+
+ if (!err)
+ memcpy(areq->result, rctx->result,
+ crypto_ahash_digestsize(tfm));
+
+ local_bh_disable();
+ crypto_finalize_hash_request(chan->engine, areq, err);
+ local_bh_enable();
+}
+
int sun8i_ce_hash_run(struct crypto_engine *engine, void *async_req)
{
struct ahash_request *areq = ahash_request_cast(async_req);
@@ -473,15 +496,7 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, void *async_req)
err = sun8i_ce_run_task(ce, rctx->flow, crypto_ahash_alg_name(tfm));
- sun8i_ce_hash_unprepare(areq, cet);
-
- if (!err)
- memcpy(areq->result, rctx->result,
- crypto_ahash_digestsize(tfm));
-
- local_bh_disable();
- crypto_finalize_hash_request(engine, async_req, err);
- local_bh_enable();
+ sun8i_ce_hash_finalize_req(async_req, cet, err);
return 0;
}
diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h
index 90b955787d37..1022fd590256 100644
--- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h
+++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h
@@ -383,6 +383,19 @@ int sun8i_ce_cipher_do_one(struct crypto_engine *engine, void *areq);
int sun8i_ce_skdecrypt(struct skcipher_request *areq);
int sun8i_ce_skencrypt(struct skcipher_request *areq);
+/**
+ * sun8i_ce_cipher_finalize_req - finalize cipher request
+ * @async_req: request to be finalized
+ * @cet: task descriptor associated with @async_req
+ * @err: error code indicating if request was executed successfully
+ *
+ * This function does the final cleanups for request @async_req and
+ * finalizes the request.
+ */
+void sun8i_ce_cipher_finalize_req(struct crypto_async_request *async_req,
+ struct ce_task *cet,
+ int err);
+
int sun8i_ce_get_engine_number(struct sun8i_ce_dev *ce);
int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flow, const char *name);
@@ -398,6 +411,19 @@ int sun8i_ce_hash_finup(struct ahash_request *areq);
int sun8i_ce_hash_digest(struct ahash_request *areq);
int sun8i_ce_hash_run(struct crypto_engine *engine, void *breq);
+/**
+ * sun8i_ce_hash_finalize_req - finalize hash request
+ * @async_req: request to be finalized
+ * @cet: task descriptor associated with @async_req
+ * @err: error code indicating if request was executed successfully
+ *
+ * This function does the final cleanups for request @async_req and
+ * finalizes the request.
+ */
+void sun8i_ce_hash_finalize_req(struct crypto_async_request *async_req,
+ struct ce_task *cet,
+ int err);
+
int sun8i_ce_prng_generate(struct crypto_rng *tfm, const u8 *src,
unsigned int slen, u8 *dst, unsigned int dlen);
int sun8i_ce_prng_seed(struct crypto_rng *tfm, const u8 *seed, unsigned int slen);
--
2.49.0
More information about the linux-arm-kernel
mailing list