Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
0003 #include <linux/kernel.h>
0004 #include <linux/module.h>
0005 #include <linux/init.h>
0006 #include <linux/delay.h>
0007 
0008 void __delay(unsigned long loops)
0009 {
0010     asm volatile (
0011         "mov r0, r0\n"
0012         "1:declt %0\n"
0013         "bf 1b"
0014         : "=r"(loops)
0015         : "0"(loops));
0016 }
0017 EXPORT_SYMBOL(__delay);
0018 
0019 void __const_udelay(unsigned long xloops)
0020 {
0021     unsigned long long loops;
0022 
0023     loops = (unsigned long long)xloops * loops_per_jiffy * HZ;
0024 
0025     __delay(loops >> 32);
0026 }
0027 EXPORT_SYMBOL(__const_udelay);
0028 
0029 void __udelay(unsigned long usecs)
0030 {
0031     __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */
0032 }
0033 EXPORT_SYMBOL(__udelay);
0034 
0035 void __ndelay(unsigned long nsecs)
0036 {
0037     __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */
0038 }
0039 EXPORT_SYMBOL(__ndelay);