root/arch/csky/lib/delay.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __delay
  2. __const_udelay
  3. __udelay
  4. __ndelay

   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 __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);

/* [<][>][^][v][top][bottom][index][help] */