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