hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/drivers/crypto/caam/key_gen.c
....@@ -15,15 +15,14 @@
1515 void *context)
1616 {
1717 struct split_key_result *res = context;
18
+ int ecode = 0;
1819
19
-#ifdef DEBUG
20
- dev_err(dev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
21
-#endif
20
+ dev_dbg(dev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
2221
2322 if (err)
24
- caam_jr_strstatus(dev, err);
23
+ ecode = caam_jr_strstatus(dev, err);
2524
26
- res->err = err;
25
+ res->err = ecode;
2726
2827 complete(&res->completion);
2928 }
....@@ -48,21 +47,21 @@
4847 {
4948 u32 *desc;
5049 struct split_key_result result;
51
- dma_addr_t dma_addr_in, dma_addr_out;
50
+ dma_addr_t dma_addr;
51
+ unsigned int local_max;
5252 int ret = -ENOMEM;
5353
5454 adata->keylen = split_key_len(adata->algtype & OP_ALG_ALGSEL_MASK);
5555 adata->keylen_pad = split_key_pad_len(adata->algtype &
5656 OP_ALG_ALGSEL_MASK);
57
+ local_max = max(keylen, adata->keylen_pad);
5758
58
-#ifdef DEBUG
59
- dev_err(jrdev, "split keylen %d split keylen padded %d\n",
59
+ dev_dbg(jrdev, "split keylen %d split keylen padded %d\n",
6060 adata->keylen, adata->keylen_pad);
61
- print_hex_dump(KERN_ERR, "ctx.key@" __stringify(__LINE__)": ",
62
- DUMP_PREFIX_ADDRESS, 16, 4, key_in, keylen, 1);
63
-#endif
61
+ print_hex_dump_debug("ctx.key@" __stringify(__LINE__)": ",
62
+ DUMP_PREFIX_ADDRESS, 16, 4, key_in, keylen, 1);
6463
65
- if (adata->keylen_pad > max_keylen)
64
+ if (local_max > max_keylen)
6665 return -EINVAL;
6766
6867 desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
....@@ -71,22 +70,16 @@
7170 return ret;
7271 }
7372
74
- dma_addr_in = dma_map_single(jrdev, (void *)key_in, keylen,
75
- DMA_TO_DEVICE);
76
- if (dma_mapping_error(jrdev, dma_addr_in)) {
77
- dev_err(jrdev, "unable to map key input memory\n");
73
+ memcpy(key_out, key_in, keylen);
74
+
75
+ dma_addr = dma_map_single(jrdev, key_out, local_max, DMA_BIDIRECTIONAL);
76
+ if (dma_mapping_error(jrdev, dma_addr)) {
77
+ dev_err(jrdev, "unable to map key memory\n");
7878 goto out_free;
7979 }
8080
81
- dma_addr_out = dma_map_single(jrdev, key_out, adata->keylen_pad,
82
- DMA_FROM_DEVICE);
83
- if (dma_mapping_error(jrdev, dma_addr_out)) {
84
- dev_err(jrdev, "unable to map key output memory\n");
85
- goto out_unmap_in;
86
- }
87
-
8881 init_job_desc(desc, 0);
89
- append_key(desc, dma_addr_in, keylen, CLASS_2 | KEY_DEST_CLASS_REG);
82
+ append_key(desc, dma_addr, keylen, CLASS_2 | KEY_DEST_CLASS_REG);
9083
9184 /* Sets MDHA up into an HMAC-INIT */
9285 append_operation(desc, (adata->algtype & OP_ALG_ALGSEL_MASK) |
....@@ -104,35 +97,28 @@
10497 * FIFO_STORE with the explicit split-key content store
10598 * (0x26 output type)
10699 */
107
- append_fifo_store(desc, dma_addr_out, adata->keylen,
100
+ append_fifo_store(desc, dma_addr, adata->keylen,
108101 LDST_CLASS_2_CCB | FIFOST_TYPE_SPLIT_KEK);
109102
110
-#ifdef DEBUG
111
- print_hex_dump(KERN_ERR, "ctx.key@"__stringify(__LINE__)": ",
112
- DUMP_PREFIX_ADDRESS, 16, 4, key_in, keylen, 1);
113
- print_hex_dump(KERN_ERR, "jobdesc@"__stringify(__LINE__)": ",
114
- DUMP_PREFIX_ADDRESS, 16, 4, desc, desc_bytes(desc), 1);
115
-#endif
103
+ print_hex_dump_debug("jobdesc@"__stringify(__LINE__)": ",
104
+ DUMP_PREFIX_ADDRESS, 16, 4, desc, desc_bytes(desc),
105
+ 1);
116106
117107 result.err = 0;
118108 init_completion(&result.completion);
119109
120110 ret = caam_jr_enqueue(jrdev, desc, split_key_done, &result);
121
- if (!ret) {
111
+ if (ret == -EINPROGRESS) {
122112 /* in progress */
123113 wait_for_completion(&result.completion);
124114 ret = result.err;
125
-#ifdef DEBUG
126
- print_hex_dump(KERN_ERR, "ctx.key@"__stringify(__LINE__)": ",
127
- DUMP_PREFIX_ADDRESS, 16, 4, key_out,
128
- adata->keylen_pad, 1);
129
-#endif
115
+
116
+ print_hex_dump_debug("ctx.key@"__stringify(__LINE__)": ",
117
+ DUMP_PREFIX_ADDRESS, 16, 4, key_out,
118
+ adata->keylen_pad, 1);
130119 }
131120
132
- dma_unmap_single(jrdev, dma_addr_out, adata->keylen_pad,
133
- DMA_FROM_DEVICE);
134
-out_unmap_in:
135
- dma_unmap_single(jrdev, dma_addr_in, keylen, DMA_TO_DEVICE);
121
+ dma_unmap_single(jrdev, dma_addr, local_max, DMA_BIDIRECTIONAL);
136122 out_free:
137123 kfree(desc);
138124 return ret;