delay.c (812B)
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 8void __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} 17EXPORT_SYMBOL(__delay); 18 19void __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} 27EXPORT_SYMBOL(__const_udelay); 28 29void __udelay(unsigned long usecs) 30{ 31 __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */ 32} 33EXPORT_SYMBOL(__udelay); 34 35void __ndelay(unsigned long nsecs) 36{ 37 __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */ 38} 39EXPORT_SYMBOL(__ndelay);