X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=arch%2Farm%2Fcpu%2Farmv7%2Farch_timer.c;h=5de63053d5934ad8c3fac1dcf27273c014e4a4eb;hb=c18b103657d9541305a45a1fb21f979c317fba49;hp=0588e2baef5ed10b69f7c271f5c19419770c4881;hpb=4180b3dba25c2c28cc4502f1c9f1cbad2a9972b8;p=platform%2Fkernel%2Fu-boot.git diff --git a/arch/arm/cpu/armv7/arch_timer.c b/arch/arm/cpu/armv7/arch_timer.c index 0588e2b..5de6305 100644 --- a/arch/arm/cpu/armv7/arch_timer.c +++ b/arch/arm/cpu/armv7/arch_timer.c @@ -1,23 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2012-2014 * Texas Instruments Incorporated, - * - * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include +#include 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; - gd->arch.timer_rate_hz = CONFIG_SYS_HZ_CLOCK / CONFIG_SYS_HZ; - +#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; } @@ -34,22 +47,12 @@ unsigned long long get_ticks(void) } -ulong get_timer(ulong base) +ulong timer_get_boot_us(void) { - return lldiv(get_ticks(), gd->arch.timer_rate_hz) - base; -} - -void __udelay(unsigned long usec) -{ - unsigned long long endtime; - - endtime = lldiv((unsigned long long)usec * gd->arch.timer_rate_hz, - 1000UL); - - endtime += get_ticks(); + if (!gd->arch.timer_rate_hz) + timer_init(); - while (get_ticks() < endtime) - ; + return lldiv(get_ticks(), gd->arch.timer_rate_hz / 1000000); } ulong get_tbclk(void)