diff --git a/plat/juno/bl31_plat_setup.c b/plat/juno/bl31_plat_setup.c index 2eac0fb..9489804 100644 --- a/plat/juno/bl31_plat_setup.c +++ b/plat/juno/bl31_plat_setup.c @@ -136,11 +136,25 @@ ******************************************************************************/ void bl31_platform_setup(void) { + unsigned int reg_val; + mhu_secure_init(); /* Initialize the gic cpu and distributor interfaces */ gic_setup(); + /* Enable and initialize the System level generic timer */ + mmio_write_32(SYS_CNTCTL_BASE + CNTCR_OFF, CNTCR_FCREQ(0) | CNTCR_EN); + + /* Allow access to the System counter timer module */ + reg_val = (1 << CNTACR_RPCT_SHIFT) | (1 << CNTACR_RVCT_SHIFT); + reg_val |= (1 << CNTACR_RFRQ_SHIFT) | (1 << CNTACR_RVOFF_SHIFT); + reg_val |= (1 << CNTACR_RWVT_SHIFT) | (1 << CNTACR_RWPT_SHIFT); + mmio_write_32(SYS_TIMCTL_BASE + CNTACR_BASE(1), reg_val); + + reg_val = (1 << CNTNSAR_NS_SHIFT(1)); + mmio_write_32(SYS_TIMCTL_BASE + CNTNSAR, reg_val); + /* Topologies are best known to the platform. */ plat_setup_topology(); } diff --git a/plat/juno/juno_def.h b/plat/juno/juno_def.h index 6b3ba57..96e16f0 100644 --- a/plat/juno/juno_def.h +++ b/plat/juno/juno_def.h @@ -75,6 +75,8 @@ /* Memory mapped Generic timer interfaces */ #define SYS_CNTCTL_BASE 0x2a430000 +#define SYS_CNTREAD_BASE 0x2a800000 +#define SYS_TIMCTL_BASE 0x2a810000 /* V2M motherboard system registers & offsets */ #define VE_SYSREGS_BASE 0x1c010000