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>
This commit is contained in:
Patrick Delaunay 2018-03-20 11:41:23 +01:00 committed by Tom Rini
parent f3d8f7dd73
commit 46fc679ede

View file

@ -12,12 +12,26 @@
DECLARE_GLOBAL_DATA_PTR; 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) int timer_init(void)
{ {
gd->arch.tbl = 0; gd->arch.tbl = 0;
gd->arch.tbu = 0; gd->arch.tbu = 0;
#ifdef CONFIG_SYS_HZ_CLOCK
gd->arch.timer_rate_hz = CONFIG_SYS_HZ_CLOCK; gd->arch.timer_rate_hz = CONFIG_SYS_HZ_CLOCK;
#else
gd->arch.timer_rate_hz = read_cntfrq();
#endif
return 0; return 0;
} }
@ -36,7 +50,7 @@ unsigned long long get_ticks(void)
ulong timer_get_boot_us(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) ulong get_tbclk(void)