Lines Matching +full:rk3288 +full:- +full:crypto

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Crypto acceleration support for Rockchip RK3288
7 * Author: Zain Wang <zain.wang@rock-chips.com>
9 * Some ideas are from marvell/cesa.c and s5p-sss.c driver.
13 #include <crypto/internal/hash.h>
31 sg = req->src;
33 if (!IS_ALIGNED(sg->offset, sizeof(u32))) {
36 if (sg->length % 4) {
52 algt->stat_fb++;
54 ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
55 ahash_request_set_callback(&rctx->fallback_req,
56 areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
57 areq->base.complete, areq->base.data);
58 ahash_request_set_crypt(&rctx->fallback_req, areq->src, areq->result,
59 areq->nbytes);
61 return crypto_ahash_digest(&rctx->fallback_req);
71 memcpy(req->result, sha1_zero_message_hash, rk_digest_size);
74 memcpy(req->result, sha256_zero_message_hash, rk_digest_size);
77 memcpy(req->result, md5_zero_message_hash, rk_digest_size);
80 return -EINVAL;
101 memset_io(dev->reg + RK_CRYPTO_HASH_DOUT_0, 0, 32);
109 CRYPTO_WRITE(dev, RK_CRYPTO_HASH_CTRL, rctx->mode |
116 CRYPTO_WRITE(dev, RK_CRYPTO_HASH_MSG_LEN, req->nbytes);
125 ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
126 ahash_request_set_callback(&rctx->fallback_req,
127 req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
128 req->base.complete, req->base.data);
130 return crypto_ahash_init(&rctx->fallback_req);
139 ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
140 ahash_request_set_callback(&rctx->fallback_req,
141 req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
142 req->base.complete, req->base.data);
143 ahash_request_set_crypt(&rctx->fallback_req, req->src, NULL, req->nbytes);
145 return crypto_ahash_update(&rctx->fallback_req);
154 ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
155 ahash_request_set_callback(&rctx->fallback_req,
156 req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
157 req->base.complete, req->base.data);
158 ahash_request_set_crypt(&rctx->fallback_req, NULL, req->result, 0);
160 return crypto_ahash_final(&rctx->fallback_req);
169 ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
170 ahash_request_set_callback(&rctx->fallback_req,
171 req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
172 req->base.complete, req->base.data);
173 ahash_request_set_crypt(&rctx->fallback_req, req->src, req->result,
174 req->nbytes);
176 return crypto_ahash_finup(&rctx->fallback_req);
185 ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
186 ahash_request_set_callback(&rctx->fallback_req,
187 req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
188 req->base.complete, req->base.data);
190 return crypto_ahash_import(&rctx->fallback_req, in);
199 ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
200 ahash_request_set_callback(&rctx->fallback_req,
201 req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
202 req->base.complete, req->base.data);
204 return crypto_ahash_export(&rctx->fallback_req, out);
216 if (!req->nbytes)
221 rctx->dev = dev;
222 engine = dev->engine;
239 struct rk_crypto_info *rkc = rctx->dev;
242 ret = dma_map_sg(rkc->dev, areq->src, sg_nents(areq->src), DMA_TO_DEVICE);
244 return -EINVAL;
246 rctx->nrsg = ret;
255 struct rk_crypto_info *rkc = rctx->dev;
257 dma_unmap_sg(rkc->dev, areq->src, rctx->nrsg, DMA_TO_DEVICE);
267 struct scatterlist *sg = areq->src;
268 struct rk_crypto_info *rkc = rctx->dev;
273 err = pm_runtime_resume_and_get(rkc->dev);
281 rctx->mode = 0;
283 algt->stat_req++;
284 rkc->nreq++;
288 rctx->mode = RK_CRYPTO_HASH_SHA1;
291 rctx->mode = RK_CRYPTO_HASH_SHA256;
294 rctx->mode = RK_CRYPTO_HASH_MD5;
297 err = -EINVAL;
304 reinit_completion(&rkc->complete);
305 rkc->status = 0;
307 wait_for_completion_interruptible_timeout(&rkc->complete,
309 if (!rkc->status) {
310 dev_err(rkc->dev, "DMA timeout\n");
311 err = -EFAULT;
327 readl_poll_timeout(rkc->reg + RK_CRYPTO_HASH_STS, v, v == 0, 10, 1000);
330 v = readl(rkc->reg + RK_CRYPTO_HASH_DOUT_0 + i * 4);
331 put_unaligned_le32(v, areq->result + i * 4);
335 pm_runtime_put_autosuspend(rkc->dev);
354 tctx->fallback_tfm = crypto_alloc_ahash(alg_name, 0,
356 if (IS_ERR(tctx->fallback_tfm)) {
357 dev_err(algt->dev->dev, "Could not load fallback driver.\n");
358 return PTR_ERR(tctx->fallback_tfm);
363 crypto_ahash_reqsize(tctx->fallback_tfm));
372 crypto_free_ahash(tctx->fallback_tfm);
392 .cra_driver_name = "rk-sha1",
424 .cra_driver_name = "rk-sha256",
456 .cra_driver_name = "rk-md5",