1/* 2 * U-boot - delay.h Routines for introducing delays 3 * 4 * Copyright (c) 2005-2007 Analog Devices Inc. 5 * 6 * See file CREDITS for list of people who contributed to this 7 * project. 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License as 11 * published by the Free Software Foundation; either version 2 of 12 * the License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, 22 * MA 02110-1301 USA 23 */ 24 25#ifndef _BLACKFIN_DELAY_H 26#define _BLACKFIN_DELAY_H 27 28/* 29 * Changes made by akbar.hussain@Lineo.com, for BLACKFIN 30 * Copyright (C) 1994 Hamish Macdonald 31 * 32 * Delay routines, using a pre-computed "loops_per_second" value. 33 */ 34 35extern __inline__ void __delay(unsigned long loops) 36{ 37 __asm__ __volatile__("1:\t%0 += -1;\n\t" 38 "cc = %0 == 0;\n\t" 39 "if ! cc jump 1b;\n":"=d"(loops) 40 :"0"(loops)); 41} 42 43/* 44 * Use only for very small delays ( < 1 msec). Should probably use a 45 * lookup table, really, as the multiplications take much too long with 46 * short delays. This is a "reasonable" implementation, though (and the 47 * first constant multiplications gets optimized away if the delay is 48 * a constant) 49 */ 50extern __inline__ void __udelay(unsigned long usecs) 51{ 52 __delay(usecs); 53} 54 55#endif 56