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 <pgeorgi@chromium.org>
Original-Commit-Id: 253cd3c68bb4513ae2033c12c2f070ee391e5a13
Original-Change-Id: I71068dbdd00a719145410ef6ec466f001ae837ad
Original-Signed-off-by: Joseph Lo <josephl@nvidia.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/264244
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/9915
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Joseph Lo 2015-04-07 14:49:22 +08:00 committed by Patrick Georgi
parent e1741c512c
commit d1a21d7d71
2 changed files with 15 additions and 0 deletions

View File

@ -20,6 +20,7 @@
#include <stdint.h> #include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
#include <arch/cache.h> #include <arch/cache.h>
#include <arch/cpu.h>
#include <arch/lib_helpers.h> #include <arch/lib_helpers.h>
#include <cpu/cpu.h> #include <cpu/cpu.h>
#include <console/console.h> #include <console/console.h>
@ -27,6 +28,11 @@
#include <timer.h> #include <timer.h>
#include "cpu-internal.h" #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) static inline void cpu_disable_dev(device_t dev)
{ {
dev->enabled = 0; 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. * TTA [28] = 0, disable traps for trace register access from EL0/EL1.
*/ */
raw_write_cpacr_el1(CPACR_TRAP_FP_DISABLE | CPACR_TTA_DISABLE); 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. */ /* Fill in cpu_info structures according to device tree. */

View File

@ -181,4 +181,10 @@ void arm64_cpu_startup(void);
*/ */
void arm64_cpu_startup_resume(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__ */ #endif /* __ARCH_CPU_H__ */