diff options
author | Patrick Delaunay <patrick.delaunay@st.com> | 2018-03-20 11:41:23 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-04-06 20:45:28 -0400 |
commit | 46fc679ede5f692a6848f7f4d36f6404c3855971 (patch) | |
tree | b9b382f36853836c3b89e8f44e5df85f1b530f21 /arch | |
parent | f3d8f7dd73ac5dde258eb786d4a01869395b56d7 (diff) | |
download | u-boot-46fc679ede5f692a6848f7f4d36f6404c3855971.tar.gz u-boot-46fc679ede5f692a6848f7f4d36f6404c3855971.tar.xz u-boot-46fc679ede5f692a6848f7f4d36f6404c3855971.zip |
arm: timer: get frequency for arch timer armv7 in cp15 cntfrq
Manage dynamic value for armv7 arch clock timer,
when CONFIG_SYS_HZ_CLOCK is not defined.
Get frequency from CP15 cntfrq information, initialized for example
by first boot stage, clock driver or by BootRom.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/cpu/armv7/arch_timer.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/arm/cpu/armv7/arch_timer.c b/arch/arm/cpu/armv7/arch_timer.c index 545c518506..3bcb944ec4 100644 --- a/arch/arm/cpu/armv7/arch_timer.c +++ b/arch/arm/cpu/armv7/arch_timer.c @@ -12,12 +12,26 @@ DECLARE_GLOBAL_DATA_PTR; +#ifndef CONFIG_SYS_HZ_CLOCK +static inline u32 read_cntfrq(void) +{ + u32 frq; + + asm volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (frq)); + return frq; +} +#endif + int timer_init(void) { gd->arch.tbl = 0; gd->arch.tbu = 0; +#ifdef CONFIG_SYS_HZ_CLOCK gd->arch.timer_rate_hz = CONFIG_SYS_HZ_CLOCK; +#else + gd->arch.timer_rate_hz = read_cntfrq(); +#endif return 0; } @@ -36,7 +50,7 @@ unsigned long long get_ticks(void) ulong timer_get_boot_us(void) { - return lldiv(get_ticks(), CONFIG_SYS_HZ_CLOCK / 1000000); + return lldiv(get_ticks(), gd->arch.timer_rate_hz / 1000000); } ulong get_tbclk(void) |