summaryrefslogtreecommitdiff
path: root/plat/fvp/bl1_plat_setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'plat/fvp/bl1_plat_setup.c')
-rw-r--r--plat/fvp/bl1_plat_setup.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/plat/fvp/bl1_plat_setup.c b/plat/fvp/bl1_plat_setup.c
index d4fd81b2..b0c011eb 100644
--- a/plat/fvp/bl1_plat_setup.c
+++ b/plat/fvp/bl1_plat_setup.c
@@ -112,11 +112,25 @@ void bl1_early_platform_setup(void)
******************************************************************************/
void bl1_platform_setup(void)
{
+ unsigned int counter_base_frequency;
+
/* Initialise the IO layer and register platform IO devices */
io_setup();
- /* Enable and initialize the System level generic timer */
- mmio_write_32(SYS_CNTCTL_BASE + CNTCR_OFF, CNTCR_EN);
+ /*
+ * Enable and initialize the System level generic timer. Choose base
+ * frequency for the timer
+ */
+ mmio_write_32(SYS_CNTCTL_BASE + CNTCR_OFF, CNTCR_FCREQ(0) | CNTCR_EN);
+
+ /* Read the frequency from Frequency modes table */
+ counter_base_frequency = mmio_read_32(SYS_CNTCTL_BASE + CNTFID_OFF);
+
+ /* The first entry of the frequency modes table must not be 0 */
+ assert(counter_base_frequency != 0);
+
+ /* Program the counter frequency */
+ write_cntfrq_el0(counter_base_frequency);
}