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 #include "Driver_MPC.h"
17 
18 #include "cmsis_driver_config.h"
19 #include "RTE_Device.h"
20 
21 /* driver version */
22 #define ARM_MPC_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1,0)
23 
24 /* Driver Version */
25 static const ARM_DRIVER_VERSION DriverVersion = {
26     ARM_MPC_API_VERSION,
27     ARM_MPC_DRV_VERSION
28 };
29 
ARM_MPC_GetVersion(void)30 static ARM_DRIVER_VERSION ARM_MPC_GetVersion(void)
31 {
32     return DriverVersion;
33 }
34 
35 /*
36  * \brief Translates error codes from native API to CMSIS API.
37  *
38  * \param[in] err  Error code to translate (\ref mpc_sie200_error_t).
39  *
40  * \return Returns CMSIS error code.
41  */
error_trans(enum mpc_sie200_error_t err)42 static int32_t error_trans(enum mpc_sie200_error_t err)
43 {
44     switch(err) {
45     case MPC_SIE200_ERR_NONE:
46         return ARM_DRIVER_OK;
47     case MPC_SIE200_INVALID_ARG:
48         return ARM_DRIVER_ERROR_PARAMETER;
49     case MPC_SIE200_NOT_INIT:
50         return ARM_MPC_ERR_NOT_INIT;
51     case MPC_SIE200_ERR_NOT_IN_RANGE:
52         return ARM_MPC_ERR_NOT_IN_RANGE;
53     case MPC_SIE200_ERR_NOT_ALIGNED:
54         return ARM_MPC_ERR_NOT_ALIGNED;
55     case MPC_SIE200_ERR_INVALID_RANGE:
56         return ARM_MPC_ERR_INVALID_RANGE;
57     case MPC_SIE200_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE:
58         return ARM_MPC_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE;
59     default:
60         return ARM_MPC_ERR_UNSPECIFIED;
61     }
62 }
63 
64 #if (RTE_ISRAM0_MPC)
65 /* Ranges controlled by this ISRAM0_MPC */
66 static const struct mpc_sie200_memory_range_t MPC_ISRAM0_RANGE_S = {
67     .base         = MPC_ISRAM0_RANGE_BASE_S,
68     .limit        = MPC_ISRAM0_RANGE_LIMIT_S,
69     .range_offset = 0,
70     .attr         = MPC_SIE200_SEC_ATTR_SECURE
71 };
72 
73 static const struct mpc_sie200_memory_range_t MPC_ISRAM0_RANGE_NS = {
74     .base         = MPC_ISRAM0_RANGE_BASE_NS,
75     .limit        = MPC_ISRAM0_RANGE_LIMIT_NS,
76     .range_offset = 0,
77     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
78 };
79 
80 #define MPC_ISRAM0_RANGE_LIST_LEN  2u
81 static const struct mpc_sie200_memory_range_t*
82     MPC_ISRAM0_RANGE_LIST[MPC_ISRAM0_RANGE_LIST_LEN] = {&MPC_ISRAM0_RANGE_S,
83                                                         &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*
221     MPC_ISRAM1_RANGE_LIST[MPC_ISRAM1_RANGE_LIST_LEN] = {&MPC_ISRAM1_RANGE_S,
222                                                         &MPC_ISRAM1_RANGE_NS};
223 
224 /* ISRAM1_MPC Driver wrapper functions */
ISRAM1_MPC_Initialize(void)225 static int32_t ISRAM1_MPC_Initialize(void)
226 {
227     enum mpc_sie200_error_t ret;
228 
229     ret = mpc_sie200_init(&MPC_ISRAM1_DEV,
230                           MPC_ISRAM1_RANGE_LIST,
231                           MPC_ISRAM1_RANGE_LIST_LEN);
232 
233     return error_trans(ret);
234 }
235 
ISRAM1_MPC_Uninitialize(void)236 static int32_t ISRAM1_MPC_Uninitialize(void)
237 {
238     /* Nothing to be done */
239     return ARM_DRIVER_OK;
240 }
241 
ISRAM1_MPC_GetBlockSize(uint32_t * blk_size)242 static int32_t ISRAM1_MPC_GetBlockSize(uint32_t* blk_size)
243 {
244     enum mpc_sie200_error_t ret;
245 
246     ret = mpc_sie200_get_block_size(&MPC_ISRAM1_DEV, blk_size);
247 
248     return error_trans(ret);
249 }
250 
ISRAM1_MPC_GetCtrlConfig(uint32_t * ctrl_val)251 static int32_t ISRAM1_MPC_GetCtrlConfig(uint32_t* ctrl_val)
252 {
253     enum mpc_sie200_error_t ret;
254 
255     ret = mpc_sie200_get_ctrl(&MPC_ISRAM1_DEV, ctrl_val);
256 
257     return error_trans(ret);
258 }
259 
ISRAM1_MPC_SetCtrlConfig(uint32_t ctrl)260 static int32_t ISRAM1_MPC_SetCtrlConfig(uint32_t ctrl)
261 {
262     enum mpc_sie200_error_t ret;
263 
264     ret = mpc_sie200_set_ctrl(&MPC_ISRAM1_DEV, ctrl);
265 
266     return error_trans(ret);
267 }
268 
ISRAM1_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)269 static int32_t ISRAM1_MPC_GetRegionConfig(uintptr_t base,
270                                           uintptr_t limit,
271                                           ARM_MPC_SEC_ATTR* attr)
272 {
273     enum mpc_sie200_error_t ret;
274 
275     ret = mpc_sie200_get_region_config(&MPC_ISRAM1_DEV, base, limit,
276                                        (enum mpc_sie200_sec_attr_t*)attr);
277 
278     return error_trans(ret);
279 }
280 
ISRAM1_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)281 static int32_t ISRAM1_MPC_ConfigRegion(uintptr_t base,
282                                        uintptr_t limit,
283                                        ARM_MPC_SEC_ATTR attr)
284 {
285     enum mpc_sie200_error_t ret;
286 
287     ret = mpc_sie200_config_region(&MPC_ISRAM1_DEV, base, limit,
288                                    (enum mpc_sie200_sec_attr_t)attr);
289 
290     return error_trans(ret);
291 }
292 
ISRAM1_MPC_EnableInterrupt(void)293 static int32_t ISRAM1_MPC_EnableInterrupt(void)
294 {
295     enum mpc_sie200_error_t ret;
296 
297     ret = mpc_sie200_irq_enable(&MPC_ISRAM1_DEV);
298 
299     return error_trans(ret);
300 }
301 
ISRAM1_MPC_DisableInterrupt(void)302 static void ISRAM1_MPC_DisableInterrupt(void)
303 {
304     mpc_sie200_irq_disable(&MPC_ISRAM1_DEV);
305 }
306 
307 
ISRAM1_MPC_ClearInterrupt(void)308 static void ISRAM1_MPC_ClearInterrupt(void)
309 {
310     mpc_sie200_clear_irq(&MPC_ISRAM1_DEV);
311 }
312 
ISRAM1_MPC_InterruptState(void)313 static uint32_t ISRAM1_MPC_InterruptState(void)
314 {
315     return mpc_sie200_irq_state(&MPC_ISRAM1_DEV);
316 }
317 
ISRAM1_MPC_LockDown(void)318 static int32_t ISRAM1_MPC_LockDown(void)
319 {
320     return mpc_sie200_lock_down(&MPC_ISRAM1_DEV);
321 }
322 
323 /* ISRAM1_MPC Driver CMSIS access structure */
324 extern ARM_DRIVER_MPC Driver_ISRAM1_MPC;
325 ARM_DRIVER_MPC Driver_ISRAM1_MPC = {
326     .GetVersion       = ARM_MPC_GetVersion,
327     .Initialize       = ISRAM1_MPC_Initialize,
328     .Uninitialize     = ISRAM1_MPC_Uninitialize,
329     .GetBlockSize     = ISRAM1_MPC_GetBlockSize,
330     .GetCtrlConfig    = ISRAM1_MPC_GetCtrlConfig,
331     .SetCtrlConfig    = ISRAM1_MPC_SetCtrlConfig,
332     .ConfigRegion     = ISRAM1_MPC_ConfigRegion,
333     .GetRegionConfig  = ISRAM1_MPC_GetRegionConfig,
334     .EnableInterrupt  = ISRAM1_MPC_EnableInterrupt,
335     .DisableInterrupt = ISRAM1_MPC_DisableInterrupt,
336     .ClearInterrupt   = ISRAM1_MPC_ClearInterrupt,
337     .InterruptState   = ISRAM1_MPC_InterruptState,
338     .LockDown         = ISRAM1_MPC_LockDown,
339 };
340 #endif /* RTE_ISRAM1_MPC */
341 
342 #if (RTE_ISRAM2_MPC)
343 /* Ranges controlled by this ISRAM2_MPC */
344 static const struct mpc_sie200_memory_range_t MPC_ISRAM2_RANGE_S = {
345     .base         = MPC_ISRAM2_RANGE_BASE_S,
346     .limit        = MPC_ISRAM2_RANGE_LIMIT_S,
347     .range_offset = 0,
348     .attr         = MPC_SIE200_SEC_ATTR_SECURE
349 };
350 
351 static const struct mpc_sie200_memory_range_t MPC_ISRAM2_RANGE_NS = {
352     .base         = MPC_ISRAM2_RANGE_BASE_NS,
353     .limit        = MPC_ISRAM2_RANGE_LIMIT_NS,
354     .range_offset = 0,
355     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
356 };
357 
358 #define MPC_ISRAM2_RANGE_LIST_LEN  2u
359 static const struct mpc_sie200_memory_range_t*
360     MPC_ISRAM2_RANGE_LIST[MPC_ISRAM2_RANGE_LIST_LEN] = {&MPC_ISRAM2_RANGE_S,
361                                                         &MPC_ISRAM2_RANGE_NS};
362 
363 /* ISRAM2_MPC Driver wrapper functions */
ISRAM2_MPC_Initialize(void)364 static int32_t ISRAM2_MPC_Initialize(void)
365 {
366     enum mpc_sie200_error_t ret;
367 
368     ret = mpc_sie200_init(&MPC_ISRAM2_DEV,
369                           MPC_ISRAM2_RANGE_LIST,
370                           MPC_ISRAM2_RANGE_LIST_LEN);
371 
372     return error_trans(ret);
373 }
374 
ISRAM2_MPC_Uninitialize(void)375 static int32_t ISRAM2_MPC_Uninitialize(void)
376 {
377     /* Nothing to be done */
378     return ARM_DRIVER_OK;
379 }
380 
ISRAM2_MPC_GetBlockSize(uint32_t * blk_size)381 static int32_t ISRAM2_MPC_GetBlockSize(uint32_t* blk_size)
382 {
383     enum mpc_sie200_error_t ret;
384 
385     ret = mpc_sie200_get_block_size(&MPC_ISRAM2_DEV, blk_size);
386 
387     return error_trans(ret);
388 }
389 
ISRAM2_MPC_GetCtrlConfig(uint32_t * ctrl_val)390 static int32_t ISRAM2_MPC_GetCtrlConfig(uint32_t* ctrl_val)
391 {
392     enum mpc_sie200_error_t ret;
393 
394     ret = mpc_sie200_get_ctrl(&MPC_ISRAM2_DEV, ctrl_val);
395 
396     return error_trans(ret);
397 }
398 
ISRAM2_MPC_SetCtrlConfig(uint32_t ctrl)399 static int32_t ISRAM2_MPC_SetCtrlConfig(uint32_t ctrl)
400 {
401     enum mpc_sie200_error_t ret;
402 
403     ret = mpc_sie200_set_ctrl(&MPC_ISRAM2_DEV, ctrl);
404 
405     return error_trans(ret);
406 }
407 
ISRAM2_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)408 static int32_t ISRAM2_MPC_GetRegionConfig(uintptr_t base,
409                                           uintptr_t limit,
410                                           ARM_MPC_SEC_ATTR* attr)
411 {
412     enum mpc_sie200_error_t ret;
413 
414     ret = mpc_sie200_get_region_config(&MPC_ISRAM2_DEV, base, limit,
415                                        (enum mpc_sie200_sec_attr_t*)attr);
416 
417     return error_trans(ret);
418 }
419 
ISRAM2_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)420 static int32_t ISRAM2_MPC_ConfigRegion(uintptr_t base,
421                                        uintptr_t limit,
422                                        ARM_MPC_SEC_ATTR attr)
423 {
424     enum mpc_sie200_error_t ret;
425 
426     ret = mpc_sie200_config_region(&MPC_ISRAM2_DEV, base, limit,
427                                    (enum mpc_sie200_sec_attr_t)attr);
428 
429     return error_trans(ret);
430 }
431 
ISRAM2_MPC_EnableInterrupt(void)432 static int32_t ISRAM2_MPC_EnableInterrupt(void)
433 {
434     enum mpc_sie200_error_t ret;
435 
436     ret = mpc_sie200_irq_enable(&MPC_ISRAM2_DEV);
437 
438     return error_trans(ret);
439 }
440 
ISRAM2_MPC_DisableInterrupt(void)441 static void ISRAM2_MPC_DisableInterrupt(void)
442 {
443     mpc_sie200_irq_disable(&MPC_ISRAM2_DEV);
444 }
445 
ISRAM2_MPC_ClearInterrupt(void)446 static void ISRAM2_MPC_ClearInterrupt(void)
447 {
448     mpc_sie200_clear_irq(&MPC_ISRAM2_DEV);
449 }
450 
ISRAM2_MPC_InterruptState(void)451 static uint32_t ISRAM2_MPC_InterruptState(void)
452 {
453     return mpc_sie200_irq_state(&MPC_ISRAM2_DEV);
454 }
455 
ISRAM2_MPC_LockDown(void)456 static int32_t ISRAM2_MPC_LockDown(void)
457 {
458     return mpc_sie200_lock_down(&MPC_ISRAM2_DEV);
459 }
460 
461 /* ISRAM2_MPC Driver CMSIS access structure */
462 extern ARM_DRIVER_MPC Driver_ISRAM2_MPC;
463 ARM_DRIVER_MPC Driver_ISRAM2_MPC = {
464     .GetVersion       = ARM_MPC_GetVersion,
465     .Initialize       = ISRAM2_MPC_Initialize,
466     .Uninitialize     = ISRAM2_MPC_Uninitialize,
467     .GetBlockSize     = ISRAM2_MPC_GetBlockSize,
468     .GetCtrlConfig    = ISRAM2_MPC_GetCtrlConfig,
469     .SetCtrlConfig    = ISRAM2_MPC_SetCtrlConfig,
470     .ConfigRegion     = ISRAM2_MPC_ConfigRegion,
471     .GetRegionConfig  = ISRAM2_MPC_GetRegionConfig,
472     .EnableInterrupt  = ISRAM2_MPC_EnableInterrupt,
473     .DisableInterrupt = ISRAM2_MPC_DisableInterrupt,
474     .ClearInterrupt   = ISRAM2_MPC_ClearInterrupt,
475     .InterruptState   = ISRAM2_MPC_InterruptState,
476     .LockDown         = ISRAM2_MPC_LockDown,
477 };
478 #endif /* RTE_ISRAM2_MPC */
479 
480 #if (RTE_ISRAM3_MPC)
481 /* Ranges controlled by this ISRAM3_MPC */
482 static const struct mpc_sie200_memory_range_t MPC_ISRAM3_RANGE_S = {
483     .base         = MPC_ISRAM3_RANGE_BASE_S,
484     .limit        = MPC_ISRAM3_RANGE_LIMIT_S,
485     .range_offset = 0,
486     .attr         = MPC_SIE200_SEC_ATTR_SECURE
487 };
488 
489 static const struct mpc_sie200_memory_range_t MPC_ISRAM3_RANGE_NS = {
490     .base         = MPC_ISRAM3_RANGE_BASE_NS,
491     .limit        = MPC_ISRAM3_RANGE_LIMIT_NS,
492     .range_offset = 0,
493     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
494 };
495 
496 #define MPC_ISRAM3_RANGE_LIST_LEN  2u
497 static const struct mpc_sie200_memory_range_t*
498     MPC_ISRAM3_RANGE_LIST[MPC_ISRAM3_RANGE_LIST_LEN] = {&MPC_ISRAM3_RANGE_S,
499                                                         &MPC_ISRAM3_RANGE_NS};
500 
501 /* ISRAM3_MPC Driver wrapper functions */
ISRAM3_MPC_Initialize(void)502 static int32_t ISRAM3_MPC_Initialize(void)
503 {
504     enum mpc_sie200_error_t ret;
505 
506     ret = mpc_sie200_init(&MPC_ISRAM3_DEV,
507                           MPC_ISRAM3_RANGE_LIST,
508                           MPC_ISRAM3_RANGE_LIST_LEN);
509 
510     return error_trans(ret);
511 }
512 
ISRAM3_MPC_Uninitialize(void)513 static int32_t ISRAM3_MPC_Uninitialize(void)
514 {
515     /* Nothing to be done */
516     return ARM_DRIVER_OK;
517 }
518 
ISRAM3_MPC_GetBlockSize(uint32_t * blk_size)519 static int32_t ISRAM3_MPC_GetBlockSize(uint32_t* blk_size)
520 {
521     enum mpc_sie200_error_t ret;
522 
523     ret = mpc_sie200_get_block_size(&MPC_ISRAM3_DEV, blk_size);
524 
525     return error_trans(ret);
526 }
527 
ISRAM3_MPC_GetCtrlConfig(uint32_t * ctrl_val)528 static int32_t ISRAM3_MPC_GetCtrlConfig(uint32_t* ctrl_val)
529 {
530     enum mpc_sie200_error_t ret;
531 
532     ret = mpc_sie200_get_ctrl(&MPC_ISRAM3_DEV, ctrl_val);
533 
534     return error_trans(ret);
535 }
536 
ISRAM3_MPC_SetCtrlConfig(uint32_t ctrl)537 static int32_t ISRAM3_MPC_SetCtrlConfig(uint32_t ctrl)
538 {
539     enum mpc_sie200_error_t ret;
540 
541     ret = mpc_sie200_set_ctrl(&MPC_ISRAM3_DEV, ctrl);
542 
543     return error_trans(ret);
544 }
545 
ISRAM3_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)546 static int32_t ISRAM3_MPC_GetRegionConfig(uintptr_t base,
547                                           uintptr_t limit,
548                                           ARM_MPC_SEC_ATTR* attr)
549 {
550     enum mpc_sie200_error_t ret;
551 
552     ret = mpc_sie200_get_region_config(&MPC_ISRAM3_DEV, base, limit,
553                                        (enum mpc_sie200_sec_attr_t*)attr);
554 
555     return error_trans(ret);
556 }
557 
ISRAM3_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)558 static int32_t ISRAM3_MPC_ConfigRegion(uintptr_t base,
559                                        uintptr_t limit,
560                                        ARM_MPC_SEC_ATTR attr)
561 {
562     enum mpc_sie200_error_t ret;
563 
564     ret = mpc_sie200_config_region(&MPC_ISRAM3_DEV, base, limit,
565                                    (enum mpc_sie200_sec_attr_t)attr);
566 
567     return error_trans(ret);
568 }
569 
ISRAM3_MPC_EnableInterrupt(void)570 static int32_t ISRAM3_MPC_EnableInterrupt(void)
571 {
572     enum mpc_sie200_error_t ret;
573 
574     ret = mpc_sie200_irq_enable(&MPC_ISRAM3_DEV);
575 
576     return error_trans(ret);
577 }
578 
ISRAM3_MPC_DisableInterrupt(void)579 static void ISRAM3_MPC_DisableInterrupt(void)
580 {
581     mpc_sie200_irq_disable(&MPC_ISRAM3_DEV);
582 }
583 
584 
ISRAM3_MPC_ClearInterrupt(void)585 static void ISRAM3_MPC_ClearInterrupt(void)
586 {
587     mpc_sie200_clear_irq(&MPC_ISRAM3_DEV);
588 }
589 
ISRAM3_MPC_InterruptState(void)590 static uint32_t ISRAM3_MPC_InterruptState(void)
591 {
592     return mpc_sie200_irq_state(&MPC_ISRAM3_DEV);
593 }
594 
ISRAM3_MPC_LockDown(void)595 static int32_t ISRAM3_MPC_LockDown(void)
596 {
597     return mpc_sie200_lock_down(&MPC_ISRAM3_DEV);
598 }
599 
600 /* ISRAM3_MPC Driver CMSIS access structure */
601 extern ARM_DRIVER_MPC Driver_ISRAM3_MPC;
602 ARM_DRIVER_MPC Driver_ISRAM3_MPC = {
603     .GetVersion       = ARM_MPC_GetVersion,
604     .Initialize       = ISRAM3_MPC_Initialize,
605     .Uninitialize     = ISRAM3_MPC_Uninitialize,
606     .GetBlockSize     = ISRAM3_MPC_GetBlockSize,
607     .GetCtrlConfig    = ISRAM3_MPC_GetCtrlConfig,
608     .SetCtrlConfig    = ISRAM3_MPC_SetCtrlConfig,
609     .ConfigRegion     = ISRAM3_MPC_ConfigRegion,
610     .GetRegionConfig  = ISRAM3_MPC_GetRegionConfig,
611     .EnableInterrupt  = ISRAM3_MPC_EnableInterrupt,
612     .DisableInterrupt = ISRAM3_MPC_DisableInterrupt,
613     .ClearInterrupt   = ISRAM3_MPC_ClearInterrupt,
614     .InterruptState   = ISRAM3_MPC_InterruptState,
615     .LockDown         = ISRAM3_MPC_LockDown,
616 };
617 #endif /* RTE_ISRAM3_MPC */
618 
619 #if (RTE_CODE_SRAM_MPC)
620 /* Ranges controlled by this CODE_SRAM_MPC */
621 static const struct mpc_sie200_memory_range_t MPC_CODE_SRAM_RANGE_S = {
622     .base         = MPC_CODE_SRAM_RANGE_BASE_S,
623     .limit        = MPC_CODE_SRAM_RANGE_LIMIT_S,
624     .range_offset = 0,
625     .attr         = MPC_SIE200_SEC_ATTR_SECURE
626 };
627 
628 static const struct mpc_sie200_memory_range_t MPC_CODE_SRAM_RANGE_NS = {
629     .base         = MPC_CODE_SRAM_RANGE_BASE_NS,
630     .limit        = MPC_CODE_SRAM_RANGE_LIMIT_NS,
631     .range_offset = 0,
632     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
633 };
634 
635 #define MPC_CODE_SRAM_RANGE_LIST_LEN  2u
636 static const struct  mpc_sie200_memory_range_t*
637     MPC_CODE_SRAM_RANGE_LIST[MPC_CODE_SRAM_RANGE_LIST_LEN] =
638                               {&MPC_CODE_SRAM_RANGE_S, &MPC_CODE_SRAM_RANGE_NS};
639 
640 /* CODE_SRAM_MPC Driver wrapper functions */
CODE_SRAM_MPC_Initialize(void)641 static int32_t CODE_SRAM_MPC_Initialize(void)
642 {
643     enum mpc_sie200_error_t ret;
644 
645     ret = mpc_sie200_init(&MPC_CODE_SRAM_DEV,
646                           MPC_CODE_SRAM_RANGE_LIST,
647                           MPC_CODE_SRAM_RANGE_LIST_LEN);
648 
649     return error_trans(ret);
650 }
651 
CODE_SRAM_MPC_Uninitialize(void)652 static int32_t CODE_SRAM_MPC_Uninitialize(void)
653 {
654     /* Nothing to be done */
655     return ARM_DRIVER_OK;
656 }
657 
CODE_SRAM_MPC_GetBlockSize(uint32_t * blk_size)658 static int32_t CODE_SRAM_MPC_GetBlockSize(uint32_t* blk_size)
659 {
660     enum mpc_sie200_error_t ret;
661 
662     ret = mpc_sie200_get_block_size(&MPC_CODE_SRAM_DEV, blk_size);
663 
664     return error_trans(ret);
665 }
666 
CODE_SRAM_MPC_GetCtrlConfig(uint32_t * ctrl_val)667 static int32_t CODE_SRAM_MPC_GetCtrlConfig(uint32_t* ctrl_val)
668 {
669     enum mpc_sie200_error_t ret;
670 
671     ret = mpc_sie200_get_ctrl(&MPC_CODE_SRAM_DEV, ctrl_val);
672 
673     return error_trans(ret);
674 }
675 
CODE_SRAM_MPC_SetCtrlConfig(uint32_t ctrl)676 static int32_t CODE_SRAM_MPC_SetCtrlConfig(uint32_t ctrl)
677 {
678     enum mpc_sie200_error_t ret;
679 
680     ret = mpc_sie200_set_ctrl(&MPC_CODE_SRAM_DEV, ctrl);
681 
682     return error_trans(ret);
683 }
684 
CODE_SRAM_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)685 static int32_t CODE_SRAM_MPC_GetRegionConfig(uintptr_t base,
686                                          uintptr_t limit,
687                                          ARM_MPC_SEC_ATTR* attr)
688 {
689     enum mpc_sie200_error_t ret;
690 
691     ret = mpc_sie200_get_region_config(&MPC_CODE_SRAM_DEV, base, limit,
692                                        (enum mpc_sie200_sec_attr_t*)attr);
693 
694     return error_trans(ret);
695 }
696 
CODE_SRAM_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)697 static int32_t CODE_SRAM_MPC_ConfigRegion(uintptr_t base,
698                                       uintptr_t limit,
699                                       ARM_MPC_SEC_ATTR attr)
700 {
701     enum mpc_sie200_error_t ret;
702 
703     ret = mpc_sie200_config_region(&MPC_CODE_SRAM_DEV, base, limit,
704                                    (enum mpc_sie200_sec_attr_t)attr);
705 
706     return error_trans(ret);
707 }
708 
CODE_SRAM_MPC_EnableInterrupt(void)709 static int32_t CODE_SRAM_MPC_EnableInterrupt(void)
710 {
711     enum mpc_sie200_error_t ret;
712 
713     ret = mpc_sie200_irq_enable(&MPC_CODE_SRAM_DEV);
714 
715     return error_trans(ret);
716 }
717 
CODE_SRAM_MPC_DisableInterrupt(void)718 static void CODE_SRAM_MPC_DisableInterrupt(void)
719 {
720     mpc_sie200_irq_disable(&MPC_CODE_SRAM_DEV);
721 }
722 
723 
CODE_SRAM_MPC_ClearInterrupt(void)724 static void CODE_SRAM_MPC_ClearInterrupt(void)
725 {
726     mpc_sie200_clear_irq(&MPC_CODE_SRAM_DEV);
727 }
728 
CODE_SRAM_MPC_InterruptState(void)729 static uint32_t CODE_SRAM_MPC_InterruptState(void)
730 {
731     return mpc_sie200_irq_state(&MPC_CODE_SRAM_DEV);
732 }
733 
CODE_SRAM_MPC_LockDown(void)734 static int32_t CODE_SRAM_MPC_LockDown(void)
735 {
736     return mpc_sie200_lock_down(&MPC_CODE_SRAM_DEV);
737 }
738 
739 /* CODE_SRAM_MPC Driver CMSIS access structure */
740 extern ARM_DRIVER_MPC Driver_CODE_SRAM_MPC;
741 ARM_DRIVER_MPC Driver_CODE_SRAM_MPC = {
742     .GetVersion       = ARM_MPC_GetVersion,
743     .Initialize       = CODE_SRAM_MPC_Initialize,
744     .Uninitialize     = CODE_SRAM_MPC_Uninitialize,
745     .GetBlockSize     = CODE_SRAM_MPC_GetBlockSize,
746     .GetCtrlConfig    = CODE_SRAM_MPC_GetCtrlConfig,
747     .SetCtrlConfig    = CODE_SRAM_MPC_SetCtrlConfig,
748     .ConfigRegion     = CODE_SRAM_MPC_ConfigRegion,
749     .GetRegionConfig  = CODE_SRAM_MPC_GetRegionConfig,
750     .EnableInterrupt  = CODE_SRAM_MPC_EnableInterrupt,
751     .DisableInterrupt = CODE_SRAM_MPC_DisableInterrupt,
752     .ClearInterrupt   = CODE_SRAM_MPC_ClearInterrupt,
753     .InterruptState   = CODE_SRAM_MPC_InterruptState,
754     .LockDown         = CODE_SRAM_MPC_LockDown,
755 };
756 #endif /* RTE_CODE_SRAM_MPC */
757 
758 #if (RTE_SSRAM1_MPC)
759 /* Ranges controlled by this SSRAM1_MPC */
760 static const struct mpc_sie200_memory_range_t MPC_SSRAM1_RANGE_S = {
761     .base         = MPC_SSRAM1_RANGE_BASE_S,
762     .limit        = MPC_SSRAM1_RANGE_LIMIT_S,
763     .range_offset = 0,
764     .attr         = MPC_SIE200_SEC_ATTR_SECURE
765 };
766 
767 static const struct mpc_sie200_memory_range_t MPC_SSRAM1_RANGE_NS = {
768     .base         = MPC_SSRAM1_RANGE_BASE_NS,
769     .limit        = MPC_SSRAM1_RANGE_LIMIT_NS,
770     .range_offset = 0,
771     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
772 };
773 
774 #define MPC_SSRAM1_RANGE_LIST_LEN  2u
775 static const struct  mpc_sie200_memory_range_t*
776     MPC_SSRAM1_RANGE_LIST[MPC_SSRAM1_RANGE_LIST_LEN] = {&MPC_SSRAM1_RANGE_S,
777                                                         &MPC_SSRAM1_RANGE_NS};
778 
779 /* SSRAM1_MPC Driver wrapper functions */
SSRAM1_MPC_Initialize(void)780 static int32_t SSRAM1_MPC_Initialize(void)
781 {
782     enum mpc_sie200_error_t ret;
783 
784     ret = mpc_sie200_init(&MPC_SSRAM1_DEV,
785                           MPC_SSRAM1_RANGE_LIST,
786                           MPC_SSRAM1_RANGE_LIST_LEN);
787 
788     return error_trans(ret);
789 }
790 
SSRAM1_MPC_Uninitialize(void)791 static int32_t SSRAM1_MPC_Uninitialize(void)
792 {
793     /* Nothing to be done */
794     return ARM_DRIVER_OK;
795 }
796 
SSRAM1_MPC_GetBlockSize(uint32_t * blk_size)797 static int32_t SSRAM1_MPC_GetBlockSize(uint32_t* blk_size)
798 {
799     enum mpc_sie200_error_t ret;
800 
801     ret = mpc_sie200_get_block_size(&MPC_SSRAM1_DEV, blk_size);
802 
803     return error_trans(ret);
804 }
805 
SSRAM1_MPC_GetCtrlConfig(uint32_t * ctrl_val)806 static int32_t SSRAM1_MPC_GetCtrlConfig(uint32_t* ctrl_val)
807 {
808     enum mpc_sie200_error_t ret;
809 
810     ret = mpc_sie200_get_ctrl(&MPC_SSRAM1_DEV, ctrl_val);
811 
812     return error_trans(ret);
813 }
814 
SSRAM1_MPC_SetCtrlConfig(uint32_t ctrl)815 static int32_t SSRAM1_MPC_SetCtrlConfig(uint32_t ctrl)
816 {
817     enum mpc_sie200_error_t ret;
818 
819     ret = mpc_sie200_set_ctrl(&MPC_SSRAM1_DEV, ctrl);
820 
821     return error_trans(ret);
822 }
823 
SSRAM1_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)824 static int32_t SSRAM1_MPC_GetRegionConfig(uintptr_t base,
825                                          uintptr_t limit,
826                                          ARM_MPC_SEC_ATTR* attr)
827 {
828     enum mpc_sie200_error_t ret;
829 
830     ret = mpc_sie200_get_region_config(&MPC_SSRAM1_DEV, base, limit,
831                                        (enum mpc_sie200_sec_attr_t*)attr);
832 
833     return error_trans(ret);
834 }
835 
SSRAM1_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)836 static int32_t SSRAM1_MPC_ConfigRegion(uintptr_t base,
837                                       uintptr_t limit,
838                                       ARM_MPC_SEC_ATTR attr)
839 {
840     enum mpc_sie200_error_t ret;
841 
842     ret = mpc_sie200_config_region(&MPC_SSRAM1_DEV, base, limit,
843                                    (enum mpc_sie200_sec_attr_t)attr);
844 
845     return error_trans(ret);
846 }
847 
SSRAM1_MPC_EnableInterrupt(void)848 static int32_t SSRAM1_MPC_EnableInterrupt(void)
849 {
850     enum mpc_sie200_error_t ret;
851 
852     ret = mpc_sie200_irq_enable(&MPC_SSRAM1_DEV);
853 
854     return error_trans(ret);
855 }
856 
SSRAM1_MPC_DisableInterrupt(void)857 static void SSRAM1_MPC_DisableInterrupt(void)
858 {
859     mpc_sie200_irq_disable(&MPC_SSRAM1_DEV);
860 }
861 
862 
SSRAM1_MPC_ClearInterrupt(void)863 static void SSRAM1_MPC_ClearInterrupt(void)
864 {
865     mpc_sie200_clear_irq(&MPC_SSRAM1_DEV);
866 }
867 
SSRAM1_MPC_InterruptState(void)868 static uint32_t SSRAM1_MPC_InterruptState(void)
869 {
870     return mpc_sie200_irq_state(&MPC_SSRAM1_DEV);
871 }
872 
SSRAM1_MPC_LockDown(void)873 static int32_t SSRAM1_MPC_LockDown(void)
874 {
875     return mpc_sie200_lock_down(&MPC_SSRAM1_DEV);
876 }
877 
878 /* SSRAM1_MPC Driver CMSIS access structure */
879 extern ARM_DRIVER_MPC Driver_SRAM1_MPC;
880 ARM_DRIVER_MPC Driver_SRAM1_MPC = {
881     .GetVersion       = ARM_MPC_GetVersion,
882     .Initialize       = SSRAM1_MPC_Initialize,
883     .Uninitialize     = SSRAM1_MPC_Uninitialize,
884     .GetBlockSize     = SSRAM1_MPC_GetBlockSize,
885     .GetCtrlConfig    = SSRAM1_MPC_GetCtrlConfig,
886     .SetCtrlConfig    = SSRAM1_MPC_SetCtrlConfig,
887     .ConfigRegion     = SSRAM1_MPC_ConfigRegion,
888     .GetRegionConfig  = SSRAM1_MPC_GetRegionConfig,
889     .EnableInterrupt  = SSRAM1_MPC_EnableInterrupt,
890     .DisableInterrupt = SSRAM1_MPC_DisableInterrupt,
891     .ClearInterrupt   = SSRAM1_MPC_ClearInterrupt,
892     .InterruptState   = SSRAM1_MPC_InterruptState,
893     .LockDown         = SSRAM1_MPC_LockDown,
894 };
895 #endif /* RTE_SSRAM1_MPC */
896 
897 #if (RTE_SSRAM2_MPC)
898 /* Ranges controlled by this SSRAM2_MPC */
899 static const struct mpc_sie200_memory_range_t MPC_SSRAM2_RANGE_S = {
900     .base         = MPC_SSRAM2_RANGE_BASE_S,
901     .limit        = MPC_SSRAM2_RANGE_LIMIT_S,
902     .range_offset = 0,
903     .attr         = MPC_SIE200_SEC_ATTR_SECURE
904 };
905 
906 static const struct mpc_sie200_memory_range_t MPC_SSRAM2_RANGE_NS = {
907     .base         = MPC_SSRAM2_RANGE_BASE_NS,
908     .limit        = MPC_SSRAM2_RANGE_LIMIT_NS,
909     .range_offset = 0,
910     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
911 };
912 
913 #define MPC_SSRAM2_RANGE_LIST_LEN  2u
914 static const struct  mpc_sie200_memory_range_t*
915     MPC_SSRAM2_RANGE_LIST[MPC_SSRAM2_RANGE_LIST_LEN] = {&MPC_SSRAM2_RANGE_S,
916                                                         &MPC_SSRAM2_RANGE_NS};
917 
918 /* SSRAM2_MPC Driver wrapper functions */
SSRAM2_MPC_Initialize(void)919 static int32_t SSRAM2_MPC_Initialize(void)
920 {
921     enum mpc_sie200_error_t ret;
922 
923     ret = mpc_sie200_init(&MPC_SSRAM2_DEV,
924                           MPC_SSRAM2_RANGE_LIST,
925                           MPC_SSRAM2_RANGE_LIST_LEN);
926 
927     return error_trans(ret);
928 }
929 
SSRAM2_MPC_Uninitialize(void)930 static int32_t SSRAM2_MPC_Uninitialize(void)
931 {
932     /* Nothing to be done */
933     return ARM_DRIVER_OK;
934 }
935 
SSRAM2_MPC_GetBlockSize(uint32_t * blk_size)936 static int32_t SSRAM2_MPC_GetBlockSize(uint32_t* blk_size)
937 {
938     enum mpc_sie200_error_t ret;
939 
940     ret = mpc_sie200_get_block_size(&MPC_SSRAM2_DEV, blk_size);
941 
942     return error_trans(ret);
943 }
944 
SSRAM2_MPC_GetCtrlConfig(uint32_t * ctrl_val)945 static int32_t SSRAM2_MPC_GetCtrlConfig(uint32_t* ctrl_val)
946 {
947     enum mpc_sie200_error_t ret;
948 
949     ret = mpc_sie200_get_ctrl(&MPC_SSRAM2_DEV, ctrl_val);
950 
951     return error_trans(ret);
952 }
953 
SSRAM2_MPC_SetCtrlConfig(uint32_t ctrl)954 static int32_t SSRAM2_MPC_SetCtrlConfig(uint32_t ctrl)
955 {
956     enum mpc_sie200_error_t ret;
957 
958     ret = mpc_sie200_set_ctrl(&MPC_SSRAM2_DEV, ctrl);
959 
960     return error_trans(ret);
961 }
962 
SSRAM2_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)963 static int32_t SSRAM2_MPC_GetRegionConfig(uintptr_t base,
964                                          uintptr_t limit,
965                                          ARM_MPC_SEC_ATTR* attr)
966 {
967     enum mpc_sie200_error_t ret;
968 
969     ret = mpc_sie200_get_region_config(&MPC_SSRAM2_DEV, base, limit,
970                                        (enum mpc_sie200_sec_attr_t*)attr);
971 
972     return error_trans(ret);
973 }
974 
SSRAM2_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)975 static int32_t SSRAM2_MPC_ConfigRegion(uintptr_t base,
976                                       uintptr_t limit,
977                                       ARM_MPC_SEC_ATTR attr)
978 {
979     enum mpc_sie200_error_t ret;
980 
981     ret = mpc_sie200_config_region(&MPC_SSRAM2_DEV, base, limit,
982                                    (enum mpc_sie200_sec_attr_t)attr);
983 
984     return error_trans(ret);
985 }
986 
SSRAM2_MPC_EnableInterrupt(void)987 static int32_t SSRAM2_MPC_EnableInterrupt(void)
988 {
989     enum mpc_sie200_error_t ret;
990 
991     ret = mpc_sie200_irq_enable(&MPC_SSRAM2_DEV);
992 
993     return error_trans(ret);
994 }
995 
SSRAM2_MPC_DisableInterrupt(void)996 static void SSRAM2_MPC_DisableInterrupt(void)
997 {
998     mpc_sie200_irq_disable(&MPC_SSRAM2_DEV);
999 }
1000 
1001 
SSRAM2_MPC_ClearInterrupt(void)1002 static void SSRAM2_MPC_ClearInterrupt(void)
1003 {
1004     mpc_sie200_clear_irq(&MPC_SSRAM2_DEV);
1005 }
1006 
SSRAM2_MPC_InterruptState(void)1007 static uint32_t SSRAM2_MPC_InterruptState(void)
1008 {
1009     return mpc_sie200_irq_state(&MPC_SSRAM2_DEV);
1010 }
1011 
SSRAM2_MPC_LockDown(void)1012 static int32_t SSRAM2_MPC_LockDown(void)
1013 {
1014     return mpc_sie200_lock_down(&MPC_SSRAM2_DEV);
1015 }
1016 
1017 /* SSRAM2_MPC Driver CMSIS access structure */
1018 extern ARM_DRIVER_MPC Driver_SRAM2_MPC;
1019 ARM_DRIVER_MPC Driver_SRAM2_MPC = {
1020     .GetVersion       = ARM_MPC_GetVersion,
1021     .Initialize       = SSRAM2_MPC_Initialize,
1022     .Uninitialize     = SSRAM2_MPC_Uninitialize,
1023     .GetBlockSize     = SSRAM2_MPC_GetBlockSize,
1024     .GetCtrlConfig    = SSRAM2_MPC_GetCtrlConfig,
1025     .SetCtrlConfig    = SSRAM2_MPC_SetCtrlConfig,
1026     .ConfigRegion     = SSRAM2_MPC_ConfigRegion,
1027     .GetRegionConfig  = SSRAM2_MPC_GetRegionConfig,
1028     .EnableInterrupt  = SSRAM2_MPC_EnableInterrupt,
1029     .DisableInterrupt = SSRAM2_MPC_DisableInterrupt,
1030     .ClearInterrupt   = SSRAM2_MPC_ClearInterrupt,
1031     .InterruptState   = SSRAM2_MPC_InterruptState,
1032     .LockDown         = SSRAM2_MPC_LockDown,
1033 };
1034 #endif /* RTE_SSRAM2_MPC */
1035 
1036 #if (RTE_SSRAM3_MPC)
1037 /* Ranges controlled by this SSRAM3_MPC */
1038 static const struct mpc_sie200_memory_range_t MPC_SSRAM3_RANGE_S = {
1039     .base         = MPC_SSRAM3_RANGE_BASE_S,
1040     .limit        = MPC_SSRAM3_RANGE_LIMIT_S,
1041     .range_offset = 0,
1042     .attr         = MPC_SIE200_SEC_ATTR_SECURE
1043 };
1044 
1045 static const struct mpc_sie200_memory_range_t MPC_SSRAM3_RANGE_NS = {
1046     .base         = MPC_SSRAM3_RANGE_BASE_NS,
1047     .limit        = MPC_SSRAM3_RANGE_LIMIT_NS,
1048     .range_offset = 0,
1049     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
1050 };
1051 
1052 #define MPC_SSRAM3_RANGE_LIST_LEN  2u
1053 static const struct  mpc_sie200_memory_range_t*
1054     MPC_SSRAM3_RANGE_LIST[MPC_SSRAM3_RANGE_LIST_LEN] = {&MPC_SSRAM3_RANGE_S,
1055                                                         &MPC_SSRAM3_RANGE_NS};
1056 
1057 /* SSRAM3_MPC Driver wrapper functions */
SSRAM3_MPC_Initialize(void)1058 static int32_t SSRAM3_MPC_Initialize(void)
1059 {
1060     enum mpc_sie200_error_t ret;
1061 
1062     ret = mpc_sie200_init(&MPC_SSRAM3_DEV,
1063                           MPC_SSRAM3_RANGE_LIST,
1064                           MPC_SSRAM3_RANGE_LIST_LEN);
1065 
1066     return error_trans(ret);
1067 }
1068 
SSRAM3_MPC_Uninitialize(void)1069 static int32_t SSRAM3_MPC_Uninitialize(void)
1070 {
1071     /* Nothing to be done */
1072     return ARM_DRIVER_OK;
1073 }
1074 
SSRAM3_MPC_GetBlockSize(uint32_t * blk_size)1075 static int32_t SSRAM3_MPC_GetBlockSize(uint32_t* blk_size)
1076 {
1077     enum mpc_sie200_error_t ret;
1078 
1079     ret = mpc_sie200_get_block_size(&MPC_SSRAM3_DEV, blk_size);
1080 
1081     return error_trans(ret);
1082 }
1083 
SSRAM3_MPC_GetCtrlConfig(uint32_t * ctrl_val)1084 static int32_t SSRAM3_MPC_GetCtrlConfig(uint32_t* ctrl_val)
1085 {
1086     enum mpc_sie200_error_t ret;
1087 
1088     ret = mpc_sie200_get_ctrl(&MPC_SSRAM3_DEV, ctrl_val);
1089 
1090     return error_trans(ret);
1091 }
1092 
SSRAM3_MPC_SetCtrlConfig(uint32_t ctrl)1093 static int32_t SSRAM3_MPC_SetCtrlConfig(uint32_t ctrl)
1094 {
1095     enum mpc_sie200_error_t ret;
1096 
1097     ret = mpc_sie200_set_ctrl(&MPC_SSRAM3_DEV, ctrl);
1098 
1099     return error_trans(ret);
1100 }
1101 
SSRAM3_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)1102 static int32_t SSRAM3_MPC_GetRegionConfig(uintptr_t base,
1103                                          uintptr_t limit,
1104                                          ARM_MPC_SEC_ATTR* attr)
1105 {
1106     enum mpc_sie200_error_t ret;
1107 
1108     ret = mpc_sie200_get_region_config(&MPC_SSRAM3_DEV, base, limit,
1109                                        (enum mpc_sie200_sec_attr_t*)attr);
1110 
1111     return error_trans(ret);
1112 }
1113 
SSRAM3_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)1114 static int32_t SSRAM3_MPC_ConfigRegion(uintptr_t base,
1115                                       uintptr_t limit,
1116                                       ARM_MPC_SEC_ATTR attr)
1117 {
1118     enum mpc_sie200_error_t ret;
1119 
1120     ret = mpc_sie200_config_region(&MPC_SSRAM3_DEV, base, limit,
1121                                    (enum mpc_sie200_sec_attr_t)attr);
1122 
1123     return error_trans(ret);
1124 }
1125 
SSRAM3_MPC_EnableInterrupt(void)1126 static int32_t SSRAM3_MPC_EnableInterrupt(void)
1127 {
1128     enum mpc_sie200_error_t ret;
1129 
1130     ret = mpc_sie200_irq_enable(&MPC_SSRAM3_DEV);
1131 
1132     return error_trans(ret);
1133 }
1134 
SSRAM3_MPC_DisableInterrupt(void)1135 static void SSRAM3_MPC_DisableInterrupt(void)
1136 {
1137     mpc_sie200_irq_disable(&MPC_SSRAM3_DEV);
1138 }
1139 
1140 
SSRAM3_MPC_ClearInterrupt(void)1141 static void SSRAM3_MPC_ClearInterrupt(void)
1142 {
1143     mpc_sie200_clear_irq(&MPC_SSRAM3_DEV);
1144 }
1145 
SSRAM3_MPC_InterruptState(void)1146 static uint32_t SSRAM3_MPC_InterruptState(void)
1147 {
1148     return mpc_sie200_irq_state(&MPC_SSRAM3_DEV);
1149 }
1150 
SSRAM3_MPC_LockDown(void)1151 static int32_t SSRAM3_MPC_LockDown(void)
1152 {
1153     return mpc_sie200_lock_down(&MPC_SSRAM3_DEV);
1154 }
1155 
1156 /* SSRAM3_MPC Driver CMSIS access structure */
1157 extern ARM_DRIVER_MPC Driver_SSRAM3_MPC;
1158 ARM_DRIVER_MPC Driver_SSRAM3_MPC = {
1159     .GetVersion       = ARM_MPC_GetVersion,
1160     .Initialize       = SSRAM3_MPC_Initialize,
1161     .Uninitialize     = SSRAM3_MPC_Uninitialize,
1162     .GetBlockSize     = SSRAM3_MPC_GetBlockSize,
1163     .GetCtrlConfig    = SSRAM3_MPC_GetCtrlConfig,
1164     .SetCtrlConfig    = SSRAM3_MPC_SetCtrlConfig,
1165     .ConfigRegion     = SSRAM3_MPC_ConfigRegion,
1166     .GetRegionConfig  = SSRAM3_MPC_GetRegionConfig,
1167     .EnableInterrupt  = SSRAM3_MPC_EnableInterrupt,
1168     .DisableInterrupt = SSRAM3_MPC_DisableInterrupt,
1169     .ClearInterrupt   = SSRAM3_MPC_ClearInterrupt,
1170     .InterruptState   = SSRAM3_MPC_InterruptState,
1171     .LockDown         = SSRAM3_MPC_LockDown,
1172 };
1173 #endif /* RTE_SSRAM3_MPC */
1174 
1175 #if (RTE_QSPI_MPC)
1176 /* Ranges controlled by this QSPI_MPC */
1177 static const struct mpc_sie200_memory_range_t MPC_QSPI_RANGE_S = {
1178     .base         = MPC_QSPI_RANGE_BASE_S,
1179     .limit        = MPC_QSPI_RANGE_LIMIT_S,
1180     .range_offset = 0,
1181     .attr         = MPC_SIE200_SEC_ATTR_SECURE
1182 };
1183 
1184 static const struct mpc_sie200_memory_range_t MPC_QSPI_RANGE_NS = {
1185     .base         = MPC_QSPI_RANGE_BASE_NS,
1186     .limit        = MPC_QSPI_RANGE_LIMIT_NS,
1187     .range_offset = 0,
1188     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
1189 };
1190 
1191 #define MPC_QSPI_RANGE_LIST_LEN  2u
1192 static const struct  mpc_sie200_memory_range_t*
1193     MPC_QSPI_RANGE_LIST[MPC_QSPI_RANGE_LIST_LEN] = {&MPC_QSPI_RANGE_S,
1194                                                     &MPC_QSPI_RANGE_NS};
1195 
1196 /* QSPI_MPC Driver wrapper functions */
QSPI_MPC_Initialize(void)1197 static int32_t QSPI_MPC_Initialize(void)
1198 {
1199     enum mpc_sie200_error_t ret;
1200 
1201     ret = mpc_sie200_init(&MPC_QSPI_DEV,
1202                           MPC_QSPI_RANGE_LIST,
1203                           MPC_QSPI_RANGE_LIST_LEN);
1204 
1205     return error_trans(ret);
1206 }
1207 
QSPI_MPC_Uninitialize(void)1208 static int32_t QSPI_MPC_Uninitialize(void)
1209 {
1210     /* Nothing to be done */
1211     return ARM_DRIVER_OK;
1212 }
1213 
QSPI_MPC_GetBlockSize(uint32_t * blk_size)1214 static int32_t QSPI_MPC_GetBlockSize(uint32_t* blk_size)
1215 {
1216     enum mpc_sie200_error_t ret;
1217 
1218     ret = mpc_sie200_get_block_size(&MPC_QSPI_DEV, blk_size);
1219 
1220     return error_trans(ret);
1221 }
1222 
QSPI_MPC_GetCtrlConfig(uint32_t * ctrl_val)1223 static int32_t QSPI_MPC_GetCtrlConfig(uint32_t* ctrl_val)
1224 {
1225     enum mpc_sie200_error_t ret;
1226 
1227     ret = mpc_sie200_get_ctrl(&MPC_QSPI_DEV, ctrl_val);
1228 
1229     return error_trans(ret);
1230 }
1231 
QSPI_MPC_SetCtrlConfig(uint32_t ctrl)1232 static int32_t QSPI_MPC_SetCtrlConfig(uint32_t ctrl)
1233 {
1234     enum mpc_sie200_error_t ret;
1235 
1236     ret = mpc_sie200_set_ctrl(&MPC_QSPI_DEV, ctrl);
1237 
1238     return error_trans(ret);
1239 }
1240 
QSPI_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)1241 static int32_t QSPI_MPC_GetRegionConfig(uintptr_t base,
1242                                          uintptr_t limit,
1243                                          ARM_MPC_SEC_ATTR* attr)
1244 {
1245     enum mpc_sie200_error_t ret;
1246 
1247     ret = mpc_sie200_get_region_config(&MPC_QSPI_DEV, base, limit,
1248                                        (enum mpc_sie200_sec_attr_t*)attr);
1249 
1250     return error_trans(ret);
1251 }
1252 
QSPI_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)1253 static int32_t QSPI_MPC_ConfigRegion(uintptr_t base,
1254                                       uintptr_t limit,
1255                                       ARM_MPC_SEC_ATTR attr)
1256 {
1257     enum mpc_sie200_error_t ret;
1258 
1259     ret = mpc_sie200_config_region(&MPC_QSPI_DEV, base, limit,
1260                                    (enum mpc_sie200_sec_attr_t)attr);
1261 
1262     return error_trans(ret);
1263 }
1264 
QSPI_MPC_EnableInterrupt(void)1265 static int32_t QSPI_MPC_EnableInterrupt(void)
1266 {
1267     enum mpc_sie200_error_t ret;
1268 
1269     ret = mpc_sie200_irq_enable(&MPC_QSPI_DEV);
1270 
1271     return error_trans(ret);
1272 }
1273 
QSPI_MPC_DisableInterrupt(void)1274 static void QSPI_MPC_DisableInterrupt(void)
1275 {
1276     mpc_sie200_irq_disable(&MPC_QSPI_DEV);
1277 }
1278 
1279 
QSPI_MPC_ClearInterrupt(void)1280 static void QSPI_MPC_ClearInterrupt(void)
1281 {
1282     mpc_sie200_clear_irq(&MPC_QSPI_DEV);
1283 }
1284 
QSPI_MPC_InterruptState(void)1285 static uint32_t QSPI_MPC_InterruptState(void)
1286 {
1287     return mpc_sie200_irq_state(&MPC_QSPI_DEV);
1288 }
1289 
QSPI_MPC_LockDown(void)1290 static int32_t QSPI_MPC_LockDown(void)
1291 {
1292     return mpc_sie200_lock_down(&MPC_QSPI_DEV);
1293 }
1294 
1295 /* QSPI1_MPC Driver CMSIS access structure */
1296 extern ARM_DRIVER_MPC Driver_QSPI_MPC;
1297 ARM_DRIVER_MPC Driver_QSPI_MPC = {
1298     .GetVersion       = ARM_MPC_GetVersion,
1299     .Initialize       = QSPI_MPC_Initialize,
1300     .Uninitialize     = QSPI_MPC_Uninitialize,
1301     .GetBlockSize     = QSPI_MPC_GetBlockSize,
1302     .GetCtrlConfig    = QSPI_MPC_GetCtrlConfig,
1303     .SetCtrlConfig    = QSPI_MPC_SetCtrlConfig,
1304     .ConfigRegion     = QSPI_MPC_ConfigRegion,
1305     .GetRegionConfig  = QSPI_MPC_GetRegionConfig,
1306     .EnableInterrupt  = QSPI_MPC_EnableInterrupt,
1307     .DisableInterrupt = QSPI_MPC_DisableInterrupt,
1308     .ClearInterrupt   = QSPI_MPC_ClearInterrupt,
1309     .InterruptState   = QSPI_MPC_InterruptState,
1310     .LockDown         = QSPI_MPC_LockDown,
1311 };
1312 #endif /* RTE_QSPI_MPC */
1313 
1314 #if (RTE_EFLASH0_MPC)
1315 /* Ranges controlled by this EFLASH0_MPC */
1316 static const struct mpc_sie200_memory_range_t MPC_EFLASH0_RANGE_S = {
1317     .base         = MPC_EFLASH0_RANGE_BASE_S,
1318     .limit        = MPC_EFLASH0_RANGE_LIMIT_S,
1319     .range_offset = 0,
1320     .attr         = MPC_SIE200_SEC_ATTR_SECURE
1321 };
1322 
1323 static const struct mpc_sie200_memory_range_t MPC_EFLASH0_RANGE_NS = {
1324     .base         = MPC_EFLASH0_RANGE_BASE_NS,
1325     .limit        = MPC_EFLASH0_RANGE_LIMIT_NS,
1326     .range_offset = 0,
1327     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
1328 };
1329 
1330 #define MPC_EFLASH0_RANGE_LIST_LEN  2u
1331 static const struct mpc_sie200_memory_range_t*
1332     MPC_EFLASH0_RANGE_LIST[MPC_EFLASH0_RANGE_LIST_LEN]=
1333     {&MPC_EFLASH0_RANGE_S, &MPC_EFLASH0_RANGE_NS};
1334 
1335 /* EFLASH0_MPC Driver wrapper functions */
EFLASH0_MPC_Initialize(void)1336 static int32_t EFLASH0_MPC_Initialize(void)
1337 {
1338     enum mpc_sie200_error_t ret;
1339 
1340     ret = mpc_sie200_init(&MPC_EFLASH0_DEV,
1341                           MPC_EFLASH0_RANGE_LIST,
1342                           MPC_EFLASH0_RANGE_LIST_LEN);
1343 
1344     return error_trans(ret);
1345 }
1346 
EFLASH0_MPC_Uninitialize(void)1347 static int32_t EFLASH0_MPC_Uninitialize(void)
1348 {
1349     /* Nothing to be done */
1350     return ARM_DRIVER_OK;
1351 }
1352 
EFLASH0_MPC_GetBlockSize(uint32_t * blk_size)1353 static int32_t EFLASH0_MPC_GetBlockSize(uint32_t* blk_size)
1354 {
1355     enum mpc_sie200_error_t ret;
1356 
1357     ret = mpc_sie200_get_block_size(&MPC_EFLASH0_DEV, blk_size);
1358 
1359     return error_trans(ret);
1360 }
1361 
EFLASH0_MPC_GetCtrlConfig(uint32_t * ctrl_val)1362 static int32_t EFLASH0_MPC_GetCtrlConfig(uint32_t* ctrl_val)
1363 {
1364     enum mpc_sie200_error_t ret;
1365 
1366     ret = mpc_sie200_get_ctrl(&MPC_EFLASH0_DEV, ctrl_val);
1367 
1368     return error_trans(ret);
1369 }
1370 
EFLASH0_MPC_SetCtrlConfig(uint32_t ctrl)1371 static int32_t EFLASH0_MPC_SetCtrlConfig(uint32_t ctrl)
1372 {
1373     enum mpc_sie200_error_t ret;
1374 
1375     ret = mpc_sie200_set_ctrl(&MPC_EFLASH0_DEV, ctrl);
1376 
1377     return error_trans(ret);
1378 }
1379 
EFLASH0_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)1380 static int32_t EFLASH0_MPC_GetRegionConfig(uintptr_t base,
1381                                            uintptr_t limit,
1382                                            ARM_MPC_SEC_ATTR* attr)
1383 {
1384     enum mpc_sie200_error_t ret;
1385 
1386     ret = mpc_sie200_get_region_config(&MPC_EFLASH0_DEV, base, limit,
1387                                        (enum mpc_sie200_sec_attr_t*)attr);
1388 
1389     return error_trans(ret);
1390 }
1391 
EFLASH0_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)1392 static int32_t EFLASH0_MPC_ConfigRegion(uintptr_t base,
1393                                         uintptr_t limit,
1394                                         ARM_MPC_SEC_ATTR attr)
1395 {
1396     enum mpc_sie200_error_t ret;
1397 
1398     ret = mpc_sie200_config_region(&MPC_EFLASH0_DEV, base, limit,
1399                                    (enum mpc_sie200_sec_attr_t)attr);
1400 
1401     return error_trans(ret);
1402 }
1403 
EFLASH0_MPC_EnableInterrupt(void)1404 static int32_t EFLASH0_MPC_EnableInterrupt(void)
1405 {
1406     enum mpc_sie200_error_t ret;
1407 
1408     ret = mpc_sie200_irq_enable(&MPC_EFLASH0_DEV);
1409 
1410     return error_trans(ret);
1411 }
1412 
EFLASH0_MPC_DisableInterrupt(void)1413 static void EFLASH0_MPC_DisableInterrupt(void)
1414 {
1415     mpc_sie200_irq_disable(&MPC_EFLASH0_DEV);
1416 }
1417 
1418 
EFLASH0_MPC_ClearInterrupt(void)1419 static void EFLASH0_MPC_ClearInterrupt(void)
1420 {
1421     mpc_sie200_clear_irq(&MPC_EFLASH0_DEV);
1422 }
1423 
EFLASH0_MPC_InterruptState(void)1424 static uint32_t EFLASH0_MPC_InterruptState(void)
1425 {
1426     return mpc_sie200_irq_state(&MPC_EFLASH0_DEV);
1427 }
1428 
EFLASH0_MPC_LockDown(void)1429 static int32_t EFLASH0_MPC_LockDown(void)
1430 {
1431     return mpc_sie200_lock_down(&MPC_EFLASH0_DEV);
1432 }
1433 
1434 /* EFLASH0_MPC Driver CMSIS access structure */
1435 extern ARM_DRIVER_MPC Driver_EFLASH0_MPC;
1436 ARM_DRIVER_MPC Driver_EFLASH0_MPC = {
1437     .GetVersion       = ARM_MPC_GetVersion,
1438     .Initialize       = EFLASH0_MPC_Initialize,
1439     .Uninitialize     = EFLASH0_MPC_Uninitialize,
1440     .GetBlockSize     = EFLASH0_MPC_GetBlockSize,
1441     .GetCtrlConfig    = EFLASH0_MPC_GetCtrlConfig,
1442     .SetCtrlConfig    = EFLASH0_MPC_SetCtrlConfig,
1443     .ConfigRegion     = EFLASH0_MPC_ConfigRegion,
1444     .GetRegionConfig  = EFLASH0_MPC_GetRegionConfig,
1445     .EnableInterrupt  = EFLASH0_MPC_EnableInterrupt,
1446     .DisableInterrupt = EFLASH0_MPC_DisableInterrupt,
1447     .ClearInterrupt   = EFLASH0_MPC_ClearInterrupt,
1448     .InterruptState   = EFLASH0_MPC_InterruptState,
1449     .LockDown         = EFLASH0_MPC_LockDown,
1450 };
1451 #endif /* RTE_EFLASH0_MPC */
1452 
1453 #if (RTE_EFLASH1_MPC)
1454 /* Ranges controlled by this EFLASH1_MPC */
1455 static const struct mpc_sie200_memory_range_t MPC_EFLASH1_RANGE_S = {
1456     .base         = MPC_EFLASH1_RANGE_BASE_S,
1457     .limit        = MPC_EFLASH1_RANGE_LIMIT_S,
1458     .range_offset = 0,
1459     .attr         = MPC_SIE200_SEC_ATTR_SECURE
1460 };
1461 
1462 static const struct mpc_sie200_memory_range_t MPC_EFLASH1_RANGE_NS = {
1463     .base         = MPC_EFLASH1_RANGE_BASE_NS,
1464     .limit        = MPC_EFLASH1_RANGE_LIMIT_NS,
1465     .range_offset = 0,
1466     .attr         = MPC_SIE200_SEC_ATTR_NONSECURE
1467 };
1468 
1469 #define MPC_EFLASH1_RANGE_LIST_LEN  2u
1470 static const struct mpc_sie200_memory_range_t*
1471     MPC_EFLASH1_RANGE_LIST[MPC_EFLASH1_RANGE_LIST_LEN]=
1472     {&MPC_EFLASH1_RANGE_S, &MPC_EFLASH1_RANGE_NS};
1473 
1474 /* EFLASH1_MPC Driver wrapper functions */
EFLASH1_MPC_Initialize(void)1475 static int32_t EFLASH1_MPC_Initialize(void)
1476 {
1477     enum mpc_sie200_error_t ret;
1478 
1479     ret = mpc_sie200_init(&MPC_EFLASH1_DEV,
1480                           MPC_EFLASH1_RANGE_LIST,
1481                           MPC_EFLASH1_RANGE_LIST_LEN);
1482 
1483     return error_trans(ret);
1484 }
1485 
EFLASH1_MPC_Uninitialize(void)1486 static int32_t EFLASH1_MPC_Uninitialize(void)
1487 {
1488     /* Nothing to be done */
1489     return ARM_DRIVER_OK;
1490 }
1491 
EFLASH1_MPC_GetBlockSize(uint32_t * blk_size)1492 static int32_t EFLASH1_MPC_GetBlockSize(uint32_t* blk_size)
1493 {
1494     enum mpc_sie200_error_t ret;
1495 
1496     ret = mpc_sie200_get_block_size(&MPC_EFLASH1_DEV, blk_size);
1497 
1498     return error_trans(ret);
1499 }
1500 
EFLASH1_MPC_GetCtrlConfig(uint32_t * ctrl_val)1501 static int32_t EFLASH1_MPC_GetCtrlConfig(uint32_t* ctrl_val)
1502 {
1503     enum mpc_sie200_error_t ret;
1504 
1505     ret = mpc_sie200_get_ctrl(&MPC_EFLASH1_DEV, ctrl_val);
1506 
1507     return error_trans(ret);
1508 }
1509 
EFLASH1_MPC_SetCtrlConfig(uint32_t ctrl)1510 static int32_t EFLASH1_MPC_SetCtrlConfig(uint32_t ctrl)
1511 {
1512     enum mpc_sie200_error_t ret;
1513 
1514     ret = mpc_sie200_set_ctrl(&MPC_EFLASH1_DEV, ctrl);
1515 
1516     return error_trans(ret);
1517 }
1518 
EFLASH1_MPC_GetRegionConfig(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR * attr)1519 static int32_t EFLASH1_MPC_GetRegionConfig(uintptr_t base,
1520                                            uintptr_t limit,
1521                                            ARM_MPC_SEC_ATTR* attr)
1522 {
1523     enum mpc_sie200_error_t ret;
1524 
1525     ret = mpc_sie200_get_region_config(&MPC_EFLASH1_DEV, base, limit,
1526                                        (enum mpc_sie200_sec_attr_t*)attr);
1527 
1528     return error_trans(ret);
1529 }
1530 
EFLASH1_MPC_ConfigRegion(uintptr_t base,uintptr_t limit,ARM_MPC_SEC_ATTR attr)1531 static int32_t EFLASH1_MPC_ConfigRegion(uintptr_t base,
1532                                         uintptr_t limit,
1533                                         ARM_MPC_SEC_ATTR attr)
1534 {
1535     enum mpc_sie200_error_t ret;
1536 
1537     ret = mpc_sie200_config_region(&MPC_EFLASH1_DEV, base, limit,
1538                                    (enum mpc_sie200_sec_attr_t)attr);
1539 
1540     return error_trans(ret);
1541 }
1542 
EFLASH1_MPC_EnableInterrupt(void)1543 static int32_t EFLASH1_MPC_EnableInterrupt(void)
1544 {
1545     enum mpc_sie200_error_t ret;
1546 
1547     ret = mpc_sie200_irq_enable(&MPC_EFLASH1_DEV);
1548 
1549     return error_trans(ret);
1550 }
1551 
EFLASH1_MPC_DisableInterrupt(void)1552 static void EFLASH1_MPC_DisableInterrupt(void)
1553 {
1554     mpc_sie200_irq_disable(&MPC_EFLASH1_DEV);
1555 }
1556 
1557 
EFLASH1_MPC_ClearInterrupt(void)1558 static void EFLASH1_MPC_ClearInterrupt(void)
1559 {
1560     mpc_sie200_clear_irq(&MPC_EFLASH1_DEV);
1561 }
1562 
EFLASH1_MPC_InterruptState(void)1563 static uint32_t EFLASH1_MPC_InterruptState(void)
1564 {
1565     return mpc_sie200_irq_state(&MPC_EFLASH1_DEV);
1566 }
1567 
EFLASH1_MPC_LockDown(void)1568 static int32_t EFLASH1_MPC_LockDown(void)
1569 {
1570     return mpc_sie200_lock_down(&MPC_EFLASH1_DEV);
1571 }
1572 
1573 /* EFLASH1_MPC Driver CMSIS access structure */
1574 extern ARM_DRIVER_MPC Driver_EFLASH1_MPC;
1575 ARM_DRIVER_MPC Driver_EFLASH1_MPC = {
1576     .GetVersion       = ARM_MPC_GetVersion,
1577     .Initialize       = EFLASH1_MPC_Initialize,
1578     .Uninitialize     = EFLASH1_MPC_Uninitialize,
1579     .GetBlockSize     = EFLASH1_MPC_GetBlockSize,
1580     .GetCtrlConfig    = EFLASH1_MPC_GetCtrlConfig,
1581     .SetCtrlConfig    = EFLASH1_MPC_SetCtrlConfig,
1582     .ConfigRegion     = EFLASH1_MPC_ConfigRegion,
1583     .GetRegionConfig  = EFLASH1_MPC_GetRegionConfig,
1584     .EnableInterrupt  = EFLASH1_MPC_EnableInterrupt,
1585     .DisableInterrupt = EFLASH1_MPC_DisableInterrupt,
1586     .ClearInterrupt   = EFLASH1_MPC_ClearInterrupt,
1587     .InterruptState   = EFLASH1_MPC_InterruptState,
1588     .LockDown         = EFLASH1_MPC_LockDown,
1589 };
1590 #endif /* RTE_EFLASH1_MPC */
1591