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.h"
32 #include "trng_revb.h"
33
34 /* ************************************************************************* */
35 /* Global Control/Configuration functions */
36 /* ************************************************************************* */
37
MXC_AES_Init(void)38 int MXC_AES_Init(void)
39 {
40 #ifndef MSDK_NO_GPIO_CLK_INIT
41 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_AES);
42 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_TRNG);
43 #endif
44
45 return MXC_AES_RevB_Init((mxc_aes_revb_regs_t *)MXC_AES);
46 }
47
MXC_AES_EnableInt(uint32_t interrupt)48 void MXC_AES_EnableInt(uint32_t interrupt)
49 {
50 MXC_AES_RevB_EnableInt((mxc_aes_revb_regs_t *)MXC_AES, interrupt);
51 }
52
MXC_AES_DisableInt(uint32_t interrupt)53 void MXC_AES_DisableInt(uint32_t interrupt)
54 {
55 MXC_AES_RevB_DisableInt((mxc_aes_revb_regs_t *)MXC_AES, interrupt);
56 }
57
MXC_AES_IsBusy(void)58 int MXC_AES_IsBusy(void)
59 {
60 return MXC_AES_RevB_IsBusy((mxc_aes_revb_regs_t *)MXC_AES);
61 }
62
MXC_AES_Shutdown(void)63 int MXC_AES_Shutdown(void)
64 {
65 int error = MXC_AES_RevB_Shutdown((mxc_aes_revb_regs_t *)MXC_AES);
66
67 MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_AES);
68
69 return error;
70 }
71
MXC_AES_DMACallback(int ch,int error)72 void MXC_AES_DMACallback(int ch, int error)
73 {
74 MXC_AES_RevB_DMACallback(ch, error);
75 }
76
MXC_AES_GenerateKey(void)77 void MXC_AES_GenerateKey(void)
78 {
79 // Generating a random key is part of the TRNG block.
80 MXC_TRNG_RevB_GenerateKey((mxc_trng_revb_regs_t *)MXC_TRNG);
81 }
82
MXC_AES_SetKeySize(mxc_aes_keys_t key)83 void MXC_AES_SetKeySize(mxc_aes_keys_t key)
84 {
85 MXC_AES_RevB_SetKeySize((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_keys_t)key);
86 }
87
MXC_AES_GetKeySize(void)88 mxc_aes_keys_t MXC_AES_GetKeySize(void)
89 {
90 return MXC_AES_RevB_GetKeySize((mxc_aes_revb_regs_t *)MXC_AES);
91 }
92
MXC_AES_FlushInputFIFO(void)93 void MXC_AES_FlushInputFIFO(void)
94 {
95 MXC_AES_RevB_FlushInputFIFO((mxc_aes_revb_regs_t *)MXC_AES);
96 }
97
MXC_AES_FlushOutputFIFO(void)98 void MXC_AES_FlushOutputFIFO(void)
99 {
100 MXC_AES_RevB_FlushOutputFIFO((mxc_aes_revb_regs_t *)MXC_AES);
101 }
102
MXC_AES_Start(void)103 void MXC_AES_Start(void)
104 {
105 MXC_AES_RevB_Start((mxc_aes_revb_regs_t *)MXC_AES);
106 }
107
MXC_AES_GetFlags(void)108 uint32_t MXC_AES_GetFlags(void)
109 {
110 return MXC_AES_RevB_GetFlags((mxc_aes_revb_regs_t *)MXC_AES);
111 }
112
MXC_AES_ClearFlags(uint32_t flags)113 void MXC_AES_ClearFlags(uint32_t flags)
114 {
115 MXC_AES_RevB_ClearFlags((mxc_aes_revb_regs_t *)MXC_AES, flags);
116 }
117
MXC_AES_Generic(mxc_aes_req_t * req)118 int MXC_AES_Generic(mxc_aes_req_t *req)
119 {
120 return MXC_AES_RevB_Generic((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
121 }
122
MXC_AES_Encrypt(mxc_aes_req_t * req)123 int MXC_AES_Encrypt(mxc_aes_req_t *req)
124 {
125 return MXC_AES_RevB_Encrypt((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
126 }
127
MXC_AES_Decrypt(mxc_aes_req_t * req)128 int MXC_AES_Decrypt(mxc_aes_req_t *req)
129 {
130 return MXC_AES_RevB_Decrypt((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
131 }
132
MXC_AES_TXDMAConfig(void * src_addr,int len)133 int MXC_AES_TXDMAConfig(void *src_addr, int len)
134 {
135 return MXC_AES_RevB_TXDMAConfig(src_addr, len);
136 }
137
MXC_AES_RXDMAConfig(void * dest_addr,int len)138 int MXC_AES_RXDMAConfig(void *dest_addr, int len)
139 {
140 return MXC_AES_RevB_RXDMAConfig(dest_addr, len);
141 }
142
MXC_AES_GenericAsync(mxc_aes_req_t * req,uint8_t enc)143 int MXC_AES_GenericAsync(mxc_aes_req_t *req, uint8_t enc)
144 {
145 return MXC_AES_RevB_GenericAsync((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req,
146 enc);
147 }
148
MXC_AES_EncryptAsync(mxc_aes_req_t * req)149 int MXC_AES_EncryptAsync(mxc_aes_req_t *req)
150 {
151 return MXC_AES_RevB_EncryptAsync((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
152 }
153
MXC_AES_DecryptAsync(mxc_aes_req_t * req)154 int MXC_AES_DecryptAsync(mxc_aes_req_t *req)
155 {
156 return MXC_AES_RevB_DecryptAsync((mxc_aes_revb_regs_t *)MXC_AES, (mxc_aes_revb_req_t *)req);
157 }
158
MXC_AES_SetExtKey(const void * key,mxc_aes_keys_t len)159 void MXC_AES_SetExtKey(const void *key, mxc_aes_keys_t len)
160 {
161 MXC_AES_RevB_SetExtKey((mxc_aeskeys_revb_regs_t *)MXC_AESKEYS, key, len);
162 }
163