1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. 3 #include <linux/kernel.h> 4 #include <linux/module.h> 5 #include <linux/init.h> 6 #include <linux/delay.h> 7 8 void __aligned(8) __delay(unsigned long loops) 9 { 10 asm volatile ( 11 "mov r0, r0\n" 12 "1:declt %0\n" 13 "bf 1b" 14 : "=r"(loops) 15 : "0"(loops)); 16 } 17 EXPORT_SYMBOL(__delay); 18 19 void __const_udelay(unsigned long xloops) 20 { 21 unsigned long long loops; 22 23 loops = (unsigned long long)xloops * loops_per_jiffy * HZ; 24 25 __delay(loops >> 32); 26 } 27 EXPORT_SYMBOL(__const_udelay); 28 29 void __udelay(unsigned long usecs) 30 { 31 __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */ 32 } 33 EXPORT_SYMBOL(__udelay); 34 35 void __ndelay(unsigned long nsecs) 36 { 37 __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */ 38 } 39 EXPORT_SYMBOL(__ndelay); 40