1 /******************************************************************************
2  *
3  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4  * Analog Devices, Inc.),
5  * Copyright (C) 2023-2024 Analog Devices, Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************************/
20 
21 /****** Includes *******/
22 #include <stddef.h>
23 #include <stdint.h>
24 #include "mxc_device.h"
25 #include "mxc_assert.h"
26 #include "mxc_lock.h"
27 #include "mxc_sys.h"
28 #include "spixr.h"
29 #include "spixr_reva.h"
30 
31 /****** Functions ******/
MXC_SPIXR_ReadRXFIFO(uint8_t * buf,int len)32 int MXC_SPIXR_ReadRXFIFO(uint8_t *buf, int len)
33 {
34     return MXC_SPIXR_RevA_ReadRXFIFO((mxc_spixr_reva_regs_t *)MXC_SPIXR, buf, len);
35 }
36 
MXC_SPIXR_WriteTXFIFO(uint8_t * buf,int len)37 int MXC_SPIXR_WriteTXFIFO(uint8_t *buf, int len)
38 {
39     return MXC_SPIXR_RevA_WriteTXFIFO((mxc_spixr_reva_regs_t *)MXC_SPIXR, buf, len);
40 }
41 
MXC_SPIXR_SetSS(int ssIdx)42 void MXC_SPIXR_SetSS(int ssIdx)
43 {
44     MXC_SPIXR_RevA_SetSS((mxc_spixr_reva_regs_t *)MXC_SPIXR, ssIdx);
45 }
46 
MXC_SPIXR_GetSS(void)47 int MXC_SPIXR_GetSS(void)
48 {
49     return MXC_SPIXR_RevA_GetSS((mxc_spixr_reva_regs_t *)MXC_SPIXR);
50 }
51 
MXC_SPIXR_SetSSCtrl(int stayActive)52 void MXC_SPIXR_SetSSCtrl(int stayActive)
53 {
54     MXC_SPIXR_RevA_SetSSCtrl((mxc_spixr_reva_regs_t *)MXC_SPIXR, stayActive);
55 }
56 
MXC_SPIXR_GetSSCtrl(void)57 int MXC_SPIXR_GetSSCtrl(void)
58 {
59     return MXC_SPIXR_RevA_GetSSCtrl((mxc_spixr_reva_regs_t *)MXC_SPIXR);
60 }
61 
MXC_SPIXR_Enable(void)62 void MXC_SPIXR_Enable(void)
63 {
64     MXC_SPIXR_RevA_Enable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
65 }
66 
MXC_SPIXR_Disable(void)67 void MXC_SPIXR_Disable(void)
68 {
69     MXC_SPIXR_RevA_Disable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
70 }
71 
MXC_SPIXR_IsEnabled(void)72 int MXC_SPIXR_IsEnabled(void)
73 {
74     return MXC_SPIXR_RevA_IsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
75 }
76 
MXC_SPIXR_ThreeWireModeEnable(void)77 void MXC_SPIXR_ThreeWireModeEnable(void)
78 {
79     MXC_SPIXR_RevA_ThreeWireModeEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
80 }
81 
MXC_SPIXR_ThreeWireModeDisable(void)82 void MXC_SPIXR_ThreeWireModeDisable(void)
83 {
84     MXC_SPIXR_RevA_ThreeWireModeDisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
85 }
86 
MXC_SPIXR_ThreeWireModeIsEnabled(void)87 int MXC_SPIXR_ThreeWireModeIsEnabled(void)
88 {
89     return MXC_SPIXR_RevA_ThreeWireModeIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
90 }
91 
MXC_SPIXR_GetTXFIFOCount(void)92 int MXC_SPIXR_GetTXFIFOCount(void)
93 {
94     return MXC_SPIXR_RevA_GetTXFIFOCount((mxc_spixr_reva_regs_t *)MXC_SPIXR);
95 }
96 
MXC_SPIXR_GetRXFIFOCount(void)97 int MXC_SPIXR_GetRXFIFOCount(void)
98 {
99     return MXC_SPIXR_RevA_GetRXFIFOCount((mxc_spixr_reva_regs_t *)MXC_SPIXR);
100 }
101 
MXC_SPIXR_SetWidth(mxc_spixr_width_t width)102 int MXC_SPIXR_SetWidth(mxc_spixr_width_t width)
103 {
104     return MXC_SPIXR_RevA_SetWidth((mxc_spixr_reva_regs_t *)MXC_SPIXR,
105                                    (mxc_spixr_reva_width_t)width);
106 }
107 
MXC_SPIXR_SetSPIMode(mxc_spixr_mode_t mode)108 int MXC_SPIXR_SetSPIMode(mxc_spixr_mode_t mode)
109 {
110     return MXC_SPIXR_RevA_SetSPIMode((mxc_spixr_reva_regs_t *)MXC_SPIXR,
111                                      (mxc_spixr_reva_mode_t)mode);
112 }
113 
MXC_SPIXR_SetSSPolarity(int activeLow)114 int MXC_SPIXR_SetSSPolarity(int activeLow)
115 {
116     return MXC_SPIXR_RevA_SetSSPolarity((mxc_spixr_reva_regs_t *)MXC_SPIXR, activeLow);
117 }
118 
MXC_SPIXR_SetSSTiming(unsigned int ssIActDelay,unsigned int postActive,unsigned int preActive)119 void MXC_SPIXR_SetSSTiming(unsigned int ssIActDelay, unsigned int postActive,
120                            unsigned int preActive)
121 {
122     MXC_SPIXR_RevA_SetSSTiming((mxc_spixr_reva_regs_t *)MXC_SPIXR, ssIActDelay, postActive,
123                                preActive);
124 }
125 
MXC_SPIXR_SetFrequency(int hz)126 int MXC_SPIXR_SetFrequency(int hz)
127 {
128     return MXC_SPIXR_RevA_SetFrequency((mxc_spixr_reva_regs_t *)MXC_SPIXR, hz);
129 }
130 
MXC_SPIXR_GetFrequency(void)131 int MXC_SPIXR_GetFrequency(void)
132 {
133     return MXC_SPIXR_RevA_GetFrequency((mxc_spixr_reva_regs_t *)MXC_SPIXR);
134 }
135 
MXC_SPIXR_GetIntFlags(void)136 int MXC_SPIXR_GetIntFlags(void)
137 {
138     return MXC_SPIXR_RevA_GetIntFlags((mxc_spixr_reva_regs_t *)MXC_SPIXR);
139 }
140 
MXC_SPIXR_EnableInt(int flags)141 void MXC_SPIXR_EnableInt(int flags)
142 {
143     MXC_SPIXR_RevA_EnableInt((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
144 }
145 
MXC_SPIXR_DisableInt(int flags)146 void MXC_SPIXR_DisableInt(int flags)
147 {
148     MXC_SPIXR_RevA_DisableInt((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
149 }
150 
MXC_SPIXR_GetWakeUpFlags(void)151 int MXC_SPIXR_GetWakeUpFlags(void)
152 {
153     return MXC_SPIXR_RevA_GetWakeUpFlags((mxc_spixr_reva_regs_t *)MXC_SPIXR);
154 }
155 
MXC_SPIXR_EnableWakeUp(int flags)156 void MXC_SPIXR_EnableWakeUp(int flags)
157 {
158     MXC_SPIXR_RevA_EnableWakeUp((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
159 }
160 
MXC_SPIXR_DisableWakeUp(int flags)161 void MXC_SPIXR_DisableWakeUp(int flags)
162 {
163     MXC_SPIXR_RevA_DisableWakeUp((mxc_spixr_reva_regs_t *)MXC_SPIXR, flags);
164 }
165 
MXC_SPIXR_ExMemEnable(void)166 void MXC_SPIXR_ExMemEnable(void)
167 {
168     MXC_SPIXR_RevA_ExMemEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
169 }
170 
MXC_SPIXR_ExMemDisable(void)171 void MXC_SPIXR_ExMemDisable(void)
172 {
173     MXC_SPIXR_RevA_ExMemDisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
174 }
175 
MXC_SPIXR_ExMemUseDummy(int delay255)176 void MXC_SPIXR_ExMemUseDummy(int delay255)
177 {
178     MXC_SPIXR_RevA_ExMemUseDummy((mxc_spixr_reva_regs_t *)MXC_SPIXR, delay255);
179 }
180 
MXC_SPIXR_ExMemSetWriteCommand(uint8_t command)181 void MXC_SPIXR_ExMemSetWriteCommand(uint8_t command)
182 {
183     MXC_SPIXR_RevA_ExMemSetWriteCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR, command);
184 }
185 
MXC_SPIXR_ExMemGetWriteCommand(void)186 uint8_t MXC_SPIXR_ExMemGetWriteCommand(void)
187 {
188     return MXC_SPIXR_RevA_ExMemGetWriteCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR);
189 }
190 
MXC_SPIXR_ExMemSetReadCommand(uint8_t command)191 void MXC_SPIXR_ExMemSetReadCommand(uint8_t command)
192 {
193     MXC_SPIXR_RevA_ExMemSetReadCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR, command);
194 }
195 
MXC_SPIXR_ExMemGetReadCommand(void)196 uint8_t MXC_SPIXR_ExMemGetReadCommand(void)
197 {
198     return MXC_SPIXR_RevA_ExMemGetReadCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR);
199 }
200 
MXC_SPIXR_Busy(void)201 int MXC_SPIXR_Busy(void)
202 {
203     return MXC_SPIXR_RevA_Busy((mxc_spixr_reva_regs_t *)MXC_SPIXR);
204 }
205 
MXC_SPIXR_Init(mxc_spixr_cfg_t * cfg)206 int MXC_SPIXR_Init(mxc_spixr_cfg_t *cfg)
207 {
208     MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SYSCACHE);
209 
210     /* The crypto clock needs to be turned on for crypto to work. */
211     if ((MXC_GCR->clkctrl & MXC_F_GCR_CLKCTRL_IBRO_EN) == 0) {
212         MXC_GCR->clkctrl |= MXC_F_GCR_CLKCTRL_IBRO_EN;
213 
214         // Check if TPU clock is ready
215         if (MXC_SYS_Clock_Timeout(MXC_F_GCR_CLKCTRL_IBRO_RDY) != E_NO_ERROR) {
216             return E_TIME_OUT;
217         }
218     }
219 
220     MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SPIXIP);
221 
222     MXC_GPIO_Config(&gpio_cfg_spixr);
223 
224     return MXC_SPIXR_RevA_Init((mxc_spixr_reva_regs_t *)MXC_SPIXR, (mxc_spixr_reva_cfg_t *)cfg);
225 }
226 
MXC_SPIXR_Shutdown(void)227 int MXC_SPIXR_Shutdown(void)
228 {
229     MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SYSCACHE);
230     MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SPIXIP);
231 
232     return MXC_SPIXR_RevA_Shutdown((mxc_spixr_reva_regs_t *)MXC_SPIXR);
233 }
234 
MXC_SPIXR_SendCommand(uint8_t * cmd,uint32_t length,uint32_t tx_num_char)235 void MXC_SPIXR_SendCommand(uint8_t *cmd, uint32_t length, uint32_t tx_num_char)
236 {
237     MXC_SPIXR_RevA_SendCommand((mxc_spixr_reva_regs_t *)MXC_SPIXR, cmd, length, tx_num_char);
238 }
239 
MXC_SPIXR_TXFIFOEnable(void)240 void MXC_SPIXR_TXFIFOEnable(void)
241 {
242     MXC_SPIXR_RevA_TXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
243 }
244 
MXC_SPIXR_TXFIFODisable(void)245 void MXC_SPIXR_TXFIFODisable(void)
246 {
247     MXC_SPIXR_RevA_TXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
248 }
249 
MXC_SPIXR_TXFIFOIsEnabled(void)250 int MXC_SPIXR_TXFIFOIsEnabled(void)
251 {
252     return MXC_SPIXR_RevA_TXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
253 }
254 
MXC_SPIXR_DmaTXFIFOEnable(void)255 void MXC_SPIXR_DmaTXFIFOEnable(void)
256 {
257     MXC_SPIXR_RevA_DmaTXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
258 }
259 
MXC_SPIXR_DmaTXFIFODisable(void)260 void MXC_SPIXR_DmaTXFIFODisable(void)
261 {
262     MXC_SPIXR_RevA_DmaTXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
263 }
264 
MXC_SPIXR_DmaTXFIFOIsEnabled(void)265 int MXC_SPIXR_DmaTXFIFOIsEnabled(void)
266 {
267     return MXC_SPIXR_RevA_DmaTXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
268 }
269 
MXC_SPIXR_RXFIFOEnable(void)270 void MXC_SPIXR_RXFIFOEnable(void)
271 {
272     MXC_SPIXR_RevA_RXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
273 }
274 
MXC_SPIXR_RXFIFODisable(void)275 void MXC_SPIXR_RXFIFODisable(void)
276 {
277     MXC_SPIXR_RevA_RXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
278 }
279 
MXC_SPIXR_RXFIFOIsEnabled(void)280 int MXC_SPIXR_RXFIFOIsEnabled(void)
281 {
282     return MXC_SPIXR_RevA_RXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
283 }
284 
MXC_SPIXR_DmaRXFIFOEnable(void)285 void MXC_SPIXR_DmaRXFIFOEnable(void)
286 {
287     MXC_SPIXR_RevA_DmaRXFIFOEnable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
288 }
289 
MXC_SPIXR_DmaRXFIFODisable(void)290 void MXC_SPIXR_DmaRXFIFODisable(void)
291 {
292     MXC_SPIXR_RevA_DmaRXFIFODisable((mxc_spixr_reva_regs_t *)MXC_SPIXR);
293 }
294 
MXC_SPIXR_DmaRXFIFOIsEnabled(void)295 int MXC_SPIXR_DmaRXFIFOIsEnabled(void)
296 {
297     return MXC_SPIXR_RevA_DmaRXFIFOIsEnabled((mxc_spixr_reva_regs_t *)MXC_SPIXR);
298 }
299 
MXC_SPIXR_TXFIFOClear(void)300 void MXC_SPIXR_TXFIFOClear(void)
301 {
302     MXC_SPIXR_RevA_TXFIFOClear((mxc_spixr_reva_regs_t *)MXC_SPIXR);
303 }
304 
MXC_SPIXR_RXFIFOClear(void)305 void MXC_SPIXR_RXFIFOClear(void)
306 {
307     MXC_SPIXR_RevA_RXFIFOClear((mxc_spixr_reva_regs_t *)MXC_SPIXR);
308 }
309