1 /*
2  * Copyright (c) 2016-2019 Arm Limited. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "Driver_MPC.h"
18 
19 #include "cmsis_driver_config.h"
20 #include "RTE_Device.h"
21 
22 /* driver version */
23 #define ARM_MPC_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1,0)
24 
25 /* Driver Version */
26 static const ARM_DRIVER_VERSION DriverVersion = {
27     ARM_MPC_API_VERSION,
28     ARM_MPC_DRV_VERSION
29 };
30 
ARM_MPC_GetVersion(void)31 static ARM_DRIVER_VERSION ARM_MPC_GetVersion(void)
32 {
33     return DriverVersion;
34 }
35 
36 /*
37  * \brief Translates error codes from native API to CMSIS API.
38  *
39  * \param[in] err  Error code to translate (\ref mpc_sie200_error_t).
40  *
41  * \return Returns CMSIS error code.
42  */
error_trans(enum mpc_sie200_error_t err)43 static int32_t error_trans(enum mpc_sie200_error_t err)
44 {
45     switch(err) {
46     case MPC_SIE200_ERR_NONE:
47         return ARM_DRIVER_OK;
48     case MPC_SIE200_INVALID_ARG:
49         return ARM_DRIVER_ERROR_PARAMETER;
50     case MPC_SIE200_NOT_INIT:
51         return ARM_MPC_ERR_NOT_INIT;
52     case MPC_SIE200_ERR_NOT_IN_RANGE:
53         return ARM_MPC_ERR_NOT_IN_RANGE;
54     case MPC_SIE200_ERR_NOT_ALIGNED:
55         return ARM_MPC_ERR_NOT_ALIGNED;
56     case MPC_SIE200_ERR_INVALID_RANGE:
57         return ARM_MPC_ERR_INVALID_RANGE;
58     case MPC_SIE200_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE:
59         return ARM_MPC_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE;
60     default:
61         return ARM_MPC_ERR_UNSPECIFIED;
62     }
63 }
64 
65 #if (RTE_ISRAM0_MPC)
66 /* Ranges controlled by this ISRAM0_MPC */
67 static const struct mpc_sie200_memory_range_t MPC_ISRAM0_RANGE_S = {
68     .base         = MPC_ISRAM0_RANGE_BASE_S,
69     .limit        = MPC_ISRAM0_RANGE_LIMIT_S,
70     .range_offset = 0,
71     .attr         = MPC_SIE200_SEC_ATTR_SECURE
72 };
73 
74 static const struct mpc_sie200_memory_range_t MPC_ISRAM0_RANGE_NS = {
75     .base         = MPC_ISRAM0_RANGE_BASE_NS,
76     .limit        = MPC_ISRAM0_RANGE_LIMIT_NS,
77     .range_offset = 0,
78     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
79 };
80 
81 #define MPC_ISRAM0_RANGE_LIST_LEN  2u
82 static const struct mpc_sie200_memory_range_t* MPC_ISRAM0_RANGE_LIST[MPC_ISRAM0_RANGE_LIST_LEN]=
83     {&MPC_ISRAM0_RANGE_S, &MPC_ISRAM0_RANGE_NS};
84 
85 /* ISRAM0_MPC Driver wrapper functions */
ISRAM0_MPC_Initialize(void)86 static int32_t ISRAM0_MPC_Initialize(void)
87 {
88     enum mpc_sie200_error_t ret;
89 
90     ret = mpc_sie200_init(&MPC_ISRAM0_DEV,
91                           MPC_ISRAM0_RANGE_LIST,
92                           MPC_ISRAM0_RANGE_LIST_LEN);
93 
94     return error_trans(ret);
95 }
96 
ISRAM0_MPC_Uninitialize(void)97 static int32_t ISRAM0_MPC_Uninitialize(void)
98 {
99     /* Nothing to be done */
100     return ARM_DRIVER_OK;
101 }
102 
ISRAM0_MPC_GetBlockSize(uint32_t * blk_size)103 static int32_t ISRAM0_MPC_GetBlockSize(uint32_t* blk_size)
104 {
105     enum mpc_sie200_error_t ret;
106 
107     ret = mpc_sie200_get_block_size(&MPC_ISRAM0_DEV, blk_size);
108 
109     return error_trans(ret);
110 }
111 
ISRAM0_MPC_GetCtrlConfig(uint32_t * ctrl_val)112 static int32_t ISRAM0_MPC_GetCtrlConfig(uint32_t* ctrl_val)
113 {
114     enum mpc_sie200_error_t ret;
115 
116     ret = mpc_sie200_get_ctrl(&MPC_ISRAM0_DEV, ctrl_val);
117 
118     return error_trans(ret);
119 }
120 
ISRAM0_MPC_SetCtrlConfig(uint32_t ctrl)121 static int32_t ISRAM0_MPC_SetCtrlConfig(uint32_t ctrl)
122 {
123     enum mpc_sie200_error_t ret;
124 
125     ret = mpc_sie200_set_ctrl(&MPC_ISRAM0_DEV, ctrl);
126 
127     return error_trans(ret);
128 }
129 
ISRAM0_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)130 static int32_t ISRAM0_MPC_GetRegionConfig(uintptr_t base,
131                                           uintptr_t limit,
132                                           ARM_MPC_SEC_ATTR* attr)
133 {
134     enum mpc_sie200_error_t ret;
135 
136     ret = mpc_sie200_get_region_config(&MPC_ISRAM0_DEV, base, limit,
137                                        (enum mpc_sie200_sec_attr_t*)attr);
138 
139     return error_trans(ret);
140 }
141 
ISRAM0_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)142 static int32_t ISRAM0_MPC_ConfigRegion(uintptr_t base,
143                                        uintptr_t limit,
144                                        ARM_MPC_SEC_ATTR attr)
145 {
146     enum mpc_sie200_error_t ret;
147 
148     ret = mpc_sie200_config_region(&MPC_ISRAM0_DEV, base, limit,
149                                    (enum mpc_sie200_sec_attr_t)attr);
150 
151     return error_trans(ret);
152 }
153 
ISRAM0_MPC_EnableInterrupt(void)154 static int32_t ISRAM0_MPC_EnableInterrupt(void)
155 {
156     enum mpc_sie200_error_t ret;
157 
158     ret = mpc_sie200_irq_enable(&MPC_ISRAM0_DEV);
159 
160     return error_trans(ret);
161 }
162 
ISRAM0_MPC_DisableInterrupt(void)163 static void ISRAM0_MPC_DisableInterrupt(void)
164 {
165     mpc_sie200_irq_disable(&MPC_ISRAM0_DEV);
166 }
167 
168 
ISRAM0_MPC_ClearInterrupt(void)169 static void ISRAM0_MPC_ClearInterrupt(void)
170 {
171     mpc_sie200_clear_irq(&MPC_ISRAM0_DEV);
172 }
173 
ISRAM0_MPC_InterruptState(void)174 static uint32_t ISRAM0_MPC_InterruptState(void)
175 {
176     return mpc_sie200_irq_state(&MPC_ISRAM0_DEV);
177 }
178 
ISRAM0_MPC_LockDown(void)179 static int32_t ISRAM0_MPC_LockDown(void)
180 {
181     return mpc_sie200_lock_down(&MPC_ISRAM0_DEV);
182 }
183 
184 /* ISRAM0_MPC Driver CMSIS access structure */
185 extern ARM_DRIVER_MPC Driver_ISRAM0_MPC;
186 ARM_DRIVER_MPC Driver_ISRAM0_MPC = {
187     .GetVersion       = ARM_MPC_GetVersion,
188     .Initialize       = ISRAM0_MPC_Initialize,
189     .Uninitialize     = ISRAM0_MPC_Uninitialize,
190     .GetBlockSize     = ISRAM0_MPC_GetBlockSize,
191     .GetCtrlConfig    = ISRAM0_MPC_GetCtrlConfig,
192     .SetCtrlConfig    = ISRAM0_MPC_SetCtrlConfig,
193     .ConfigRegion     = ISRAM0_MPC_ConfigRegion,
194     .GetRegionConfig  = ISRAM0_MPC_GetRegionConfig,
195     .EnableInterrupt  = ISRAM0_MPC_EnableInterrupt,
196     .DisableInterrupt = ISRAM0_MPC_DisableInterrupt,
197     .ClearInterrupt   = ISRAM0_MPC_ClearInterrupt,
198     .InterruptState   = ISRAM0_MPC_InterruptState,
199     .LockDown         = ISRAM0_MPC_LockDown,
200 };
201 #endif /* RTE_ISRAM0_MPC */
202 
203 #if (RTE_ISRAM1_MPC)
204 /* Ranges controlled by this ISRAM1_MPC */
205 static const struct mpc_sie200_memory_range_t MPC_ISRAM1_RANGE_S = {
206     .base         = MPC_ISRAM1_RANGE_BASE_S,
207     .limit        = MPC_ISRAM1_RANGE_LIMIT_S,
208     .range_offset = 0,
209     .attr         = MPC_SIE200_SEC_ATTR_SECURE
210 };
211 
212 static const struct mpc_sie200_memory_range_t MPC_ISRAM1_RANGE_NS = {
213     .base         = MPC_ISRAM1_RANGE_BASE_NS,
214     .limit        = MPC_ISRAM1_RANGE_LIMIT_NS,
215     .range_offset = 0,
216     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
217 };
218 
219 #define MPC_ISRAM1_RANGE_LIST_LEN  2u
220 static const struct mpc_sie200_memory_range_t* MPC_ISRAM1_RANGE_LIST[MPC_ISRAM1_RANGE_LIST_LEN]=
221     {&MPC_ISRAM1_RANGE_S, &MPC_ISRAM1_RANGE_NS};
222 
223 /* ISRAM1_MPC Driver wrapper functions */
ISRAM1_MPC_Initialize(void)224 static int32_t ISRAM1_MPC_Initialize(void)
225 {
226     enum mpc_sie200_error_t ret;
227 
228     ret = mpc_sie200_init(&MPC_ISRAM1_DEV,
229                           MPC_ISRAM1_RANGE_LIST,
230                           MPC_ISRAM1_RANGE_LIST_LEN);
231 
232     return error_trans(ret);
233 }
234 
ISRAM1_MPC_Uninitialize(void)235 static int32_t ISRAM1_MPC_Uninitialize(void)
236 {
237     /* Nothing to be done */
238     return ARM_DRIVER_OK;
239 }
240 
ISRAM1_MPC_GetBlockSize(uint32_t * blk_size)241 static int32_t ISRAM1_MPC_GetBlockSize(uint32_t* blk_size)
242 {
243     enum mpc_sie200_error_t ret;
244 
245     ret = mpc_sie200_get_block_size(&MPC_ISRAM1_DEV, blk_size);
246 
247     return error_trans(ret);
248 }
249 
ISRAM1_MPC_GetCtrlConfig(uint32_t * ctrl_val)250 static int32_t ISRAM1_MPC_GetCtrlConfig(uint32_t* ctrl_val)
251 {
252     enum mpc_sie200_error_t ret;
253 
254     ret = mpc_sie200_get_ctrl(&MPC_ISRAM1_DEV, ctrl_val);
255 
256     return error_trans(ret);
257 }
258 
ISRAM1_MPC_SetCtrlConfig(uint32_t ctrl)259 static int32_t ISRAM1_MPC_SetCtrlConfig(uint32_t ctrl)
260 {
261     enum mpc_sie200_error_t ret;
262 
263     ret = mpc_sie200_set_ctrl(&MPC_ISRAM1_DEV, ctrl);
264 
265     return error_trans(ret);
266 }
267 
ISRAM1_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)268 static int32_t ISRAM1_MPC_GetRegionConfig(uintptr_t base,
269                                           uintptr_t limit,
270                                           ARM_MPC_SEC_ATTR* attr)
271 {
272     enum mpc_sie200_error_t ret;
273 
274     ret = mpc_sie200_get_region_config(&MPC_ISRAM1_DEV, base, limit,
275                                        (enum mpc_sie200_sec_attr_t*)attr);
276 
277     return error_trans(ret);
278 }
279 
ISRAM1_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)280 static int32_t ISRAM1_MPC_ConfigRegion(uintptr_t base,
281                                        uintptr_t limit,
282                                        ARM_MPC_SEC_ATTR attr)
283 {
284     enum mpc_sie200_error_t ret;
285 
286     ret = mpc_sie200_config_region(&MPC_ISRAM1_DEV, base, limit,
287                                    (enum mpc_sie200_sec_attr_t)attr);
288 
289     return error_trans(ret);
290 }
291 
ISRAM1_MPC_EnableInterrupt(void)292 static int32_t ISRAM1_MPC_EnableInterrupt(void)
293 {
294     enum mpc_sie200_error_t ret;
295 
296     ret = mpc_sie200_irq_enable(&MPC_ISRAM1_DEV);
297 
298     return error_trans(ret);
299 }
300 
ISRAM1_MPC_DisableInterrupt(void)301 static void ISRAM1_MPC_DisableInterrupt(void)
302 {
303     mpc_sie200_irq_disable(&MPC_ISRAM1_DEV);
304 }
305 
306 
ISRAM1_MPC_ClearInterrupt(void)307 static void ISRAM1_MPC_ClearInterrupt(void)
308 {
309     mpc_sie200_clear_irq(&MPC_ISRAM1_DEV);
310 }
311 
ISRAM1_MPC_InterruptState(void)312 static uint32_t ISRAM1_MPC_InterruptState(void)
313 {
314     return mpc_sie200_irq_state(&MPC_ISRAM1_DEV);
315 }
316 
ISRAM1_MPC_LockDown(void)317 static int32_t ISRAM1_MPC_LockDown(void)
318 {
319     return mpc_sie200_lock_down(&MPC_ISRAM1_DEV);
320 }
321 
322 /* ISRAM1_MPC Driver CMSIS access structure */
323 extern ARM_DRIVER_MPC Driver_ISRAM1_MPC;
324 ARM_DRIVER_MPC Driver_ISRAM1_MPC = {
325     .GetVersion       = ARM_MPC_GetVersion,
326     .Initialize       = ISRAM1_MPC_Initialize,
327     .Uninitialize     = ISRAM1_MPC_Uninitialize,
328     .GetBlockSize     = ISRAM1_MPC_GetBlockSize,
329     .GetCtrlConfig    = ISRAM1_MPC_GetCtrlConfig,
330     .SetCtrlConfig    = ISRAM1_MPC_SetCtrlConfig,
331     .ConfigRegion     = ISRAM1_MPC_ConfigRegion,
332     .GetRegionConfig  = ISRAM1_MPC_GetRegionConfig,
333     .EnableInterrupt  = ISRAM1_MPC_EnableInterrupt,
334     .DisableInterrupt = ISRAM1_MPC_DisableInterrupt,
335     .ClearInterrupt   = ISRAM1_MPC_ClearInterrupt,
336     .InterruptState   = ISRAM1_MPC_InterruptState,
337     .LockDown         = ISRAM1_MPC_LockDown,
338 };
339 #endif /* RTE_ISRAM1_MPC */
340 
341 #if (RTE_ISRAM2_MPC)
342 /* Ranges controlled by this ISRAM2_MPC */
343 static const struct mpc_sie200_memory_range_t MPC_ISRAM2_RANGE_S = {
344     .base         = MPC_ISRAM2_RANGE_BASE_S,
345     .limit        = MPC_ISRAM2_RANGE_LIMIT_S,
346     .range_offset = 0,
347     .attr         = MPC_SIE200_SEC_ATTR_SECURE
348 };
349 
350 static const struct mpc_sie200_memory_range_t MPC_ISRAM2_RANGE_NS = {
351     .base         = MPC_ISRAM2_RANGE_BASE_NS,
352     .limit        = MPC_ISRAM2_RANGE_LIMIT_NS,
353     .range_offset = 0,
354     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
355 };
356 
357 #define MPC_ISRAM2_RANGE_LIST_LEN  2u
358 static const struct mpc_sie200_memory_range_t* MPC_ISRAM2_RANGE_LIST[MPC_ISRAM2_RANGE_LIST_LEN]=
359     {&MPC_ISRAM2_RANGE_S, &MPC_ISRAM2_RANGE_NS};
360 
361 /* ISRAM2_MPC Driver wrapper functions */
ISRAM2_MPC_Initialize(void)362 static int32_t ISRAM2_MPC_Initialize(void)
363 {
364     enum mpc_sie200_error_t ret;
365 
366     ret = mpc_sie200_init(&MPC_ISRAM2_DEV,
367                           MPC_ISRAM2_RANGE_LIST,
368                           MPC_ISRAM2_RANGE_LIST_LEN);
369 
370     return error_trans(ret);
371 }
372 
ISRAM2_MPC_Uninitialize(void)373 static int32_t ISRAM2_MPC_Uninitialize(void)
374 {
375     /* Nothing to be done */
376     return ARM_DRIVER_OK;
377 }
378 
ISRAM2_MPC_GetBlockSize(uint32_t * blk_size)379 static int32_t ISRAM2_MPC_GetBlockSize(uint32_t* blk_size)
380 {
381     enum mpc_sie200_error_t ret;
382 
383     ret = mpc_sie200_get_block_size(&MPC_ISRAM2_DEV, blk_size);
384 
385     return error_trans(ret);
386 }
387 
ISRAM2_MPC_GetCtrlConfig(uint32_t * ctrl_val)388 static int32_t ISRAM2_MPC_GetCtrlConfig(uint32_t* ctrl_val)
389 {
390     enum mpc_sie200_error_t ret;
391 
392     ret = mpc_sie200_get_ctrl(&MPC_ISRAM2_DEV, ctrl_val);
393 
394     return error_trans(ret);
395 }
396 
ISRAM2_MPC_SetCtrlConfig(uint32_t ctrl)397 static int32_t ISRAM2_MPC_SetCtrlConfig(uint32_t ctrl)
398 {
399     enum mpc_sie200_error_t ret;
400 
401     ret = mpc_sie200_set_ctrl(&MPC_ISRAM2_DEV, ctrl);
402 
403     return error_trans(ret);
404 }
405 
ISRAM2_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)406 static int32_t ISRAM2_MPC_GetRegionConfig(uintptr_t base,
407                                           uintptr_t limit,
408                                           ARM_MPC_SEC_ATTR* attr)
409 {
410     enum mpc_sie200_error_t ret;
411 
412     ret = mpc_sie200_get_region_config(&MPC_ISRAM2_DEV, base, limit,
413                                        (enum mpc_sie200_sec_attr_t*)attr);
414 
415     return error_trans(ret);
416 }
417 
ISRAM2_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)418 static int32_t ISRAM2_MPC_ConfigRegion(uintptr_t base,
419                                        uintptr_t limit,
420                                        ARM_MPC_SEC_ATTR attr)
421 {
422     enum mpc_sie200_error_t ret;
423 
424     ret = mpc_sie200_config_region(&MPC_ISRAM2_DEV, base, limit,
425                                    (enum mpc_sie200_sec_attr_t)attr);
426 
427     return error_trans(ret);
428 }
429 
ISRAM2_MPC_EnableInterrupt(void)430 static int32_t ISRAM2_MPC_EnableInterrupt(void)
431 {
432     enum mpc_sie200_error_t ret;
433 
434     ret = mpc_sie200_irq_enable(&MPC_ISRAM2_DEV);
435 
436     return error_trans(ret);
437 }
438 
ISRAM2_MPC_DisableInterrupt(void)439 static void ISRAM2_MPC_DisableInterrupt(void)
440 {
441     mpc_sie200_irq_disable(&MPC_ISRAM2_DEV);
442 }
443 
ISRAM2_MPC_ClearInterrupt(void)444 static void ISRAM2_MPC_ClearInterrupt(void)
445 {
446     mpc_sie200_clear_irq(&MPC_ISRAM2_DEV);
447 }
448 
ISRAM2_MPC_InterruptState(void)449 static uint32_t ISRAM2_MPC_InterruptState(void)
450 {
451     return mpc_sie200_irq_state(&MPC_ISRAM2_DEV);
452 }
453 
ISRAM2_MPC_LockDown(void)454 static int32_t ISRAM2_MPC_LockDown(void)
455 {
456     return mpc_sie200_lock_down(&MPC_ISRAM2_DEV);
457 }
458 
459 /* ISRAM2_MPC Driver CMSIS access structure */
460 extern ARM_DRIVER_MPC Driver_ISRAM2_MPC;
461 ARM_DRIVER_MPC Driver_ISRAM2_MPC = {
462     .GetVersion       = ARM_MPC_GetVersion,
463     .Initialize       = ISRAM2_MPC_Initialize,
464     .Uninitialize     = ISRAM2_MPC_Uninitialize,
465     .GetBlockSize     = ISRAM2_MPC_GetBlockSize,
466     .GetCtrlConfig    = ISRAM2_MPC_GetCtrlConfig,
467     .SetCtrlConfig    = ISRAM2_MPC_SetCtrlConfig,
468     .ConfigRegion     = ISRAM2_MPC_ConfigRegion,
469     .GetRegionConfig  = ISRAM2_MPC_GetRegionConfig,
470     .EnableInterrupt  = ISRAM2_MPC_EnableInterrupt,
471     .DisableInterrupt = ISRAM2_MPC_DisableInterrupt,
472     .ClearInterrupt   = ISRAM2_MPC_ClearInterrupt,
473     .InterruptState   = ISRAM2_MPC_InterruptState,
474     .LockDown         = ISRAM2_MPC_LockDown,
475 };
476 #endif /* RTE_ISRAM2_MPC */
477 
478 #if (RTE_ISRAM3_MPC)
479 /* Ranges controlled by this ISRAM3_MPC */
480 static const struct mpc_sie200_memory_range_t MPC_ISRAM3_RANGE_S = {
481     .base         = MPC_ISRAM3_RANGE_BASE_S,
482     .limit        = MPC_ISRAM3_RANGE_LIMIT_S,
483     .range_offset = 0,
484     .attr         = MPC_SIE200_SEC_ATTR_SECURE
485 };
486 
487 static const struct mpc_sie200_memory_range_t MPC_ISRAM3_RANGE_NS = {
488     .base         = MPC_ISRAM3_RANGE_BASE_NS,
489     .limit        = MPC_ISRAM3_RANGE_LIMIT_NS,
490     .range_offset = 0,
491     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
492 };
493 
494 #define MPC_ISRAM3_RANGE_LIST_LEN  2u
495 static const struct mpc_sie200_memory_range_t* MPC_ISRAM3_RANGE_LIST[MPC_ISRAM3_RANGE_LIST_LEN]=
496     {&MPC_ISRAM3_RANGE_S, &MPC_ISRAM3_RANGE_NS};
497 
498 /* ISRAM3_MPC Driver wrapper functions */
ISRAM3_MPC_Initialize(void)499 static int32_t ISRAM3_MPC_Initialize(void)
500 {
501     enum mpc_sie200_error_t ret;
502 
503     ret = mpc_sie200_init(&MPC_ISRAM3_DEV,
504                           MPC_ISRAM3_RANGE_LIST,
505                           MPC_ISRAM3_RANGE_LIST_LEN);
506 
507     return error_trans(ret);
508 }
509 
ISRAM3_MPC_Uninitialize(void)510 static int32_t ISRAM3_MPC_Uninitialize(void)
511 {
512     /* Nothing to be done */
513     return ARM_DRIVER_OK;
514 }
515 
ISRAM3_MPC_GetBlockSize(uint32_t * blk_size)516 static int32_t ISRAM3_MPC_GetBlockSize(uint32_t* blk_size)
517 {
518     enum mpc_sie200_error_t ret;
519 
520     ret = mpc_sie200_get_block_size(&MPC_ISRAM3_DEV, blk_size);
521 
522     return error_trans(ret);
523 }
524 
ISRAM3_MPC_GetCtrlConfig(uint32_t * ctrl_val)525 static int32_t ISRAM3_MPC_GetCtrlConfig(uint32_t* ctrl_val)
526 {
527     enum mpc_sie200_error_t ret;
528 
529     ret = mpc_sie200_get_ctrl(&MPC_ISRAM3_DEV, ctrl_val);
530 
531     return error_trans(ret);
532 }
533 
ISRAM3_MPC_SetCtrlConfig(uint32_t ctrl)534 static int32_t ISRAM3_MPC_SetCtrlConfig(uint32_t ctrl)
535 {
536     enum mpc_sie200_error_t ret;
537 
538     ret = mpc_sie200_set_ctrl(&MPC_ISRAM3_DEV, ctrl);
539 
540     return error_trans(ret);
541 }
542 
ISRAM3_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)543 static int32_t ISRAM3_MPC_GetRegionConfig(uintptr_t base,
544                                           uintptr_t limit,
545                                           ARM_MPC_SEC_ATTR* attr)
546 {
547     enum mpc_sie200_error_t ret;
548 
549     ret = mpc_sie200_get_region_config(&MPC_ISRAM3_DEV, base, limit,
550                                        (enum mpc_sie200_sec_attr_t*)attr);
551 
552     return error_trans(ret);
553 }
554 
ISRAM3_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)555 static int32_t ISRAM3_MPC_ConfigRegion(uintptr_t base,
556                                        uintptr_t limit,
557                                        ARM_MPC_SEC_ATTR attr)
558 {
559     enum mpc_sie200_error_t ret;
560 
561     ret = mpc_sie200_config_region(&MPC_ISRAM3_DEV, base, limit,
562                                    (enum mpc_sie200_sec_attr_t)attr);
563 
564     return error_trans(ret);
565 }
566 
ISRAM3_MPC_EnableInterrupt(void)567 static int32_t ISRAM3_MPC_EnableInterrupt(void)
568 {
569     enum mpc_sie200_error_t ret;
570 
571     ret = mpc_sie200_irq_enable(&MPC_ISRAM3_DEV);
572 
573     return error_trans(ret);
574 }
575 
ISRAM3_MPC_DisableInterrupt(void)576 static void ISRAM3_MPC_DisableInterrupt(void)
577 {
578     mpc_sie200_irq_disable(&MPC_ISRAM3_DEV);
579 }
580 
581 
ISRAM3_MPC_ClearInterrupt(void)582 static void ISRAM3_MPC_ClearInterrupt(void)
583 {
584     mpc_sie200_clear_irq(&MPC_ISRAM3_DEV);
585 }
586 
ISRAM3_MPC_InterruptState(void)587 static uint32_t ISRAM3_MPC_InterruptState(void)
588 {
589     return mpc_sie200_irq_state(&MPC_ISRAM3_DEV);
590 }
591 
ISRAM3_MPC_LockDown(void)592 static int32_t ISRAM3_MPC_LockDown(void)
593 {
594     return mpc_sie200_lock_down(&MPC_ISRAM3_DEV);
595 }
596 
597 /* ISRAM3_MPC Driver CMSIS access structure */
598 extern ARM_DRIVER_MPC Driver_ISRAM3_MPC;
599 ARM_DRIVER_MPC Driver_ISRAM3_MPC = {
600     .GetVersion       = ARM_MPC_GetVersion,
601     .Initialize       = ISRAM3_MPC_Initialize,
602     .Uninitialize     = ISRAM3_MPC_Uninitialize,
603     .GetBlockSize     = ISRAM3_MPC_GetBlockSize,
604     .GetCtrlConfig    = ISRAM3_MPC_GetCtrlConfig,
605     .SetCtrlConfig    = ISRAM3_MPC_SetCtrlConfig,
606     .ConfigRegion     = ISRAM3_MPC_ConfigRegion,
607     .GetRegionConfig  = ISRAM3_MPC_GetRegionConfig,
608     .EnableInterrupt  = ISRAM3_MPC_EnableInterrupt,
609     .DisableInterrupt = ISRAM3_MPC_DisableInterrupt,
610     .ClearInterrupt   = ISRAM3_MPC_ClearInterrupt,
611     .InterruptState   = ISRAM3_MPC_InterruptState,
612     .LockDown         = ISRAM3_MPC_LockDown,
613 };
614 #endif /* RTE_ISRAM3_MPC */
615 
616 #if (RTE_CODE_SRAM_MPC)
617 /* Ranges controlled by this CODE_SRAM_MPC */
618 static const struct mpc_sie200_memory_range_t MPC_CODE_SRAM_RANGE_S = {
619     .base         = MPC_CODE_SRAM_RANGE_BASE_S,
620     .limit        = MPC_CODE_SRAM_RANGE_LIMIT_S,
621     .range_offset = 0,
622     .attr         = MPC_SIE200_SEC_ATTR_SECURE
623 };
624 
625 static const struct mpc_sie200_memory_range_t MPC_CODE_SRAM_RANGE_NS = {
626     .base         = MPC_CODE_SRAM_RANGE_BASE_NS,
627     .limit        = MPC_CODE_SRAM_RANGE_LIMIT_NS,
628     .range_offset = 0,
629     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
630 };
631 
632 #define MPC_CODE_SRAM_RANGE_LIST_LEN  2u
633 static const struct  mpc_sie200_memory_range_t* MPC_CODE_SRAM_RANGE_LIST[MPC_CODE_SRAM_RANGE_LIST_LEN]=
634     {&MPC_CODE_SRAM_RANGE_S, &MPC_CODE_SRAM_RANGE_NS};
635 
636 /* CODE_SRAM_MPC Driver wrapper functions */
CODE_SRAM_MPC_Initialize(void)637 static int32_t CODE_SRAM_MPC_Initialize(void)
638 {
639     enum mpc_sie200_error_t ret;
640 
641     ret = mpc_sie200_init(&MPC_CODE_SRAM_DEV,
642                           MPC_CODE_SRAM_RANGE_LIST,
643                           MPC_CODE_SRAM_RANGE_LIST_LEN);
644 
645     return error_trans(ret);
646 }
647 
CODE_SRAM_MPC_Uninitialize(void)648 static int32_t CODE_SRAM_MPC_Uninitialize(void)
649 {
650     /* Nothing to be done */
651     return ARM_DRIVER_OK;
652 }
653 
CODE_SRAM_MPC_GetBlockSize(uint32_t * blk_size)654 static int32_t CODE_SRAM_MPC_GetBlockSize(uint32_t* blk_size)
655 {
656     enum mpc_sie200_error_t ret;
657 
658     ret = mpc_sie200_get_block_size(&MPC_CODE_SRAM_DEV, blk_size);
659 
660     return error_trans(ret);
661 }
662 
CODE_SRAM_MPC_GetCtrlConfig(uint32_t * ctrl_val)663 static int32_t CODE_SRAM_MPC_GetCtrlConfig(uint32_t* ctrl_val)
664 {
665     enum mpc_sie200_error_t ret;
666 
667     ret = mpc_sie200_get_ctrl(&MPC_CODE_SRAM_DEV, ctrl_val);
668 
669     return error_trans(ret);
670 }
671 
CODE_SRAM_MPC_SetCtrlConfig(uint32_t ctrl)672 static int32_t CODE_SRAM_MPC_SetCtrlConfig(uint32_t ctrl)
673 {
674     enum mpc_sie200_error_t ret;
675 
676     ret = mpc_sie200_set_ctrl(&MPC_CODE_SRAM_DEV, ctrl);
677 
678     return error_trans(ret);
679 }
680 
CODE_SRAM_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)681 static int32_t CODE_SRAM_MPC_GetRegionConfig(uintptr_t base,
682                                          uintptr_t limit,
683                                          ARM_MPC_SEC_ATTR* attr)
684 {
685     enum mpc_sie200_error_t ret;
686 
687     ret = mpc_sie200_get_region_config(&MPC_CODE_SRAM_DEV, base, limit,
688                                        (enum mpc_sie200_sec_attr_t*)attr);
689 
690     return error_trans(ret);
691 }
692 
CODE_SRAM_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)693 static int32_t CODE_SRAM_MPC_ConfigRegion(uintptr_t base,
694                                       uintptr_t limit,
695                                       ARM_MPC_SEC_ATTR attr)
696 {
697     enum mpc_sie200_error_t ret;
698 
699     ret = mpc_sie200_config_region(&MPC_CODE_SRAM_DEV, base, limit,
700                                    (enum mpc_sie200_sec_attr_t)attr);
701 
702     return error_trans(ret);
703 }
704 
CODE_SRAM_MPC_EnableInterrupt(void)705 static int32_t CODE_SRAM_MPC_EnableInterrupt(void)
706 {
707     enum mpc_sie200_error_t ret;
708 
709     ret = mpc_sie200_irq_enable(&MPC_CODE_SRAM_DEV);
710 
711     return error_trans(ret);
712 }
713 
CODE_SRAM_MPC_DisableInterrupt(void)714 static void CODE_SRAM_MPC_DisableInterrupt(void)
715 {
716     mpc_sie200_irq_disable(&MPC_CODE_SRAM_DEV);
717 }
718 
719 
CODE_SRAM_MPC_ClearInterrupt(void)720 static void CODE_SRAM_MPC_ClearInterrupt(void)
721 {
722     mpc_sie200_clear_irq(&MPC_CODE_SRAM_DEV);
723 }
724 
CODE_SRAM_MPC_InterruptState(void)725 static uint32_t CODE_SRAM_MPC_InterruptState(void)
726 {
727     return mpc_sie200_irq_state(&MPC_CODE_SRAM_DEV);
728 }
729 
CODE_SRAM_MPC_LockDown(void)730 static int32_t CODE_SRAM_MPC_LockDown(void)
731 {
732     return mpc_sie200_lock_down(&MPC_CODE_SRAM_DEV);
733 }
734 
735 /* CODE_SRAM_MPC Driver CMSIS access structure */
736 extern ARM_DRIVER_MPC Driver_CODE_SRAM_MPC;
737 ARM_DRIVER_MPC Driver_CODE_SRAM_MPC = {
738     .GetVersion       = ARM_MPC_GetVersion,
739     .Initialize       = CODE_SRAM_MPC_Initialize,
740     .Uninitialize     = CODE_SRAM_MPC_Uninitialize,
741     .GetBlockSize     = CODE_SRAM_MPC_GetBlockSize,
742     .GetCtrlConfig    = CODE_SRAM_MPC_GetCtrlConfig,
743     .SetCtrlConfig    = CODE_SRAM_MPC_SetCtrlConfig,
744     .ConfigRegion     = CODE_SRAM_MPC_ConfigRegion,
745     .GetRegionConfig  = CODE_SRAM_MPC_GetRegionConfig,
746     .EnableInterrupt  = CODE_SRAM_MPC_EnableInterrupt,
747     .DisableInterrupt = CODE_SRAM_MPC_DisableInterrupt,
748     .ClearInterrupt   = CODE_SRAM_MPC_ClearInterrupt,
749     .InterruptState   = CODE_SRAM_MPC_InterruptState,
750     .LockDown         = CODE_SRAM_MPC_LockDown,
751 };
752 #endif /* RTE_CODE_SRAM_MPC */
753 
754 #if (RTE_SSRAM1_MPC)
755 /* Ranges controlled by this SSRAM1_MPC */
756 static const struct mpc_sie200_memory_range_t MPC_SSRAM1_RANGE_S = {
757     .base         = MPC_SSRAM1_RANGE_BASE_S,
758     .limit        = MPC_SSRAM1_RANGE_LIMIT_S,
759     .range_offset = 0,
760     .attr         = MPC_SIE200_SEC_ATTR_SECURE
761 };
762 
763 static const struct mpc_sie200_memory_range_t MPC_SSRAM1_RANGE_NS = {
764     .base         = MPC_SSRAM1_RANGE_BASE_NS,
765     .limit        = MPC_SSRAM1_RANGE_LIMIT_NS,
766     .range_offset = 0,
767     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
768 };
769 
770 #define MPC_SSRAM1_RANGE_LIST_LEN  2u
771 static const struct  mpc_sie200_memory_range_t*
772                      MPC_SSRAM1_RANGE_LIST[MPC_SSRAM1_RANGE_LIST_LEN] =
773                      {&MPC_SSRAM1_RANGE_S, &MPC_SSRAM1_RANGE_NS};
774 
775 /* SSRAM1_MPC Driver wrapper functions */
SSRAM1_MPC_Initialize(void)776 static int32_t SSRAM1_MPC_Initialize(void)
777 {
778     enum mpc_sie200_error_t ret;
779 
780     ret = mpc_sie200_init(&MPC_SSRAM1_DEV,
781                           MPC_SSRAM1_RANGE_LIST,
782                           MPC_SSRAM1_RANGE_LIST_LEN);
783 
784     return error_trans(ret);
785 }
786 
SSRAM1_MPC_Uninitialize(void)787 static int32_t SSRAM1_MPC_Uninitialize(void)
788 {
789     /* Nothing to be done */
790     return ARM_DRIVER_OK;
791 }
792 
SSRAM1_MPC_GetBlockSize(uint32_t * blk_size)793 static int32_t SSRAM1_MPC_GetBlockSize(uint32_t* blk_size)
794 {
795     enum mpc_sie200_error_t ret;
796 
797     ret = mpc_sie200_get_block_size(&MPC_SSRAM1_DEV, blk_size);
798 
799     return error_trans(ret);
800 }
801 
SSRAM1_MPC_GetCtrlConfig(uint32_t * ctrl_val)802 static int32_t SSRAM1_MPC_GetCtrlConfig(uint32_t* ctrl_val)
803 {
804     enum mpc_sie200_error_t ret;
805 
806     ret = mpc_sie200_get_ctrl(&MPC_SSRAM1_DEV, ctrl_val);
807 
808     return error_trans(ret);
809 }
810 
SSRAM1_MPC_SetCtrlConfig(uint32_t ctrl)811 static int32_t SSRAM1_MPC_SetCtrlConfig(uint32_t ctrl)
812 {
813     enum mpc_sie200_error_t ret;
814 
815     ret = mpc_sie200_set_ctrl(&MPC_SSRAM1_DEV, ctrl);
816 
817     return error_trans(ret);
818 }
819 
SSRAM1_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)820 static int32_t SSRAM1_MPC_GetRegionConfig(uintptr_t base,
821                                          uintptr_t limit,
822                                          ARM_MPC_SEC_ATTR* attr)
823 {
824     enum mpc_sie200_error_t ret;
825 
826     ret = mpc_sie200_get_region_config(&MPC_SSRAM1_DEV, base, limit,
827                                        (enum mpc_sie200_sec_attr_t*)attr);
828 
829     return error_trans(ret);
830 }
831 
SSRAM1_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)832 static int32_t SSRAM1_MPC_ConfigRegion(uintptr_t base,
833                                       uintptr_t limit,
834                                       ARM_MPC_SEC_ATTR attr)
835 {
836     enum mpc_sie200_error_t ret;
837 
838     ret = mpc_sie200_config_region(&MPC_SSRAM1_DEV, base, limit,
839                                    (enum mpc_sie200_sec_attr_t)attr);
840 
841     return error_trans(ret);
842 }
843 
SSRAM1_MPC_EnableInterrupt(void)844 static int32_t SSRAM1_MPC_EnableInterrupt(void)
845 {
846     enum mpc_sie200_error_t ret;
847 
848     ret = mpc_sie200_irq_enable(&MPC_SSRAM1_DEV);
849 
850     return error_trans(ret);
851 }
852 
SSRAM1_MPC_DisableInterrupt(void)853 static void SSRAM1_MPC_DisableInterrupt(void)
854 {
855     mpc_sie200_irq_disable(&MPC_SSRAM1_DEV);
856 }
857 
858 
SSRAM1_MPC_ClearInterrupt(void)859 static void SSRAM1_MPC_ClearInterrupt(void)
860 {
861     mpc_sie200_clear_irq(&MPC_SSRAM1_DEV);
862 }
863 
SSRAM1_MPC_InterruptState(void)864 static uint32_t SSRAM1_MPC_InterruptState(void)
865 {
866     return mpc_sie200_irq_state(&MPC_SSRAM1_DEV);
867 }
868 
SSRAM1_MPC_LockDown(void)869 static int32_t SSRAM1_MPC_LockDown(void)
870 {
871     return mpc_sie200_lock_down(&MPC_SSRAM1_DEV);
872 }
873 
874 /* SSRAM1_MPC Driver CMSIS access structure */
875 extern ARM_DRIVER_MPC Driver_SRAM1_MPC;
876 ARM_DRIVER_MPC Driver_SRAM1_MPC = {
877     .GetVersion       = ARM_MPC_GetVersion,
878     .Initialize       = SSRAM1_MPC_Initialize,
879     .Uninitialize     = SSRAM1_MPC_Uninitialize,
880     .GetBlockSize     = SSRAM1_MPC_GetBlockSize,
881     .GetCtrlConfig    = SSRAM1_MPC_GetCtrlConfig,
882     .SetCtrlConfig    = SSRAM1_MPC_SetCtrlConfig,
883     .ConfigRegion     = SSRAM1_MPC_ConfigRegion,
884     .GetRegionConfig  = SSRAM1_MPC_GetRegionConfig,
885     .EnableInterrupt  = SSRAM1_MPC_EnableInterrupt,
886     .DisableInterrupt = SSRAM1_MPC_DisableInterrupt,
887     .ClearInterrupt   = SSRAM1_MPC_ClearInterrupt,
888     .InterruptState   = SSRAM1_MPC_InterruptState,
889     .LockDown         = SSRAM1_MPC_LockDown,
890 };
891 #endif /* RTE_SSRAM1_MPC */
892 
893 #if (RTE_SSRAM2_MPC)
894 /* Ranges controlled by this SSRAM2_MPC */
895 static const struct mpc_sie200_memory_range_t MPC_SSRAM2_RANGE_S = {
896     .base         = MPC_SSRAM2_RANGE_BASE_S,
897     .limit        = MPC_SSRAM2_RANGE_LIMIT_S,
898     .range_offset = 0,
899     .attr         = MPC_SIE200_SEC_ATTR_SECURE
900 };
901 
902 static const struct mpc_sie200_memory_range_t MPC_SSRAM2_RANGE_NS = {
903     .base         = MPC_SSRAM2_RANGE_BASE_NS,
904     .limit        = MPC_SSRAM2_RANGE_LIMIT_NS,
905     .range_offset = 0,
906     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
907 };
908 
909 #define MPC_SSRAM2_RANGE_LIST_LEN  2u
910 static const struct  mpc_sie200_memory_range_t* MPC_SSRAM2_RANGE_LIST[MPC_SSRAM2_RANGE_LIST_LEN]=
911     {&MPC_SSRAM2_RANGE_S, &MPC_SSRAM2_RANGE_NS};
912 
913 /* SSRAM2_MPC Driver wrapper functions */
SSRAM2_MPC_Initialize(void)914 static int32_t SSRAM2_MPC_Initialize(void)
915 {
916     enum mpc_sie200_error_t ret;
917 
918     ret = mpc_sie200_init(&MPC_SSRAM2_DEV,
919                           MPC_SSRAM2_RANGE_LIST,
920                           MPC_SSRAM2_RANGE_LIST_LEN);
921 
922     return error_trans(ret);
923 }
924 
SSRAM2_MPC_Uninitialize(void)925 static int32_t SSRAM2_MPC_Uninitialize(void)
926 {
927     /* Nothing to be done */
928     return ARM_DRIVER_OK;
929 }
930 
SSRAM2_MPC_GetBlockSize(uint32_t * blk_size)931 static int32_t SSRAM2_MPC_GetBlockSize(uint32_t* blk_size)
932 {
933     enum mpc_sie200_error_t ret;
934 
935     ret = mpc_sie200_get_block_size(&MPC_SSRAM2_DEV, blk_size);
936 
937     return error_trans(ret);
938 }
939 
SSRAM2_MPC_GetCtrlConfig(uint32_t * ctrl_val)940 static int32_t SSRAM2_MPC_GetCtrlConfig(uint32_t* ctrl_val)
941 {
942     enum mpc_sie200_error_t ret;
943 
944     ret = mpc_sie200_get_ctrl(&MPC_SSRAM2_DEV, ctrl_val);
945 
946     return error_trans(ret);
947 }
948 
SSRAM2_MPC_SetCtrlConfig(uint32_t ctrl)949 static int32_t SSRAM2_MPC_SetCtrlConfig(uint32_t ctrl)
950 {
951     enum mpc_sie200_error_t ret;
952 
953     ret = mpc_sie200_set_ctrl(&MPC_SSRAM2_DEV, ctrl);
954 
955     return error_trans(ret);
956 }
957 
SSRAM2_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)958 static int32_t SSRAM2_MPC_GetRegionConfig(uintptr_t base,
959                                          uintptr_t limit,
960                                          ARM_MPC_SEC_ATTR* attr)
961 {
962     enum mpc_sie200_error_t ret;
963 
964     ret = mpc_sie200_get_region_config(&MPC_SSRAM2_DEV, base, limit,
965                                        (enum mpc_sie200_sec_attr_t*)attr);
966 
967     return error_trans(ret);
968 }
969 
SSRAM2_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)970 static int32_t SSRAM2_MPC_ConfigRegion(uintptr_t base,
971                                       uintptr_t limit,
972                                       ARM_MPC_SEC_ATTR attr)
973 {
974     enum mpc_sie200_error_t ret;
975 
976     ret = mpc_sie200_config_region(&MPC_SSRAM2_DEV, base, limit,
977                                    (enum mpc_sie200_sec_attr_t)attr);
978 
979     return error_trans(ret);
980 }
981 
SSRAM2_MPC_EnableInterrupt(void)982 static int32_t SSRAM2_MPC_EnableInterrupt(void)
983 {
984     enum mpc_sie200_error_t ret;
985 
986     ret = mpc_sie200_irq_enable(&MPC_SSRAM2_DEV);
987 
988     return error_trans(ret);
989 }
990 
SSRAM2_MPC_DisableInterrupt(void)991 static void SSRAM2_MPC_DisableInterrupt(void)
992 {
993     mpc_sie200_irq_disable(&MPC_SSRAM2_DEV);
994 }
995 
996 
SSRAM2_MPC_ClearInterrupt(void)997 static void SSRAM2_MPC_ClearInterrupt(void)
998 {
999     mpc_sie200_clear_irq(&MPC_SSRAM2_DEV);
1000 }
1001 
SSRAM2_MPC_InterruptState(void)1002 static uint32_t SSRAM2_MPC_InterruptState(void)
1003 {
1004     return mpc_sie200_irq_state(&MPC_SSRAM2_DEV);
1005 }
1006 
SSRAM2_MPC_LockDown(void)1007 static int32_t SSRAM2_MPC_LockDown(void)
1008 {
1009     return mpc_sie200_lock_down(&MPC_SSRAM2_DEV);
1010 }
1011 
1012 /* SSRAM2_MPC Driver CMSIS access structure */
1013 extern ARM_DRIVER_MPC Driver_SRAM2_MPC;
1014 ARM_DRIVER_MPC Driver_SRAM2_MPC = {
1015     .GetVersion       = ARM_MPC_GetVersion,
1016     .Initialize       = SSRAM2_MPC_Initialize,
1017     .Uninitialize     = SSRAM2_MPC_Uninitialize,
1018     .GetBlockSize     = SSRAM2_MPC_GetBlockSize,
1019     .GetCtrlConfig    = SSRAM2_MPC_GetCtrlConfig,
1020     .SetCtrlConfig    = SSRAM2_MPC_SetCtrlConfig,
1021     .ConfigRegion     = SSRAM2_MPC_ConfigRegion,
1022     .GetRegionConfig  = SSRAM2_MPC_GetRegionConfig,
1023     .EnableInterrupt  = SSRAM2_MPC_EnableInterrupt,
1024     .DisableInterrupt = SSRAM2_MPC_DisableInterrupt,
1025     .ClearInterrupt   = SSRAM2_MPC_ClearInterrupt,
1026     .InterruptState   = SSRAM2_MPC_InterruptState,
1027     .LockDown         = SSRAM2_MPC_LockDown,
1028 };
1029 #endif /* RTE_SSRAM2_MPC */
1030 
1031 #if (RTE_SSRAM3_MPC)
1032 /* Ranges controlled by this SSRAM3_MPC */
1033 static const struct mpc_sie200_memory_range_t MPC_SSRAM3_RANGE_S = {
1034     .base         = MPC_SSRAM3_RANGE_BASE_S,
1035     .limit        = MPC_SSRAM3_RANGE_LIMIT_S,
1036     .range_offset = 0,
1037     .attr         = MPC_SIE200_SEC_ATTR_SECURE
1038 };
1039 
1040 static const struct mpc_sie200_memory_range_t MPC_SSRAM3_RANGE_NS = {
1041     .base         = MPC_SSRAM3_RANGE_BASE_NS,
1042     .limit        = MPC_SSRAM3_RANGE_LIMIT_NS,
1043     .range_offset = 0,
1044     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
1045 };
1046 
1047 #define MPC_SSRAM3_RANGE_LIST_LEN  2u
1048 static const struct  mpc_sie200_memory_range_t* MPC_SSRAM3_RANGE_LIST[MPC_SSRAM3_RANGE_LIST_LEN]=
1049     {&MPC_SSRAM3_RANGE_S, &MPC_SSRAM3_RANGE_NS};
1050 
1051 /* SSRAM3_MPC Driver wrapper functions */
SSRAM3_MPC_Initialize(void)1052 static int32_t SSRAM3_MPC_Initialize(void)
1053 {
1054     enum mpc_sie200_error_t ret;
1055 
1056     ret = mpc_sie200_init(&MPC_SSRAM3_DEV,
1057                           MPC_SSRAM3_RANGE_LIST,
1058                           MPC_SSRAM3_RANGE_LIST_LEN);
1059 
1060     return error_trans(ret);
1061 }
1062 
SSRAM3_MPC_Uninitialize(void)1063 static int32_t SSRAM3_MPC_Uninitialize(void)
1064 {
1065     /* Nothing to be done */
1066     return ARM_DRIVER_OK;
1067 }
1068 
SSRAM3_MPC_GetBlockSize(uint32_t * blk_size)1069 static int32_t SSRAM3_MPC_GetBlockSize(uint32_t* blk_size)
1070 {
1071     enum mpc_sie200_error_t ret;
1072 
1073     ret = mpc_sie200_get_block_size(&MPC_SSRAM3_DEV, blk_size);
1074 
1075     return error_trans(ret);
1076 }
1077 
SSRAM3_MPC_GetCtrlConfig(uint32_t * ctrl_val)1078 static int32_t SSRAM3_MPC_GetCtrlConfig(uint32_t* ctrl_val)
1079 {
1080     enum mpc_sie200_error_t ret;
1081 
1082     ret = mpc_sie200_get_ctrl(&MPC_SSRAM3_DEV, ctrl_val);
1083 
1084     return error_trans(ret);
1085 }
1086 
SSRAM3_MPC_SetCtrlConfig(uint32_t ctrl)1087 static int32_t SSRAM3_MPC_SetCtrlConfig(uint32_t ctrl)
1088 {
1089     enum mpc_sie200_error_t ret;
1090 
1091     ret = mpc_sie200_set_ctrl(&MPC_SSRAM3_DEV, ctrl);
1092 
1093     return error_trans(ret);
1094 }
1095 
SSRAM3_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)1096 static int32_t SSRAM3_MPC_GetRegionConfig(uintptr_t base,
1097                                          uintptr_t limit,
1098                                          ARM_MPC_SEC_ATTR* attr)
1099 {
1100     enum mpc_sie200_error_t ret;
1101 
1102     ret = mpc_sie200_get_region_config(&MPC_SSRAM3_DEV, base, limit,
1103                                        (enum mpc_sie200_sec_attr_t*)attr);
1104 
1105     return error_trans(ret);
1106 }
1107 
SSRAM3_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)1108 static int32_t SSRAM3_MPC_ConfigRegion(uintptr_t base,
1109                                       uintptr_t limit,
1110                                       ARM_MPC_SEC_ATTR attr)
1111 {
1112     enum mpc_sie200_error_t ret;
1113 
1114     ret = mpc_sie200_config_region(&MPC_SSRAM3_DEV, base, limit,
1115                                    (enum mpc_sie200_sec_attr_t)attr);
1116 
1117     return error_trans(ret);
1118 }
1119 
SSRAM3_MPC_EnableInterrupt(void)1120 static int32_t SSRAM3_MPC_EnableInterrupt(void)
1121 {
1122     enum mpc_sie200_error_t ret;
1123 
1124     ret = mpc_sie200_irq_enable(&MPC_SSRAM3_DEV);
1125 
1126     return error_trans(ret);
1127 }
1128 
SSRAM3_MPC_DisableInterrupt(void)1129 static void SSRAM3_MPC_DisableInterrupt(void)
1130 {
1131     mpc_sie200_irq_disable(&MPC_SSRAM3_DEV);
1132 }
1133 
1134 
SSRAM3_MPC_ClearInterrupt(void)1135 static void SSRAM3_MPC_ClearInterrupt(void)
1136 {
1137     mpc_sie200_clear_irq(&MPC_SSRAM3_DEV);
1138 }
1139 
SSRAM3_MPC_InterruptState(void)1140 static uint32_t SSRAM3_MPC_InterruptState(void)
1141 {
1142     return mpc_sie200_irq_state(&MPC_SSRAM3_DEV);
1143 }
1144 
SSRAM3_MPC_LockDown(void)1145 static int32_t SSRAM3_MPC_LockDown(void)
1146 {
1147     return mpc_sie200_lock_down(&MPC_SSRAM3_DEV);
1148 }
1149 
1150 /* SSRAM3_MPC Driver CMSIS access structure */
1151 extern ARM_DRIVER_MPC Driver_SSRAM3_MPC;
1152 ARM_DRIVER_MPC Driver_SSRAM3_MPC = {
1153     .GetVersion       = ARM_MPC_GetVersion,
1154     .Initialize       = SSRAM3_MPC_Initialize,
1155     .Uninitialize     = SSRAM3_MPC_Uninitialize,
1156     .GetBlockSize     = SSRAM3_MPC_GetBlockSize,
1157     .GetCtrlConfig    = SSRAM3_MPC_GetCtrlConfig,
1158     .SetCtrlConfig    = SSRAM3_MPC_SetCtrlConfig,
1159     .ConfigRegion     = SSRAM3_MPC_ConfigRegion,
1160     .GetRegionConfig  = SSRAM3_MPC_GetRegionConfig,
1161     .EnableInterrupt  = SSRAM3_MPC_EnableInterrupt,
1162     .DisableInterrupt = SSRAM3_MPC_DisableInterrupt,
1163     .ClearInterrupt   = SSRAM3_MPC_ClearInterrupt,
1164     .InterruptState   = SSRAM3_MPC_InterruptState,
1165     .LockDown         = SSRAM3_MPC_LockDown,
1166 };
1167 #endif /* RTE_SSRAM3_MPC */
1168 
1169 #if (RTE_QSPI_MPC)
1170 /* Ranges controlled by this QSPI_MPC */
1171 static const struct mpc_sie200_memory_range_t MPC_QSPI_RANGE_S = {
1172     .base         = MPC_QSPI_RANGE_BASE_S,
1173     .limit        = MPC_QSPI_RANGE_LIMIT_S,
1174     .range_offset = 0,
1175     .attr         = MPC_SIE200_SEC_ATTR_SECURE
1176 };
1177 
1178 static const struct mpc_sie200_memory_range_t MPC_QSPI_RANGE_NS = {
1179     .base         = MPC_QSPI_RANGE_BASE_NS,
1180     .limit        = MPC_QSPI_RANGE_LIMIT_NS,
1181     .range_offset = 0,
1182     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
1183 };
1184 
1185 #define MPC_QSPI_RANGE_LIST_LEN  2u
1186 static const struct  mpc_sie200_memory_range_t* MPC_QSPI_RANGE_LIST[MPC_QSPI_RANGE_LIST_LEN]=
1187     {&MPC_QSPI_RANGE_S, &MPC_QSPI_RANGE_NS};
1188 
1189 /* QSPI_MPC Driver wrapper functions */
QSPI_MPC_Initialize(void)1190 static int32_t QSPI_MPC_Initialize(void)
1191 {
1192     enum mpc_sie200_error_t ret;
1193 
1194     ret = mpc_sie200_init(&MPC_QSPI_DEV,
1195                           MPC_QSPI_RANGE_LIST,
1196                           MPC_QSPI_RANGE_LIST_LEN);
1197 
1198     return error_trans(ret);
1199 }
1200 
QSPI_MPC_Uninitialize(void)1201 static int32_t QSPI_MPC_Uninitialize(void)
1202 {
1203     /* Nothing to be done */
1204     return ARM_DRIVER_OK;
1205 }
1206 
QSPI_MPC_GetBlockSize(uint32_t * blk_size)1207 static int32_t QSPI_MPC_GetBlockSize(uint32_t* blk_size)
1208 {
1209     enum mpc_sie200_error_t ret;
1210 
1211     ret = mpc_sie200_get_block_size(&MPC_QSPI_DEV, blk_size);
1212 
1213     return error_trans(ret);
1214 }
1215 
QSPI_MPC_GetCtrlConfig(uint32_t * ctrl_val)1216 static int32_t QSPI_MPC_GetCtrlConfig(uint32_t* ctrl_val)
1217 {
1218     enum mpc_sie200_error_t ret;
1219 
1220     ret = mpc_sie200_get_ctrl(&MPC_QSPI_DEV, ctrl_val);
1221 
1222     return error_trans(ret);
1223 }
1224 
QSPI_MPC_SetCtrlConfig(uint32_t ctrl)1225 static int32_t QSPI_MPC_SetCtrlConfig(uint32_t ctrl)
1226 {
1227     enum mpc_sie200_error_t ret;
1228 
1229     ret = mpc_sie200_set_ctrl(&MPC_QSPI_DEV, ctrl);
1230 
1231     return error_trans(ret);
1232 }
1233 
QSPI_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)1234 static int32_t QSPI_MPC_GetRegionConfig(uintptr_t base,
1235                                          uintptr_t limit,
1236                                          ARM_MPC_SEC_ATTR* attr)
1237 {
1238     enum mpc_sie200_error_t ret;
1239 
1240     ret = mpc_sie200_get_region_config(&MPC_QSPI_DEV, base, limit,
1241                                        (enum mpc_sie200_sec_attr_t*)attr);
1242 
1243     return error_trans(ret);
1244 }
1245 
QSPI_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)1246 static int32_t QSPI_MPC_ConfigRegion(uintptr_t base,
1247                                       uintptr_t limit,
1248                                       ARM_MPC_SEC_ATTR attr)
1249 {
1250     enum mpc_sie200_error_t ret;
1251 
1252     ret = mpc_sie200_config_region(&MPC_QSPI_DEV, base, limit,
1253                                    (enum mpc_sie200_sec_attr_t)attr);
1254 
1255     return error_trans(ret);
1256 }
1257 
QSPI_MPC_EnableInterrupt(void)1258 static int32_t QSPI_MPC_EnableInterrupt(void)
1259 {
1260     enum mpc_sie200_error_t ret;
1261 
1262     ret = mpc_sie200_irq_enable(&MPC_QSPI_DEV);
1263 
1264     return error_trans(ret);
1265 }
1266 
QSPI_MPC_DisableInterrupt(void)1267 static void QSPI_MPC_DisableInterrupt(void)
1268 {
1269     mpc_sie200_irq_disable(&MPC_QSPI_DEV);
1270 }
1271 
1272 
QSPI_MPC_ClearInterrupt(void)1273 static void QSPI_MPC_ClearInterrupt(void)
1274 {
1275     mpc_sie200_clear_irq(&MPC_QSPI_DEV);
1276 }
1277 
QSPI_MPC_InterruptState(void)1278 static uint32_t QSPI_MPC_InterruptState(void)
1279 {
1280     return mpc_sie200_irq_state(&MPC_QSPI_DEV);
1281 }
1282 
QSPI_MPC_LockDown(void)1283 static int32_t QSPI_MPC_LockDown(void)
1284 {
1285     return mpc_sie200_lock_down(&MPC_QSPI_DEV);
1286 }
1287 
1288 /* QSPI1_MPC Driver CMSIS access structure */
1289 extern ARM_DRIVER_MPC Driver_QSPI_MPC;
1290 ARM_DRIVER_MPC Driver_QSPI_MPC = {
1291     .GetVersion       = ARM_MPC_GetVersion,
1292     .Initialize       = QSPI_MPC_Initialize,
1293     .Uninitialize     = QSPI_MPC_Uninitialize,
1294     .GetBlockSize     = QSPI_MPC_GetBlockSize,
1295     .GetCtrlConfig    = QSPI_MPC_GetCtrlConfig,
1296     .SetCtrlConfig    = QSPI_MPC_SetCtrlConfig,
1297     .ConfigRegion     = QSPI_MPC_ConfigRegion,
1298     .GetRegionConfig  = QSPI_MPC_GetRegionConfig,
1299     .EnableInterrupt  = QSPI_MPC_EnableInterrupt,
1300     .DisableInterrupt = QSPI_MPC_DisableInterrupt,
1301     .ClearInterrupt   = QSPI_MPC_ClearInterrupt,
1302     .InterruptState   = QSPI_MPC_InterruptState,
1303     .LockDown         = QSPI_MPC_LockDown,
1304 };
1305 #endif /* RTE_QSPI_MPC */
1306 
1307 #if (RTE_MRAM_MPC)
1308 /* Ranges controlled by this MRAM_MPC */
1309 static const struct mpc_sie200_memory_range_t MPC_MRAM_RANGE_S = {
1310     .base         = MPC_MRAM_RANGE_BASE_S,
1311     .limit        = MPC_MRAM_RANGE_LIMIT_S,
1312     .range_offset = 0,
1313     .attr         = MPC_SIE200_SEC_ATTR_SECURE
1314 };
1315 
1316 static const struct mpc_sie200_memory_range_t MPC_MRAM_RANGE_NS = {
1317     .base         = MPC_MRAM_RANGE_BASE_NS,
1318     .limit        = MPC_MRAM_RANGE_LIMIT_NS,
1319     .range_offset = 0,
1320     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
1321 };
1322 
1323 #define MPC_MRAM_RANGE_LIST_LEN  2u
1324 static const struct  mpc_sie200_memory_range_t* MPC_MRAM_RANGE_LIST[MPC_MRAM_RANGE_LIST_LEN]=
1325     {&MPC_MRAM_RANGE_S, &MPC_MRAM_RANGE_NS};
1326 
1327 /* MRAM_MPC Driver wrapper functions */
MRAM_MPC_Initialize(void)1328 static int32_t MRAM_MPC_Initialize(void)
1329 {
1330     enum mpc_sie200_error_t ret;
1331 
1332     ret = mpc_sie200_init(&MPC_MRAM_DEV,
1333                           MPC_MRAM_RANGE_LIST,
1334                           MPC_MRAM_RANGE_LIST_LEN);
1335 
1336     return error_trans(ret);
1337 }
1338 
MRAM_MPC_Uninitialize(void)1339 static int32_t MRAM_MPC_Uninitialize(void)
1340 {
1341     /* Nothing to be done */
1342     return ARM_DRIVER_OK;
1343 }
1344 
MRAM_MPC_GetBlockSize(uint32_t * blk_size)1345 static int32_t MRAM_MPC_GetBlockSize(uint32_t* blk_size)
1346 {
1347     enum mpc_sie200_error_t ret;
1348 
1349     ret = mpc_sie200_get_block_size(&MPC_MRAM_DEV, blk_size);
1350 
1351     return error_trans(ret);
1352 }
1353 
MRAM_MPC_GetCtrlConfig(uint32_t * ctrl_val)1354 static int32_t MRAM_MPC_GetCtrlConfig(uint32_t* ctrl_val)
1355 {
1356     enum mpc_sie200_error_t ret;
1357 
1358     ret = mpc_sie200_get_ctrl(&MPC_MRAM_DEV, ctrl_val);
1359 
1360     return error_trans(ret);
1361 }
1362 
MRAM_MPC_SetCtrlConfig(uint32_t ctrl)1363 static int32_t MRAM_MPC_SetCtrlConfig(uint32_t ctrl)
1364 {
1365     enum mpc_sie200_error_t ret;
1366 
1367     ret = mpc_sie200_set_ctrl(&MPC_MRAM_DEV, ctrl);
1368 
1369     return error_trans(ret);
1370 }
1371 
MRAM_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)1372 static int32_t MRAM_MPC_GetRegionConfig(uintptr_t base,
1373                                          uintptr_t limit,
1374                                          ARM_MPC_SEC_ATTR* attr)
1375 {
1376     enum mpc_sie200_error_t ret;
1377 
1378     ret = mpc_sie200_get_region_config(&MPC_MRAM_DEV, base, limit,
1379                                        (enum mpc_sie200_sec_attr_t*)attr);
1380 
1381     return error_trans(ret);
1382 }
1383 
MRAM_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)1384 static int32_t MRAM_MPC_ConfigRegion(uintptr_t base,
1385                                       uintptr_t limit,
1386                                       ARM_MPC_SEC_ATTR attr)
1387 {
1388     enum mpc_sie200_error_t ret;
1389 
1390     ret = mpc_sie200_config_region(&MPC_MRAM_DEV, base, limit,
1391                                    (enum mpc_sie200_sec_attr_t)attr);
1392 
1393     return error_trans(ret);
1394 }
1395 
MRAM_MPC_EnableInterrupt(void)1396 static int32_t MRAM_MPC_EnableInterrupt(void)
1397 {
1398     enum mpc_sie200_error_t ret;
1399 
1400     ret = mpc_sie200_irq_enable(&MPC_MRAM_DEV);
1401 
1402     return error_trans(ret);
1403 }
1404 
MRAM_MPC_DisableInterrupt(void)1405 static void MRAM_MPC_DisableInterrupt(void)
1406 {
1407     mpc_sie200_irq_disable(&MPC_MRAM_DEV);
1408 }
1409 
1410 
MRAM_MPC_ClearInterrupt(void)1411 static void MRAM_MPC_ClearInterrupt(void)
1412 {
1413     mpc_sie200_clear_irq(&MPC_MRAM_DEV);
1414 }
1415 
MRAM_MPC_InterruptState(void)1416 static uint32_t MRAM_MPC_InterruptState(void)
1417 {
1418     return mpc_sie200_irq_state(&MPC_MRAM_DEV);
1419 }
1420 
MRAM_MPC_LockDown(void)1421 static int32_t MRAM_MPC_LockDown(void)
1422 {
1423     return mpc_sie200_lock_down(&MPC_MRAM_DEV);
1424 }
1425 
1426 /* MRAM_MPC Driver CMSIS access structure */
1427 extern ARM_DRIVER_MPC Driver_MRAM_MPC;
1428 ARM_DRIVER_MPC Driver_MRAM_MPC = {
1429     .GetVersion       = ARM_MPC_GetVersion,
1430     .Initialize       = MRAM_MPC_Initialize,
1431     .Uninitialize     = MRAM_MPC_Uninitialize,
1432     .GetBlockSize     = MRAM_MPC_GetBlockSize,
1433     .GetCtrlConfig    = MRAM_MPC_GetCtrlConfig,
1434     .SetCtrlConfig    = MRAM_MPC_SetCtrlConfig,
1435     .ConfigRegion     = MRAM_MPC_ConfigRegion,
1436     .GetRegionConfig  = MRAM_MPC_GetRegionConfig,
1437     .EnableInterrupt  = MRAM_MPC_EnableInterrupt,
1438     .DisableInterrupt = MRAM_MPC_DisableInterrupt,
1439     .ClearInterrupt   = MRAM_MPC_ClearInterrupt,
1440     .InterruptState   = MRAM_MPC_InterruptState,
1441     .LockDown         = MRAM_MPC_LockDown,
1442 };
1443 #endif /* RTE_MRAM_MPC */
1444