From ae15fec0b8ca7578ee56e2d1d9579922bb1ec0b6 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Thu, 29 Mar 2018 11:41:01 +0200 Subject: soc/cavium/cn81xx: Set cntfrq_el0 Set cntfrq_el0 to provide correct timer frequency. Change-Id: I4b6d0b0cf646a066fc5a51552a1891eccbd91e5e Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/25450 Reviewed-by: David Hendricks Tested-by: build bot (Jenkins) --- src/mainboard/cavium/cn8100_sff_evb/mainboard.c | 3 +++ src/soc/cavium/cn81xx/include/soc/timer.h | 3 +++ src/soc/cavium/cn81xx/timer.c | 11 +++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mainboard/cavium/cn8100_sff_evb/mainboard.c b/src/mainboard/cavium/cn8100_sff_evb/mainboard.c index 135d608cdb..34d2529fdf 100644 --- a/src/mainboard/cavium/cn8100_sff_evb/mainboard.c +++ b/src/mainboard/cavium/cn8100_sff_evb/mainboard.c @@ -88,6 +88,9 @@ static void mainboard_init(struct device *dev) if (!uart_is_enabled(i)) uart_setup(i, 0); } + + /* Init timer */ + soc_timer_init(); } static void mainboard_enable(struct device *dev) diff --git a/src/soc/cavium/cn81xx/include/soc/timer.h b/src/soc/cavium/cn81xx/include/soc/timer.h index a12f68e422..4507b0b49f 100644 --- a/src/soc/cavium/cn81xx/include/soc/timer.h +++ b/src/soc/cavium/cn81xx/include/soc/timer.h @@ -27,4 +27,7 @@ void watchdog_poke(const size_t index); void watchdog_disable(const size_t index); int watchdog_is_running(const size_t index); +/* Timer functions */ +void soc_timer_init(void); + #endif /* __SOC_CAVIUM_CN81XX_TIMER_H__ */ diff --git a/src/soc/cavium/cn81xx/timer.c b/src/soc/cavium/cn81xx/timer.c index 0321a49ad9..b1c2285b6d 100644 --- a/src/soc/cavium/cn81xx/timer.c +++ b/src/soc/cavium/cn81xx/timer.c @@ -25,6 +25,7 @@ #include #include #include +#include /* Global System Timers Unit (GTI) registers */ struct cn81xx_timer { @@ -97,6 +98,9 @@ void timer_monotonic_get(struct mono_time *mt) mono_time_set_usecs(mt, timer_raw_value()); } +/* Setup counter to operate at 1MHz */ +static const size_t tickrate = 1000000; + /** * Init Global System Timers Unit (GTI). * Configure timer to run at 1MHz tick-rate. @@ -114,8 +118,6 @@ void init_timer(void) /* Use coprocessor clock source */ write32(>i->cc_imp_ctl, 0); - /* Setup counter to operate at 1MHz */ - const size_t tickrate = 1000000; write32(>i->cc_cntfid0, tickrate); write32(>i->ctl_cntfrq, tickrate); write32(>i->cc_cntrate, ((1ULL << 32) * tickrate) / sclk); @@ -127,6 +129,11 @@ void init_timer(void) //BDK_MSR(CNTPS_CTL_EL1, u); } +void soc_timer_init(void) +{ + set_cntfrq(tickrate); +} + /** * Setup the watchdog to expire in timeout_ms milliseconds. When the watchdog * expires, the chip three things happen: -- cgit v1.2.3