xref: /openbmc/u-boot/arch/arm/include/asm/arch-armv7/generictimer.h (revision b217c89e8565ade3aaa9f74c33c93236bf151187)
1*972af2abSWang Dongsheng /*
2*972af2abSWang Dongsheng  * Copyright (C) 2013 - ARM Ltd
3*972af2abSWang Dongsheng  * Author: Marc Zyngier <marc.zyngier@arm.com>
4*972af2abSWang Dongsheng  *
5*972af2abSWang Dongsheng  * Based on code by Carl van Schaik <carl@ok-labs.com>.
6*972af2abSWang Dongsheng  *
7*972af2abSWang Dongsheng  * This program is free software; you can redistribute it and/or modify
8*972af2abSWang Dongsheng  * it under the terms of the GNU General Public License version 2 as
9*972af2abSWang Dongsheng  * published by the Free Software Foundation.
10*972af2abSWang Dongsheng  *
11*972af2abSWang Dongsheng  * This program is distributed in the hope that it will be useful,
12*972af2abSWang Dongsheng  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*972af2abSWang Dongsheng  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*972af2abSWang Dongsheng  * GNU General Public License for more details.
15*972af2abSWang Dongsheng  *
16*972af2abSWang Dongsheng  * You should have received a copy of the GNU General Public License
17*972af2abSWang Dongsheng  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18*972af2abSWang Dongsheng  */
19*972af2abSWang Dongsheng 
20*972af2abSWang Dongsheng #ifndef _GENERICTIMER_H_
21*972af2abSWang Dongsheng #define _GENERICTIMER_H_
22*972af2abSWang Dongsheng 
23*972af2abSWang Dongsheng #ifdef __ASSEMBLY__
24*972af2abSWang Dongsheng 
25*972af2abSWang Dongsheng /*
26*972af2abSWang Dongsheng  * This macro provide a physical timer that can be used for delay in the code.
27*972af2abSWang Dongsheng  * The macro is moved from sunxi/psci_sun7i.S
28*972af2abSWang Dongsheng  *
29*972af2abSWang Dongsheng  * reg: is used in this macro.
30*972af2abSWang Dongsheng  * ticks: The freq is based on generic timer.
31*972af2abSWang Dongsheng  */
32*972af2abSWang Dongsheng .macro	timer_wait	reg, ticks
33*972af2abSWang Dongsheng 	movw	\reg, #(\ticks & 0xffff)
34*972af2abSWang Dongsheng 	movt	\reg, #(\ticks >> 16)
35*972af2abSWang Dongsheng 	mcr	p15, 0, \reg, c14, c2, 0
36*972af2abSWang Dongsheng 	isb
37*972af2abSWang Dongsheng 	mov	\reg, #3
38*972af2abSWang Dongsheng 	mcr	p15, 0, \reg, c14, c2, 1
39*972af2abSWang Dongsheng 1 :	isb
40*972af2abSWang Dongsheng 	mrc	p15, 0, \reg, c14, c2, 1
41*972af2abSWang Dongsheng 	ands	\reg, \reg, #4
42*972af2abSWang Dongsheng 	bne	1b
43*972af2abSWang Dongsheng 	mov	\reg, #0
44*972af2abSWang Dongsheng 	mcr	p15, 0, \reg, c14, c2, 1
45*972af2abSWang Dongsheng 	isb
46*972af2abSWang Dongsheng .endm
47*972af2abSWang Dongsheng 
48*972af2abSWang Dongsheng #endif /* __ASSEMBLY__ */
49*972af2abSWang Dongsheng 
50*972af2abSWang Dongsheng #endif /* _GENERICTIMER_H_ */
51