1 /**
2  * @file
3  * @brief   Trust Protection Unit driver.
4  */
5 
6 /******************************************************************************
7  *
8  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
9  * Analog Devices, Inc.),
10  * Copyright (C) 2023-2024 Analog Devices, Inc.
11  *
12  * Licensed under the Apache License, Version 2.0 (the "License");
13  * you may not use this file except in compliance with the License.
14  * You may obtain a copy of the License at
15  *
16  *     http://www.apache.org/licenses/LICENSE-2.0
17  *
18  * Unless required by applicable law or agreed to in writing, software
19  * distributed under the License is distributed on an "AS IS" BASIS,
20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  * See the License for the specific language governing permissions and
22  * limitations under the License.
23  *
24  ******************************************************************************/
25 
26 #include "mxc_device.h"
27 #include "mxc_errors.h"
28 #include "mxc_assert.h"
29 #include "mxc_sys.h"
30 #include "aes_revb.h"
31 #include "trng_revb.h"
32 
33 /* ************************************************************************* */
34 /* Global Control/Configuration functions                                    */
35 /* ************************************************************************* */
36 
MXC_AES_Init(void)37 int MXC_AES_Init(void)
38 {
39 #ifndef MSDK_NO_GPIO_CLK_INIT
40     MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_AES);
41     MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_TRNG);
42 #endif
43 
44     return MXC_AES_RevB_Init((mxc_aes_revb_regs_t *)MXC_AES);
45 }
46 
MXC_AES_EnableInt(uint32_t interrupt)47 void MXC_AES_EnableInt(uint32_t interrupt)
48 {
49     MXC_AES_RevB_EnableInt((mxc_aes_revb_regs_t *)MXC_AES, interrupt);
50 }
51 
MXC_AES_DisableInt(uint32_t interrupt)52 void MXC_AES_DisableInt(uint32_t interrupt)
53 {
54     MXC_AES_RevB_DisableInt((mxc_aes_revb_regs_t *)MXC_AES, interrupt);
55 }
56 
MXC_AES_IsBusy(void)57 int MXC_AES_IsBusy(void)
58 {
59     return MXC_AES_RevB_IsBusy((mxc_aes_revb_regs_t *)MXC_AES);
60 }
61 
MXC_AES_Shutdown(void)62 int MXC_AES_Shutdown(void)
63 {
64     int error = MXC_AES_RevB_Shutdown((mxc_aes_revb_regs_t *)MXC_AES);
65 
66     MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_AES);
67 
68     return error;
69 }
70 
MXC_AES_DMACallback(int ch,int error)71 void MXC_AES_DMACallback(int ch, int error)
72 {
73     MXC_AES_RevB_DMACallback(ch, error);
74 }
75 
MXC_AES_GenerateKey(void)76 void MXC_AES_GenerateKey(void)
77 {
78     // Generating a random key is part of the TRNG block.
79     MXC_TRNG_RevB_GenerateKey((mxc_trng_revb_regs_t *)MXC_TRNG);
80 }
81 
MXC_AES_SetKeySize(mxc_aes_keys_t key)82 void MXC_AES_SetKeySize(mxc_aes_keys_t key)
83 {
84     MXC_AES_RevB_SetKeySize((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_keys_t)key);
85 }
86 
MXC_AES_GetKeySize(void)87 mxc_aes_keys_t MXC_AES_GetKeySize(void)
88 {
89     return MXC_AES_RevB_GetKeySize((mxc_aes_revb_regs_t *)MXC_AES);
90 }
91 
MXC_AES_FlushInputFIFO(void)92 void MXC_AES_FlushInputFIFO(void)
93 {
94     MXC_AES_RevB_FlushInputFIFO((mxc_aes_revb_regs_t *)MXC_AES);
95 }
96 
MXC_AES_FlushOutputFIFO(void)97 void MXC_AES_FlushOutputFIFO(void)
98 {
99     MXC_AES_RevB_FlushOutputFIFO((mxc_aes_revb_regs_t *)MXC_AES);
100 }
101 
MXC_AES_Start(void)102 void MXC_AES_Start(void)
103 {
104     MXC_AES_RevB_Start((mxc_aes_revb_regs_t *)MXC_AES);
105 }
106 
MXC_AES_GetFlags(void)107 uint32_t MXC_AES_GetFlags(void)
108 {
109     return MXC_AES_RevB_GetFlags((mxc_aes_revb_regs_t *)MXC_AES);
110 }
111 
MXC_AES_ClearFlags(uint32_t flags)112 void MXC_AES_ClearFlags(uint32_t flags)
113 {
114     MXC_AES_RevB_ClearFlags((mxc_aes_revb_regs_t *)MXC_AES, flags);
115 }
116 
MXC_AES_Generic(mxc_aes_req_t * req)117 int MXC_AES_Generic(mxc_aes_req_t *req)
118 {
119     return MXC_AES_RevB_Generic((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
120 }
121 
MXC_AES_Encrypt(mxc_aes_req_t * req)122 int MXC_AES_Encrypt(mxc_aes_req_t *req)
123 {
124     return MXC_AES_RevB_Encrypt((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
125 }
126 
MXC_AES_Decrypt(mxc_aes_req_t * req)127 int MXC_AES_Decrypt(mxc_aes_req_t *req)
128 {
129     return MXC_AES_RevB_Decrypt((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
130 }
131 
MXC_AES_TXDMAConfig(void * src_addr,int len)132 int MXC_AES_TXDMAConfig(void *src_addr, int len)
133 {
134     return MXC_AES_RevB_TXDMAConfig(src_addr, len);
135 }
136 
MXC_AES_RXDMAConfig(void * dest_addr,int len)137 int MXC_AES_RXDMAConfig(void *dest_addr, int len)
138 {
139     return MXC_AES_RevB_RXDMAConfig(dest_addr, len);
140 }
141 
MXC_AES_GenericAsync(mxc_aes_req_t * req,uint8_t enc)142 int MXC_AES_GenericAsync(mxc_aes_req_t *req, uint8_t enc)
143 {
144     return MXC_AES_RevB_GenericAsync((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req,
145                                      enc);
146 }
147 
MXC_AES_EncryptAsync(mxc_aes_req_t * req)148 int MXC_AES_EncryptAsync(mxc_aes_req_t *req)
149 {
150     return MXC_AES_RevB_EncryptAsync((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
151 }
152 
MXC_AES_DecryptAsync(mxc_aes_req_t * req)153 int MXC_AES_DecryptAsync(mxc_aes_req_t *req)
154 {
155     return MXC_AES_RevB_DecryptAsync((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
156 }
157 
MXC_AES_SetExtKey(const void * key,mxc_aes_keys_t len)158 void MXC_AES_SetExtKey(const void *key, mxc_aes_keys_t len)
159 {
160     return MXC_AES_RevB_SetExtKey((mxc_aeskeys_revb_regs_t *)MXC_AESKEYS, key, len);
161 }
162