From 305680329ce04ed0a47a4368727cf7a74a7ef5dd Mon Sep 17 00:00:00 2001
From: Jon Medhurst <tixy@linaro.org>
Date: Mon, 10 Mar 2014 15:23:09 +0000
Subject: [PATCH] juno: Initialise architected timer in BL3-1

---
 plat/juno/bl31_plat_setup.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/plat/juno/bl31_plat_setup.c b/plat/juno/bl31_plat_setup.c
index ffdfdd454..c2c7ff88e 100644
--- a/plat/juno/bl31_plat_setup.c
+++ b/plat/juno/bl31_plat_setup.c
@@ -29,6 +29,8 @@
  */
 
 #include <platform.h>
+#include <assert.h>
+#include <arch_helpers.h>
 
 /*******************************************************************************
  * Declarations of linker defined symbols which will help us find the layout
@@ -120,9 +122,19 @@ void bl31_early_platform_setup(bl31_args *from_bl2,
  ******************************************************************************/
 void bl31_platform_setup()
 {
+	unsigned int counter_base_frequency;
 	/* Initialize the gic cpu and distributor interfaces */
 	gic_setup();
 
+	/* 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);
+
 	/* Topologies are best known to the platform. */
 	plat_setup_topology();
 }
-- 
GitLab