111bc7557SVitaly Andrianov /* 211bc7557SVitaly Andrianov * (C) Copyright 2012-2014 311bc7557SVitaly Andrianov * Texas Instruments Incorporated, <www.ti.com> 411bc7557SVitaly Andrianov * 511bc7557SVitaly Andrianov * SPDX-License-Identifier: GPL-2.0+ 611bc7557SVitaly Andrianov */ 711bc7557SVitaly Andrianov 811bc7557SVitaly Andrianov #include <common.h> 911bc7557SVitaly Andrianov #include <asm/io.h> 1011bc7557SVitaly Andrianov #include <div64.h> 1191558c81SPatrick Delaunay #include <bootstage.h> 1211bc7557SVitaly Andrianov 1311bc7557SVitaly Andrianov DECLARE_GLOBAL_DATA_PTR; 1411bc7557SVitaly Andrianov timer_init(void)1511bc7557SVitaly Andrianovint timer_init(void) 1611bc7557SVitaly Andrianov { 1711bc7557SVitaly Andrianov gd->arch.tbl = 0; 1811bc7557SVitaly Andrianov gd->arch.tbu = 0; 19*13ceb2afSXuhui Lin #ifdef CONFIG_SYS_HZ_CLOCK 20dd239d30SPatrick Delaunay gd->arch.timer_rate_hz = CONFIG_SYS_HZ_CLOCK; 21*13ceb2afSXuhui Lin #endif 2211bc7557SVitaly Andrianov return 0; 2311bc7557SVitaly Andrianov } 2411bc7557SVitaly Andrianov get_ticks(void)2511bc7557SVitaly Andrianovunsigned long long get_ticks(void) 2611bc7557SVitaly Andrianov { 2711bc7557SVitaly Andrianov ulong nowl, nowu; 2811bc7557SVitaly Andrianov 2911bc7557SVitaly Andrianov asm volatile("mrrc p15, 0, %0, %1, c14" : "=r" (nowl), "=r" (nowu)); 3011bc7557SVitaly Andrianov 3111bc7557SVitaly Andrianov gd->arch.tbl = nowl; 3211bc7557SVitaly Andrianov gd->arch.tbu = nowu; 3311bc7557SVitaly Andrianov 3411bc7557SVitaly Andrianov return (((unsigned long long)gd->arch.tbu) << 32) | gd->arch.tbl; 3511bc7557SVitaly Andrianov } 3611bc7557SVitaly Andrianov 3711bc7557SVitaly Andrianov timer_get_boot_us(void)3891558c81SPatrick Delaunayulong timer_get_boot_us(void) 3991558c81SPatrick Delaunay { 40*13ceb2afSXuhui Lin return lldiv(get_ticks(), gd->arch.timer_rate_hz / 1000000); 4111bc7557SVitaly Andrianov } 4211bc7557SVitaly Andrianov get_tbclk(void)4311bc7557SVitaly Andrianovulong get_tbclk(void) 4411bc7557SVitaly Andrianov { 45*13ceb2afSXuhui Lin #ifdef CONFIG_SYS_HZ_CLOCK 4670199900SXuhui Lin return gd->arch.timer_rate_hz ? : CONFIG_SYS_HZ_CLOCK; 47*13ceb2afSXuhui Lin #else 48*13ceb2afSXuhui Lin return gd->arch.timer_rate_hz; 49*13ceb2afSXuhui Lin #endif 5011bc7557SVitaly Andrianov } 51