1*0ae76531SDavid Feng /* 2*0ae76531SDavid Feng * (C) Copyright 2013 3*0ae76531SDavid Feng * David Feng <fenghua@phytium.com.cn> 4*0ae76531SDavid Feng * 5*0ae76531SDavid Feng * SPDX-License-Identifier: GPL-2.0+ 6*0ae76531SDavid Feng */ 7*0ae76531SDavid Feng 8*0ae76531SDavid Feng #include <common.h> 9*0ae76531SDavid Feng #include <command.h> 10*0ae76531SDavid Feng #include <asm/system.h> 11*0ae76531SDavid Feng 12*0ae76531SDavid Feng /* 13*0ae76531SDavid Feng * Generic timer implementation of get_tbclk() 14*0ae76531SDavid Feng */ 15*0ae76531SDavid Feng unsigned long get_tbclk(void) 16*0ae76531SDavid Feng { 17*0ae76531SDavid Feng unsigned long cntfrq; 18*0ae76531SDavid Feng asm volatile("mrs %0, cntfrq_el0" : "=r" (cntfrq)); 19*0ae76531SDavid Feng return cntfrq; 20*0ae76531SDavid Feng } 21*0ae76531SDavid Feng 22*0ae76531SDavid Feng /* 23*0ae76531SDavid Feng * Generic timer implementation of timer_read_counter() 24*0ae76531SDavid Feng */ 25*0ae76531SDavid Feng unsigned long timer_read_counter(void) 26*0ae76531SDavid Feng { 27*0ae76531SDavid Feng unsigned long cntpct; 28*0ae76531SDavid Feng isb(); 29*0ae76531SDavid Feng asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct)); 30*0ae76531SDavid Feng return cntpct; 31*0ae76531SDavid Feng } 32