Andrzej Puzdrowski | 9a605b6 | 2020-03-16 13:34:30 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2020 Nordic Semiconductor ASA |
| 3 | * |
| 4 | * SPDX-License-Identifier: Apache-2.0 |
| 5 | */ |
| 6 | |
Piotr Mienkowski | a504669 | 2020-04-02 01:41:54 +0200 | [diff] [blame] | 7 | #include <arch/arm/aarch32/cortex_m/cmsis.h> |
Henrik Brix Andersen | 008f4a7 | 2020-12-08 14:40:19 +0100 | [diff] [blame] | 8 | #include <toolchain.h> |
| 9 | |
| 10 | #if CONFIG_CPU_HAS_NXP_MPU |
| 11 | #include <fsl_sysmpu.h> |
| 12 | #endif |
Andrzej Puzdrowski | 9a605b6 | 2020-03-16 13:34:30 +0100 | [diff] [blame] | 13 | |
| 14 | void cleanup_arm_nvic(void) { |
| 15 | /* Allow any pending interrupts to be recognized */ |
| 16 | __ISB(); |
| 17 | __disable_irq(); |
| 18 | |
| 19 | /* Disable NVIC interrupts */ |
Kumar Gala | 0813efe | 2020-05-27 12:25:41 -0500 | [diff] [blame] | 20 | for (uint8_t i = 0; i < ARRAY_SIZE(NVIC->ICER); i++) { |
Andrzej Puzdrowski | 9a605b6 | 2020-03-16 13:34:30 +0100 | [diff] [blame] | 21 | NVIC->ICER[i] = 0xFFFFFFFF; |
| 22 | } |
| 23 | /* Clear pending NVIC interrupts */ |
Kumar Gala | 0813efe | 2020-05-27 12:25:41 -0500 | [diff] [blame] | 24 | for (uint8_t i = 0; i < ARRAY_SIZE(NVIC->ICPR); i++) { |
Andrzej Puzdrowski | 9a605b6 | 2020-03-16 13:34:30 +0100 | [diff] [blame] | 25 | NVIC->ICPR[i] = 0xFFFFFFFF; |
| 26 | } |
| 27 | } |
Ioannis Glaropoulos | 70af708 | 2020-10-22 15:14:48 +0200 | [diff] [blame] | 28 | |
Andrzej Puzdrowski | c74c551 | 2020-10-29 13:59:35 +0100 | [diff] [blame] | 29 | #if CONFIG_CPU_HAS_ARM_MPU |
Ioannis Glaropoulos | 70af708 | 2020-10-22 15:14:48 +0200 | [diff] [blame] | 30 | __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 Andersen | 008f4a7 | 2020-12-08 14:40:19 +0100 | [diff] [blame] | 41 | #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 Puzdrowski | c74c551 | 2020-10-29 13:59:35 +0100 | [diff] [blame] | 55 | #endif |