1/* Copyright Altera Corporation (C) 2014. All rights reserved. 2 * 3 * This program is free software; you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License, version 2, 5 * as published by the Free Software Foundation. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * 15 */ 16 17#include <linux/module.h> 18#include <asm/delay.h> 19#include <asm/param.h> 20#include <asm/processor.h> 21#include <asm/timex.h> 22 23void __delay(unsigned long cycles) 24{ 25 cycles_t start = get_cycles(); 26 27 while ((get_cycles() - start) < cycles) 28 cpu_relax(); 29} 30EXPORT_SYMBOL(__delay); 31 32void __const_udelay(unsigned long xloops) 33{ 34 u64 loops; 35 36 loops = (u64)xloops * loops_per_jiffy * HZ; 37 38 __delay(loops >> 32); 39} 40EXPORT_SYMBOL(__const_udelay); 41 42void __udelay(unsigned long usecs) 43{ 44 __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */ 45} 46EXPORT_SYMBOL(__udelay); 47 48void __ndelay(unsigned long nsecs) 49{ 50 __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */ 51} 52EXPORT_SYMBOL(__ndelay); 53