diff --git a/plat/juno/aarch64/plat_common.c b/plat/juno/aarch64/plat_common.c
index 0011cb7aadaa44d40d806f754f963535a3bd4b8f..a3ecb005fc9608f855a956cf0e744c5832da08f5 100644
--- a/plat/juno/aarch64/plat_common.c
+++ b/plat/juno/aarch64/plat_common.c
@@ -31,7 +31,7 @@
 #include <arch_helpers.h>
 #include <platform.h>
 #include <xlat_tables.h>
-
+#include <assert.h>
 
 unsigned char platform_normal_stacks[PLATFORM_STACK_SIZE][PLATFORM_CORE_COUNT]
 __attribute__ ((aligned(PLATFORM_CACHE_LINE_SIZE),
@@ -133,3 +133,16 @@ unsigned long plat_get_ns_image_entrypoint(void)
 {
 	return NS_IMAGE_OFFSET;
 }
+
+uint64_t plat_get_syscnt_freq(void)
+{
+	uint64_t counter_base_frequency;
+
+	/* 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);
+
+	return counter_base_frequency;
+}
diff --git a/plat/juno/bl1_plat_setup.c b/plat/juno/bl1_plat_setup.c
index 7fe96f2bb4aa0bbe71223ee997b2f595bd9c4c3b..91c0caf984eeed03a819e6a11692b11fd334eb91 100644
--- a/plat/juno/bl1_plat_setup.c
+++ b/plat/juno/bl1_plat_setup.c
@@ -208,7 +208,7 @@ void bl1_platform_setup(void)
 	io_setup();
 
 	/* Enable and initialize the System level generic timer */
-	mmio_write_32(SYS_CNTCTL_BASE + CNTCR_OFF, CNTCR_EN);
+	mmio_write_32(SYS_CNTCTL_BASE + CNTCR_OFF, CNTCR_FCREQ(0) | CNTCR_EN);
 }
 
 
diff --git a/plat/juno/platform.h b/plat/juno/platform.h
index dfcffff9262c0fb44dc5c60571e9aa3c860e0882..fcf63b7ce7d157160b240d417bcae7ea23dee0b4 100644
--- a/plat/juno/platform.h
+++ b/plat/juno/platform.h
@@ -335,6 +335,7 @@ extern void configure_mmu(meminfo *,
 extern void plat_report_exception(unsigned long);
 extern unsigned long plat_get_ns_image_entrypoint(void);
 extern unsigned long platform_get_stack(unsigned long mpidr);
+extern uint64_t plat_get_syscnt_freq(void);
 
 /* Declarations for fvp_gic.c */
 extern void gic_cpuif_deactivate(unsigned int);