diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-10 12:21:24 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-10 16:58:03 +0100 |
commit | 0df8d7f20d1e1e0cddf52f3338989f4fdf2cd8ad (patch) | |
tree | c13e559b3774f5e08eb6778f74f1137325bf1ffe /c/src/lib/libbsp/arm/shared/include | |
parent | bsps/arm: Include missing header file (diff) | |
download | rtems-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.h | 16 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/shared/include/arm-a9mpcore-start.h | 11 |
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(); } |