blob: c6f738b166175701654c5cb5eca4eddb350f93c1 [file] [log] [blame]
Andrzej Puzdrowski9a605b62020-03-16 13:34:30 +01001/*
2 * Copyright (c) 2020 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
Piotr Mienkowskia5046692020-04-02 01:41:54 +02007#include <arch/arm/aarch32/cortex_m/cmsis.h>
Henrik Brix Andersen008f4a72020-12-08 14:40:19 +01008#include <toolchain.h>
9
10#if CONFIG_CPU_HAS_NXP_MPU
11#include <fsl_sysmpu.h>
12#endif
Andrzej Puzdrowski9a605b62020-03-16 13:34:30 +010013
14void cleanup_arm_nvic(void) {
15 /* Allow any pending interrupts to be recognized */
16 __ISB();
17 __disable_irq();
18
19 /* Disable NVIC interrupts */
Kumar Gala0813efe2020-05-27 12:25:41 -050020 for (uint8_t i = 0; i < ARRAY_SIZE(NVIC->ICER); i++) {
Andrzej Puzdrowski9a605b62020-03-16 13:34:30 +010021 NVIC->ICER[i] = 0xFFFFFFFF;
22 }
23 /* Clear pending NVIC interrupts */
Kumar Gala0813efe2020-05-27 12:25:41 -050024 for (uint8_t i = 0; i < ARRAY_SIZE(NVIC->ICPR); i++) {
Andrzej Puzdrowski9a605b62020-03-16 13:34:30 +010025 NVIC->ICPR[i] = 0xFFFFFFFF;
26 }
27}
Ioannis Glaropoulos70af7082020-10-22 15:14:48 +020028
Andrzej Puzdrowskic74c5512020-10-29 13:59:35 +010029#if CONFIG_CPU_HAS_ARM_MPU
Ioannis Glaropoulos70af7082020-10-22 15:14:48 +020030__weak void z_arm_clear_arm_mpu_config(void)
31{
32 int i;
33
34 int num_regions =
35 ((MPU->TYPE & MPU_TYPE_DREGION_Msk) >> MPU_TYPE_DREGION_Pos);
36
37 for (i = 0; i < num_regions; i++) {
38 ARM_MPU_ClrRegion(i);
39 }
40}
Henrik Brix Andersen008f4a72020-12-08 14:40:19 +010041#elif CONFIG_CPU_HAS_NXP_MPU
42__weak void z_arm_clear_arm_mpu_config(void)
43{
44 int i;
45
46 int num_regions = FSL_FEATURE_SYSMPU_DESCRIPTOR_COUNT;
47
48 SYSMPU_Enable(SYSMPU, false);
49
50 /* NXP MPU region 0 is reserved for the debugger */
51 for (i = 1; i < num_regions; i++) {
52 SYSMPU_RegionEnable(SYSMPU, i, false);
53 }
54}
Andrzej Puzdrowskic74c5512020-10-29 13:59:35 +010055#endif