summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/shared/include
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-10 12:21:24 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-10 16:58:03 +0100
commit0df8d7f20d1e1e0cddf52f3338989f4fdf2cd8ad (patch)
treec13e559b3774f5e08eb6778f74f1137325bf1ffe /c/src/lib/libbsp/arm/shared/include
parentbsps/arm: Include missing header file (diff)
downloadrtems-0df8d7f20d1e1e0cddf52f3338989f4fdf2cd8ad.tar.bz2
bsps/arm: Use Global Timer for Cortex-A9 MPCore
Use the Global Timer for the Cortex-A9 MPCore clock driver instead of the Private Timer. This enables a consistent nanoseconds since last context switch value across all processors.
Diffstat (limited to 'c/src/lib/libbsp/arm/shared/include')
-rw-r--r--c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-regs.h16
-rw-r--r--c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-start.h11
2 files changed, 23 insertions, 4 deletions
diff --git a/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-regs.h b/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-regs.h
index 86bdcb2d20..0910e4c5b2 100644
--- a/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-regs.h
+++ b/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-regs.h
@@ -58,12 +58,20 @@ typedef struct {
} a9mpcore_gic;
typedef struct {
- uint32_t cntr;
- uint32_t reserved_04;
+ uint32_t cntrlower;
+ uint32_t cntrupper;
+#define A9MPCORE_GT_CTRL_PRESCALER(val) BSP_FLD32(val, 8, 15)
+#define A9MPCORE_GT_CTRL_PRESCALER_GET(reg) BSP_FLD32GET(reg, 8, 15)
+#define A9MPCORE_GT_CTRL_PRESCALER_SET(reg, val) BSP_FLD32SET(reg, val, 8, 15)
+#define A9MPCORE_GT_CTRL_AUTOINC_EN BSP_BIT32(3)
+#define A9MPCORE_GT_CTRL_IRQ_EN BSP_BIT32(2)
+#define A9MPCORE_GT_CTRL_COMP_EN BSP_BIT32(1)
+#define A9MPCORE_GT_CTRL_TMR_EN BSP_BIT32(0)
uint32_t ctrl;
+#define A9MPCORE_GT_IRQST_EFLG BSP_BIT32(0)
uint32_t irqst;
- uint32_t cmpval;
- uint32_t reserved_14;
+ uint32_t cmpvallower;
+ uint32_t cmpvalupper;
uint32_t autoinc;
} a9mpcore_gt;
diff --git a/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-start.h b/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-start.h
index a62dcdaf83..9ebc5a5cac 100644
--- a/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-start.h
+++ b/c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-start.h
@@ -120,8 +120,19 @@ BSP_START_TEXT_SECTION static inline arm_a9mpcore_start_hook_0(void)
#endif
}
+BSP_START_TEXT_SECTION static inline arm_a9mpcore_start_global_timer(void)
+{
+ volatile a9mpcore_gt *gt = (volatile a9mpcore_gt *) BSP_ARM_A9MPCORE_GT_BASE;
+
+ gt->ctrl = 0;
+ gt->cntrlower = 0;
+ gt->cntrupper = 0;
+ gt->ctrl = A9MPCORE_GT_CTRL_TMR_EN;
+}
+
BSP_START_TEXT_SECTION static inline arm_a9mpcore_start_hook_1(void)
{
+ arm_a9mpcore_start_global_timer();
arm_a9mpcore_start_set_vector_base();
}