aboutsummaryrefslogtreecommitdiff
path: root/include/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'include/arch/arm')
-rw-r--r--include/arch/arm/arch.h7
-rw-r--r--include/arch/arm/cortex-m4/mpu.h40
2 files changed, 47 insertions, 0 deletions
diff --git a/include/arch/arm/arch.h b/include/arch/arm/arch.h
index bf96fae..e4ebb8d 100644
--- a/include/arch/arm/arch.h
+++ b/include/arch/arm/arch.h
@@ -13,6 +13,12 @@
#define disable_all_interrupts() \
asm volatile(" cpsid i ")
+#define __isb() \
+ asm volatile(" isb ")
+
+#define __dsb() \
+ asm volatile(" dsb ")
+
#define DMA1_BASE (0x40020000)
#define DMA2_BASE (0x40020400)
@@ -36,6 +42,7 @@
#define SPI3_BASE (0x40003C00)
#define STACK_TOP (0x2000c000)
+#define MPU_BASE (0xE000ED90)
#include <stdint.h>
#ifndef DRY_RUN
diff --git a/include/arch/arm/cortex-m4/mpu.h b/include/arch/arm/cortex-m4/mpu.h
new file mode 100644
index 0000000..fedaf79
--- /dev/null
+++ b/include/arch/arm/cortex-m4/mpu.h
@@ -0,0 +1,40 @@
+#ifndef ARCH_ARM_CORTEX_M4_MPU_H_
+#define ARCH_ARM_CORTEX_M4_MPU_H_
+
+#include "arch.h"
+
+typedef volatile struct {
+ volatile uint32_t type_r;
+#define mpu_en (1 << 0)
+ volatile uint32_t ctrl_r;
+ volatile uint32_t rn_r;
+
+ /**
+ * On the ARM Cortex-M4 processor, the
+ */
+ volatile union {
+#define mpu_size (0x1F << 1)
+#define mpu_srd (0xFF << 8)
+#define mpu_b (1 << 16)
+#define mpu_c (1 << 17)
+#define mpu_s (1 << 18)
+#define mpu_tex (7 << 19)
+#define mpu_ap (3 << 24)
+#define mpu_xn (1 << 28)
+
+#define mpu_valid (1 << 4)
+#define mpu_region (0xF << 0)
+ struct {
+ uint32_t rba_r;
+ uint32_t ras_r;
+ };
+ struct {
+ uint32_t rba_r;
+ uint32_t ras_r;
+ } aliased[4];
+ };
+} mpu_t;
+
+#define MPU (*((mpu_t*)(MPU_BASE)))
+
+#endif /* ARCH_ARM_CORTEX_M4_MPU_H_ */