]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/crypto/fsl/jobdesc.c
cbe5c3020e0d81f4a53016d5bccb71a76d859243
[karo-tx-uboot.git] / drivers / crypto / fsl / jobdesc.c
1 /*
2  * SEC Descriptor Construction Library
3  * Basic job descriptor construction
4  *
5  * Copyright 2014 Freescale Semiconductor, Inc.
6  *
7  * SPDX-License-Identifier:     GPL-2.0+
8  *
9  */
10
11 #include <common.h>
12 #include "desc_constr.h"
13 #include "jobdesc.h"
14
15 void inline_cnstr_jobdesc_hash(uint32_t *desc,
16                           const uint8_t *msg, uint32_t msgsz, uint8_t *digest,
17                           u32 alg_type, uint32_t alg_size, int sg_tbl)
18 {
19         /* SHA 256 , output is of length 32 words */
20         uint32_t storelen = alg_size;
21         u32 options;
22         dma_addr_t dma_addr_in, dma_addr_out;
23
24         dma_addr_in = virt_to_phys((void *)msg);
25         dma_addr_out = virt_to_phys((void *)digest);
26
27         init_job_desc(desc, 0);
28         append_operation(desc, OP_TYPE_CLASS2_ALG |
29                          OP_ALG_AAI_HASH | OP_ALG_AS_INITFINAL |
30                          OP_ALG_ENCRYPT | OP_ALG_ICV_OFF | alg_type);
31
32         options = LDST_CLASS_2_CCB | FIFOLD_TYPE_MSG | FIFOLD_TYPE_LAST2;
33         if (sg_tbl)
34                 options |= FIFOLDST_SGF;
35         if (msgsz > 0xffff) {
36                 options |= FIFOLDST_EXT;
37                 append_fifo_load(desc, dma_addr_in, 0, options);
38                 append_cmd(desc, msgsz);
39         } else {
40                 append_fifo_load(desc, dma_addr_in, msgsz, options);
41         }
42
43         append_store(desc, dma_addr_out, storelen,
44                      LDST_CLASS_2_CCB | LDST_SRCDST_BYTE_CONTEXT);
45 }