lkml.org 
[lkml]   [2022]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] crypto: caam/rng: Add support for PRNG
Hi,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on herbert-cryptodev-2.6/master]
[also build test WARNING on herbert-crypto-2.6/master v5.17-rc7 next-20220308]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/meenakshi-aggarwal-nxp-com/crypto-caam-rng-Add-support-for-PRNG/20220307-142401
base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
config: arm-multi_v7_defconfig (https://download.01.org/0day-ci/archive/20220309/202203090603.qhbToPLJ-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/bc27c1a2748de5052fb4c042d90fa1e0e4132043
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review meenakshi-aggarwal-nxp-com/crypto-caam-rng-Add-support-for-PRNG/20220307-142401
git checkout bc27c1a2748de5052fb4c042d90fa1e0e4132043
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm SHELL=/bin/bash drivers/crypto/caam/ drivers/rtc/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

In file included from drivers/crypto/caam/compat.h:18,
from drivers/crypto/caam/caamprng.c:11:
drivers/crypto/caam/caamprng.c: In function 'caam_prng_seed':
>> drivers/crypto/caam/caamprng.c:156:46: warning: passing argument 2 of 'dma_map_single_attrs' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
156 | seed_dma = dma_map_single(ctx.jrdev, seed, slen, DMA_FROM_DEVICE);
| ^~~~
include/linux/dma-mapping.h:406:60: note: in definition of macro 'dma_map_single'
406 | #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)
| ^
include/linux/dma-mapping.h:322:73: note: expected 'void *' but argument is of type 'const u8 *' {aka 'const unsigned char *'}
322 | static inline dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr,
| ~~~~~~^~~


vim +156 drivers/crypto/caam/caamprng.c

> 11 #include "compat.h"
12 #include "regs.h"
13 #include "intern.h"
14 #include "desc_constr.h"
15 #include "jr.h"
16 #include "error.h"
17
18 /*
19 * Length of used descriptors, see caam_init_desc()
20 */
21 #define CAAM_PRNG_DESC_LEN (CAAM_CMD_SZ + \
22 CAAM_CMD_SZ + \
23 CAAM_CMD_SZ + CAAM_PTR_SZ_MAX)
24
25 /* prng per-device context */
26 struct caam_prng_ctx {
27 struct device *jrdev;
28 struct completion done;
29 };
30
31 struct caam_prng_alg {
32 struct rng_alg rng;
33 bool registered;
34 };
35
36 static void caam_prng_done(struct device *jrdev, u32 *desc, u32 err,
37 void *context)
38 {
39 struct caam_prng_ctx *jctx = context;
40
41 if (err)
42 caam_jr_strstatus(jrdev, err);
43
44 complete(&jctx->done);
45 }
46
47 static u32 *caam_init_reseed_desc(u32 *desc, dma_addr_t seed_dma, u32 len)
48 {
49 init_job_desc(desc, 0); /* + 1 cmd_sz */
50 /* Generate random bytes: + 1 cmd_sz */
51 append_operation(desc, OP_TYPE_CLASS1_ALG | OP_ALG_ALGSEL_RNG |
52 OP_ALG_AS_FINALIZE | OP_ALG_AI_ON);
53 /* Store bytes: + 1 cmd_sz + caam_ptr_sz */
54 append_load(desc, seed_dma, len, CLASS_1 | LDST_SRCDST_BYTE_CONTEXT);
55
56 print_hex_dump_debug("prng reseed desc@: ", DUMP_PREFIX_ADDRESS,
57 16, 4, desc, desc_bytes(desc), 1);
58
59 return desc;
60 }
61
62 static u32 *caam_init_prng_desc(u32 *desc, dma_addr_t dst_dma, u32 len)
63 {
64 init_job_desc(desc, 0); /* + 1 cmd_sz */
65 /* Generate random bytes: + 1 cmd_sz */
66 append_operation(desc, OP_ALG_ALGSEL_RNG | OP_TYPE_CLASS1_ALG);
67 /* Store bytes: + 1 cmd_sz + caam_ptr_sz */
68 append_fifo_store(desc, dst_dma,
69 len, FIFOST_TYPE_RNGSTORE);
70
71 print_hex_dump_debug("prng job desc@: ", DUMP_PREFIX_ADDRESS,
72 16, 4, desc, desc_bytes(desc), 1);
73
74 return desc;
75 }
76
77 static int caam_prng_generate(struct crypto_rng *tfm,
78 const u8 *src, unsigned int slen,
79 u8 *dst, unsigned int dlen)
80 {
81 struct caam_prng_ctx ctx;
82 dma_addr_t dst_dma;
83 u32 *desc;
84 int ret;
85
86 ctx.jrdev = caam_jr_alloc();
87 ret = PTR_ERR_OR_ZERO(ctx.jrdev);
88 if (ret) {
89 pr_err("Job Ring Device allocation failed\n");
90 return ret;
91 }
92
93 desc = kzalloc(CAAM_PRNG_DESC_LEN, GFP_KERNEL | GFP_DMA);
94 if (!desc) {
95 caam_jr_free(ctx.jrdev);
96 return -ENOMEM;
97 }
98
99 dst_dma = dma_map_single(ctx.jrdev, dst, dlen, DMA_FROM_DEVICE);
100 if (dma_mapping_error(ctx.jrdev, dst_dma)) {
101 dev_err(ctx.jrdev, "Failed to map destination buffer memory\n");
102 ret = -ENOMEM;
103 goto out;
104 }
105
106 init_completion(&ctx.done);
107 ret = caam_jr_enqueue(ctx.jrdev,
108 caam_init_prng_desc(desc, dst_dma, dlen),
109 caam_prng_done, &ctx);
110
111 if (ret == -EINPROGRESS) {
112 wait_for_completion(&ctx.done);
113 ret = 0;
114 }
115
116 dma_unmap_single(ctx.jrdev, dst_dma, dlen, DMA_FROM_DEVICE);
117
118 out:
119 kfree(desc);
120 caam_jr_free(ctx.jrdev);
121 return ret;
122 }
123
124 static void caam_prng_exit(struct crypto_tfm *tfm)
125 {
126
127 return;
128 }
129
130 static int caam_prng_init(struct crypto_tfm *tfm)
131 {
132 return 0;
133 }
134
135 static int caam_prng_seed(struct crypto_rng *tfm,
136 const u8 *seed, unsigned int slen)
137 {
138 struct caam_prng_ctx ctx;
139 dma_addr_t seed_dma;
140 u32 *desc;
141 int ret;
142
143 ctx.jrdev = caam_jr_alloc();
144 ret = PTR_ERR_OR_ZERO(ctx.jrdev);
145 if (ret) {
146 pr_err("Job Ring Device allocation failed\n");
147 return ret;
148 }
149
150 desc = kzalloc(CAAM_PRNG_DESC_LEN, GFP_KERNEL | GFP_DMA);
151 if (!desc) {
152 caam_jr_free(ctx.jrdev);
153 return -ENOMEM;
154 }
155
> 156 seed_dma = dma_map_single(ctx.jrdev, seed, slen, DMA_FROM_DEVICE);
157 if (dma_mapping_error(ctx.jrdev, seed_dma)) {
158 dev_err(ctx.jrdev, "Failed to map destination buffer memory\n");
159 ret = -ENOMEM;
160 goto out;
161 }
162
163 init_completion(&ctx.done);
164 ret = caam_jr_enqueue(ctx.jrdev,
165 caam_init_reseed_desc(desc, seed_dma, slen),
166 caam_prng_done, &ctx);
167
168 if (ret == -EINPROGRESS) {
169 wait_for_completion(&ctx.done);
170 ret = 0;
171 }
172
173 dma_unmap_single(ctx.jrdev, seed_dma, slen, DMA_FROM_DEVICE);
174
175 out:
176 kfree(desc);
177 caam_jr_free(ctx.jrdev);
178 return ret;
179 }
180

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

\
 
 \ /
  Last update: 2022-03-08 23:51    [W:3.560 / U:0.008 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site