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