Skip to content

Commit 1a15d26

Browse files
committed
crypto: rk3288 - Use new crypto_engine_op interface
Use the new crypto_engine_op interface where the callback is stored in the algorithm object. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent 03906fb commit 1a15d26

4 files changed

Lines changed: 123 additions & 83 deletions

File tree

drivers/crypto/rockchip/rk3288_crypto.c

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,22 @@
1010
*/
1111

1212
#include "rk3288_crypto.h"
13+
#include <crypto/engine.h>
14+
#include <crypto/internal/hash.h>
15+
#include <crypto/internal/skcipher.h>
16+
#include <linux/clk.h>
1317
#include <linux/dma-mapping.h>
18+
#include <linux/debugfs.h>
19+
#include <linux/delay.h>
20+
#include <linux/err.h>
21+
#include <linux/kernel.h>
22+
#include <linux/io.h>
1423
#include <linux/module.h>
1524
#include <linux/platform_device.h>
1625
#include <linux/of.h>
1726
#include <linux/of_device.h>
18-
#include <linux/clk.h>
19-
#include <linux/crypto.h>
2027
#include <linux/reset.h>
28+
#include <linux/spinlock.h>
2129

2230
static struct rockchip_ip rocklist = {
2331
.dev_list = LIST_HEAD_INIT(rocklist.dev_list),
@@ -184,7 +192,6 @@ static struct rk_crypto_tmp *rk_cipher_algs[] = {
184192
&rk_ahash_md5,
185193
};
186194

187-
#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG
188195
static int rk_crypto_debugfs_show(struct seq_file *seq, void *v)
189196
{
190197
struct rk_crypto_info *dd;
@@ -204,8 +211,8 @@ static int rk_crypto_debugfs_show(struct seq_file *seq, void *v)
204211
switch (rk_cipher_algs[i]->type) {
205212
case CRYPTO_ALG_TYPE_SKCIPHER:
206213
seq_printf(seq, "%s %s reqs=%lu fallback=%lu\n",
207-
rk_cipher_algs[i]->alg.skcipher.base.cra_driver_name,
208-
rk_cipher_algs[i]->alg.skcipher.base.cra_name,
214+
rk_cipher_algs[i]->alg.skcipher.base.base.cra_driver_name,
215+
rk_cipher_algs[i]->alg.skcipher.base.base.cra_name,
209216
rk_cipher_algs[i]->stat_req, rk_cipher_algs[i]->stat_fb);
210217
seq_printf(seq, "\tfallback due to length: %lu\n",
211218
rk_cipher_algs[i]->stat_fb_len);
@@ -216,8 +223,8 @@ static int rk_crypto_debugfs_show(struct seq_file *seq, void *v)
216223
break;
217224
case CRYPTO_ALG_TYPE_AHASH:
218225
seq_printf(seq, "%s %s reqs=%lu fallback=%lu\n",
219-
rk_cipher_algs[i]->alg.hash.halg.base.cra_driver_name,
220-
rk_cipher_algs[i]->alg.hash.halg.base.cra_name,
226+
rk_cipher_algs[i]->alg.hash.base.halg.base.cra_driver_name,
227+
rk_cipher_algs[i]->alg.hash.base.halg.base.cra_name,
221228
rk_cipher_algs[i]->stat_req, rk_cipher_algs[i]->stat_fb);
222229
break;
223230
}
@@ -226,17 +233,20 @@ static int rk_crypto_debugfs_show(struct seq_file *seq, void *v)
226233
}
227234

228235
DEFINE_SHOW_ATTRIBUTE(rk_crypto_debugfs);
229-
#endif
230236

231237
static void register_debugfs(struct rk_crypto_info *crypto_info)
232238
{
233-
#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG
239+
struct dentry *dbgfs_dir __maybe_unused;
240+
struct dentry *dbgfs_stats __maybe_unused;
241+
234242
/* Ignore error of debugfs */
235-
rocklist.dbgfs_dir = debugfs_create_dir("rk3288_crypto", NULL);
236-
rocklist.dbgfs_stats = debugfs_create_file("stats", 0444,
237-
rocklist.dbgfs_dir,
238-
&rocklist,
239-
&rk_crypto_debugfs_fops);
243+
dbgfs_dir = debugfs_create_dir("rk3288_crypto", NULL);
244+
dbgfs_stats = debugfs_create_file("stats", 0444, dbgfs_dir, &rocklist,
245+
&rk_crypto_debugfs_fops);
246+
247+
#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG
248+
rocklist.dbgfs_dir = dbgfs_dir;
249+
rocklist.dbgfs_stats = dbgfs_stats;
240250
#endif
241251
}
242252

@@ -250,15 +260,15 @@ static int rk_crypto_register(struct rk_crypto_info *crypto_info)
250260
switch (rk_cipher_algs[i]->type) {
251261
case CRYPTO_ALG_TYPE_SKCIPHER:
252262
dev_info(crypto_info->dev, "Register %s as %s\n",
253-
rk_cipher_algs[i]->alg.skcipher.base.cra_name,
254-
rk_cipher_algs[i]->alg.skcipher.base.cra_driver_name);
255-
err = crypto_register_skcipher(&rk_cipher_algs[i]->alg.skcipher);
263+
rk_cipher_algs[i]->alg.skcipher.base.base.cra_name,
264+
rk_cipher_algs[i]->alg.skcipher.base.base.cra_driver_name);
265+
err = crypto_engine_register_skcipher(&rk_cipher_algs[i]->alg.skcipher);
256266
break;
257267
case CRYPTO_ALG_TYPE_AHASH:
258268
dev_info(crypto_info->dev, "Register %s as %s\n",
259-
rk_cipher_algs[i]->alg.hash.halg.base.cra_name,
260-
rk_cipher_algs[i]->alg.hash.halg.base.cra_driver_name);
261-
err = crypto_register_ahash(&rk_cipher_algs[i]->alg.hash);
269+
rk_cipher_algs[i]->alg.hash.base.halg.base.cra_name,
270+
rk_cipher_algs[i]->alg.hash.base.halg.base.cra_driver_name);
271+
err = crypto_engine_register_ahash(&rk_cipher_algs[i]->alg.hash);
262272
break;
263273
default:
264274
dev_err(crypto_info->dev, "unknown algorithm\n");
@@ -271,9 +281,9 @@ static int rk_crypto_register(struct rk_crypto_info *crypto_info)
271281
err_cipher_algs:
272282
for (k = 0; k < i; k++) {
273283
if (rk_cipher_algs[i]->type == CRYPTO_ALG_TYPE_SKCIPHER)
274-
crypto_unregister_skcipher(&rk_cipher_algs[k]->alg.skcipher);
284+
crypto_engine_unregister_skcipher(&rk_cipher_algs[k]->alg.skcipher);
275285
else
276-
crypto_unregister_ahash(&rk_cipher_algs[i]->alg.hash);
286+
crypto_engine_unregister_ahash(&rk_cipher_algs[i]->alg.hash);
277287
}
278288
return err;
279289
}
@@ -284,9 +294,9 @@ static void rk_crypto_unregister(void)
284294

285295
for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) {
286296
if (rk_cipher_algs[i]->type == CRYPTO_ALG_TYPE_SKCIPHER)
287-
crypto_unregister_skcipher(&rk_cipher_algs[i]->alg.skcipher);
297+
crypto_engine_unregister_skcipher(&rk_cipher_algs[i]->alg.skcipher);
288298
else
289-
crypto_unregister_ahash(&rk_cipher_algs[i]->alg.hash);
299+
crypto_engine_unregister_ahash(&rk_cipher_algs[i]->alg.hash);
290300
}
291301
}
292302

drivers/crypto/rockchip/rk3288_crypto.h

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@
33
#define __RK3288_CRYPTO_H__
44

55
#include <crypto/aes.h>
6-
#include <crypto/internal/des.h>
7-
#include <crypto/algapi.h>
8-
#include <linux/dma-mapping.h>
9-
#include <linux/interrupt.h>
10-
#include <linux/debugfs.h>
11-
#include <linux/delay.h>
12-
#include <linux/pm_runtime.h>
13-
#include <linux/scatterlist.h>
146
#include <crypto/engine.h>
7+
#include <crypto/internal/des.h>
158
#include <crypto/internal/hash.h>
169
#include <crypto/internal/skcipher.h>
17-
1810
#include <crypto/md5.h>
1911
#include <crypto/sha1.h>
2012
#include <crypto/sha2.h>
13+
#include <linux/dma-mapping.h>
14+
#include <linux/interrupt.h>
15+
#include <linux/pm_runtime.h>
16+
#include <linux/scatterlist.h>
17+
#include <linux/types.h>
2118

2219
#define _SBF(v, f) ((v) << (f))
2320

@@ -231,7 +228,6 @@ struct rk_crypto_info {
231228

232229
/* the private variable of hash */
233230
struct rk_ahash_ctx {
234-
struct crypto_engine_ctx enginectx;
235231
/* for fallback */
236232
struct crypto_ahash *fallback_tfm;
237233
};
@@ -246,7 +242,6 @@ struct rk_ahash_rctx {
246242

247243
/* the private variable of cipher */
248244
struct rk_cipher_ctx {
249-
struct crypto_engine_ctx enginectx;
250245
unsigned int keylen;
251246
u8 key[AES_MAX_KEY_SIZE];
252247
u8 iv[AES_BLOCK_SIZE];
@@ -264,8 +259,8 @@ struct rk_crypto_tmp {
264259
u32 type;
265260
struct rk_crypto_info *dev;
266261
union {
267-
struct skcipher_alg skcipher;
268-
struct ahash_alg hash;
262+
struct skcipher_engine_alg skcipher;
263+
struct ahash_engine_alg hash;
269264
} alg;
270265
unsigned long stat_req;
271266
unsigned long stat_fb;

drivers/crypto/rockchip/rk3288_crypto_ahash.c

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,15 @@
88
*
99
* Some ideas are from marvell/cesa.c and s5p-sss.c driver.
1010
*/
11-
#include <linux/device.h>
11+
1212
#include <asm/unaligned.h>
13+
#include <crypto/internal/hash.h>
14+
#include <linux/device.h>
15+
#include <linux/err.h>
1316
#include <linux/iopoll.h>
17+
#include <linux/kernel.h>
18+
#include <linux/module.h>
19+
#include <linux/string.h>
1420
#include "rk3288_crypto.h"
1521

1622
/*
@@ -40,8 +46,8 @@ static int rk_ahash_digest_fb(struct ahash_request *areq)
4046
struct rk_ahash_rctx *rctx = ahash_request_ctx(areq);
4147
struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
4248
struct rk_ahash_ctx *tfmctx = crypto_ahash_ctx(tfm);
43-
struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg);
44-
struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash);
49+
struct ahash_alg *alg = crypto_ahash_alg(tfm);
50+
struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash.base);
4551

4652
algt->stat_fb++;
4753

@@ -254,8 +260,8 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq)
254260
struct ahash_request *areq = container_of(breq, struct ahash_request, base);
255261
struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
256262
struct rk_ahash_rctx *rctx = ahash_request_ctx(areq);
257-
struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg);
258-
struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash);
263+
struct ahash_alg *alg = crypto_ahash_alg(tfm);
264+
struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash.base);
259265
struct scatterlist *sg = areq->src;
260266
struct rk_crypto_info *rkc = rctx->dev;
261267
int err;
@@ -335,12 +341,12 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq)
335341
return 0;
336342
}
337343

338-
static int rk_cra_hash_init(struct crypto_tfm *tfm)
344+
static int rk_hash_init_tfm(struct crypto_ahash *tfm)
339345
{
340-
struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm);
341-
const char *alg_name = crypto_tfm_alg_name(tfm);
342-
struct ahash_alg *alg = __crypto_ahash_alg(tfm->__crt_alg);
343-
struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash);
346+
struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm);
347+
const char *alg_name = crypto_ahash_alg_name(tfm);
348+
struct ahash_alg *alg = crypto_ahash_alg(tfm);
349+
struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash.base);
344350

345351
/* for fallback */
346352
tctx->fallback_tfm = crypto_alloc_ahash(alg_name, 0,
@@ -350,32 +356,32 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm)
350356
return PTR_ERR(tctx->fallback_tfm);
351357
}
352358

353-
crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
359+
crypto_ahash_set_reqsize(tfm,
354360
sizeof(struct rk_ahash_rctx) +
355361
crypto_ahash_reqsize(tctx->fallback_tfm));
356362

357-
tctx->enginectx.op.do_one_request = rk_hash_run;
358-
359363
return 0;
360364
}
361365

362-
static void rk_cra_hash_exit(struct crypto_tfm *tfm)
366+
static void rk_hash_exit_tfm(struct crypto_ahash *tfm)
363367
{
364-
struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm);
368+
struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm);
365369

366370
crypto_free_ahash(tctx->fallback_tfm);
367371
}
368372

369373
struct rk_crypto_tmp rk_ahash_sha1 = {
370374
.type = CRYPTO_ALG_TYPE_AHASH,
371-
.alg.hash = {
375+
.alg.hash.base = {
372376
.init = rk_ahash_init,
373377
.update = rk_ahash_update,
374378
.final = rk_ahash_final,
375379
.finup = rk_ahash_finup,
376380
.export = rk_ahash_export,
377381
.import = rk_ahash_import,
378382
.digest = rk_ahash_digest,
383+
.init_tfm = rk_hash_init_tfm,
384+
.exit_tfm = rk_hash_exit_tfm,
379385
.halg = {
380386
.digestsize = SHA1_DIGEST_SIZE,
381387
.statesize = sizeof(struct sha1_state),
@@ -388,24 +394,27 @@ struct rk_crypto_tmp rk_ahash_sha1 = {
388394
.cra_blocksize = SHA1_BLOCK_SIZE,
389395
.cra_ctxsize = sizeof(struct rk_ahash_ctx),
390396
.cra_alignmask = 3,
391-
.cra_init = rk_cra_hash_init,
392-
.cra_exit = rk_cra_hash_exit,
393397
.cra_module = THIS_MODULE,
394398
}
395399
}
396-
}
400+
},
401+
.alg.hash.op = {
402+
.do_one_request = rk_hash_run,
403+
},
397404
};
398405

399406
struct rk_crypto_tmp rk_ahash_sha256 = {
400407
.type = CRYPTO_ALG_TYPE_AHASH,
401-
.alg.hash = {
408+
.alg.hash.base = {
402409
.init = rk_ahash_init,
403410
.update = rk_ahash_update,
404411
.final = rk_ahash_final,
405412
.finup = rk_ahash_finup,
406413
.export = rk_ahash_export,
407414
.import = rk_ahash_import,
408415
.digest = rk_ahash_digest,
416+
.init_tfm = rk_hash_init_tfm,
417+
.exit_tfm = rk_hash_exit_tfm,
409418
.halg = {
410419
.digestsize = SHA256_DIGEST_SIZE,
411420
.statesize = sizeof(struct sha256_state),
@@ -418,24 +427,27 @@ struct rk_crypto_tmp rk_ahash_sha256 = {
418427
.cra_blocksize = SHA256_BLOCK_SIZE,
419428
.cra_ctxsize = sizeof(struct rk_ahash_ctx),
420429
.cra_alignmask = 3,
421-
.cra_init = rk_cra_hash_init,
422-
.cra_exit = rk_cra_hash_exit,
423430
.cra_module = THIS_MODULE,
424431
}
425432
}
426-
}
433+
},
434+
.alg.hash.op = {
435+
.do_one_request = rk_hash_run,
436+
},
427437
};
428438

429439
struct rk_crypto_tmp rk_ahash_md5 = {
430440
.type = CRYPTO_ALG_TYPE_AHASH,
431-
.alg.hash = {
441+
.alg.hash.base = {
432442
.init = rk_ahash_init,
433443
.update = rk_ahash_update,
434444
.final = rk_ahash_final,
435445
.finup = rk_ahash_finup,
436446
.export = rk_ahash_export,
437447
.import = rk_ahash_import,
438448
.digest = rk_ahash_digest,
449+
.init_tfm = rk_hash_init_tfm,
450+
.exit_tfm = rk_hash_exit_tfm,
439451
.halg = {
440452
.digestsize = MD5_DIGEST_SIZE,
441453
.statesize = sizeof(struct md5_state),
@@ -448,10 +460,11 @@ struct rk_crypto_tmp rk_ahash_md5 = {
448460
.cra_blocksize = SHA1_BLOCK_SIZE,
449461
.cra_ctxsize = sizeof(struct rk_ahash_ctx),
450462
.cra_alignmask = 3,
451-
.cra_init = rk_cra_hash_init,
452-
.cra_exit = rk_cra_hash_exit,
453463
.cra_module = THIS_MODULE,
454464
}
455465
}
456-
}
466+
},
467+
.alg.hash.op = {
468+
.do_one_request = rk_hash_run,
469+
},
457470
};

0 commit comments

Comments
 (0)