summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-19 11:20:06 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-20 10:15:10 +0200
commit9a037da9664793334cc5da4447a0b1232dc2e1ff (patch)
tree0da45fe0db84a3b62c8fcdad276d34d4f554ee4e /c/src/lib/libcpu/arm/shared/include/arm-cp15.h
parentgreth: do not advertise 1000M capability if MAC does not support it. (diff)
downloadrtems-9a037da9664793334cc5da4447a0b1232dc2e1ff.tar.bz2
bsps/arm: Set vector base address if necessary
Diffstat (limited to 'c/src/lib/libcpu/arm/shared/include/arm-cp15.h')
-rw-r--r--c/src/lib/libcpu/arm/shared/include/arm-cp15.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/arm/shared/include/arm-cp15.h b/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
index 6d7cf394cd..3f032f22c1 100644
--- a/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
+++ b/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
@@ -899,6 +899,53 @@ static inline void arm_cp15_set_auxiliary_control(uint32_t val)
);
}
+/* ID_PFR1, Processor Feature Register 1 */
+
+static inline uint32_t arm_cp15_get_processor_feature_1(void)
+{
+ ARM_SWITCH_REGISTERS;
+ uint32_t val;
+
+ __asm__ volatile (
+ ARM_SWITCH_TO_ARM
+ "mrc p15, 0, %[val], c0, c1, 1\n"
+ ARM_SWITCH_BACK
+ : [val] "=&r" (val) ARM_SWITCH_ADDITIONAL_OUTPUT
+ );
+
+ return val;
+}
+
+/* VBAR, Vector Base Address Register, Security Extensions */
+
+static inline void *arm_cp15_get_vector_base_address(void)
+{
+ ARM_SWITCH_REGISTERS;
+ void *base;
+
+ __asm__ volatile (
+ ARM_SWITCH_TO_ARM
+ "mrc p15, 0, %[base], c12, c0, 0\n"
+ ARM_SWITCH_BACK
+ : [base] "=&r" (base) ARM_SWITCH_ADDITIONAL_OUTPUT
+ );
+
+ return base;
+}
+
+static inline void arm_cp15_set_vector_base_address(void *base)
+{
+ ARM_SWITCH_REGISTERS;
+
+ __asm__ volatile (
+ ARM_SWITCH_TO_ARM
+ "mcr p15, 0, %[base], c12, c0, 0\n"
+ ARM_SWITCH_BACK
+ : ARM_SWITCH_OUTPUT
+ : [base] "r" (base)
+ );
+}
+
/**
* @brief Sets the @a section_flags for the address range [@a begin, @a end).
*