From d1a21d7d7182a40f06f8ec4ff216454fd3c8c1cc Mon Sep 17 00:00:00 2001 From: Joseph Lo Date: Tue, 7 Apr 2015 14:49:22 +0800 Subject: [PATCH] arm64: add arm64_arch_timer_init function Add arm64_arch_timer_init function which should be called per CPU for setting up the cntfrq register of arch timer. During the Linux kernel bring up time, it will check the cntfrq register per CPU and should be the same with the boot CPU. BRANCH=none BUG=none TEST=bring up 4 cores in Linux kernel without warning message of cntfrq register value Change-Id: I9cb33a54c2c8f9115bbe545a2338ca8e249b8db6 Signed-off-by: Patrick Georgi Original-Commit-Id: 253cd3c68bb4513ae2033c12c2f070ee391e5a13 Original-Change-Id: I71068dbdd00a719145410ef6ec466f001ae837ad Original-Signed-off-by: Joseph Lo Original-Reviewed-on: https://chromium-review.googlesource.com/264244 Original-Reviewed-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/9915 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- src/arch/arm64/cpu_ramstage.c | 9 +++++++++ src/arch/arm64/include/armv8/arch/cpu.h | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/src/arch/arm64/cpu_ramstage.c b/src/arch/arm64/cpu_ramstage.c index 369bae3c11..d105b0cfd6 100644 --- a/src/arch/arm64/cpu_ramstage.c +++ b/src/arch/arm64/cpu_ramstage.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,11 @@ #include #include "cpu-internal.h" +void __attribute__((weak)) arm64_arch_timer_init(void) +{ + /* Default weak implementation does nothing. */ +} + static inline void cpu_disable_dev(device_t dev) { dev->enabled = 0; @@ -136,6 +142,9 @@ static void init_this_cpu(void *arg) * TTA [28] = 0, disable traps for trace register access from EL0/EL1. */ raw_write_cpacr_el1(CPACR_TRAP_FP_DISABLE | CPACR_TTA_DISABLE); + + /* Arch Timer init: setup cntfrq per CPU */ + arm64_arch_timer_init(); } /* Fill in cpu_info structures according to device tree. */ diff --git a/src/arch/arm64/include/armv8/arch/cpu.h b/src/arch/arm64/include/armv8/arch/cpu.h index 34220d9792..14635e39c0 100644 --- a/src/arch/arm64/include/armv8/arch/cpu.h +++ b/src/arch/arm64/include/armv8/arch/cpu.h @@ -181,4 +181,10 @@ void arm64_cpu_startup(void); */ void arm64_cpu_startup_resume(void); +/* + * The arm64_arch_timer_init() initializes the per CPU's cntfrq register of + * ARM arch timer. + */ +void arm64_arch_timer_init(void); + #endif /* __ARCH_CPU_H__ */