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);