root/arch/openrisc/lib/delay.c

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

DEFINITIONS

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

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * OpenRISC Linux
   4  *
   5  * Linux architectural port borrowing liberally from similar works of
   6  * others.  All original copyrights apply as per the original source
   7  * declaration.
   8  *
   9  * Modifications for the OpenRISC architecture:
  10  * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
  11  *
  12  * Precise Delay Loops
  13  */
  14 
  15 #include <linux/kernel.h>
  16 #include <linux/export.h>
  17 #include <linux/init.h>
  18 #include <asm/param.h>
  19 #include <asm/delay.h>
  20 #include <asm/timex.h>
  21 #include <asm/processor.h>
  22 
  23 int read_current_timer(unsigned long *timer_value)
  24 {
  25         *timer_value = get_cycles();
  26         return 0;
  27 }
  28 
  29 void __delay(unsigned long cycles)
  30 {
  31         cycles_t start = get_cycles();
  32 
  33         while ((get_cycles() - start) < cycles)
  34                 cpu_relax();
  35 }
  36 EXPORT_SYMBOL(__delay);
  37 
  38 inline void __const_udelay(unsigned long xloops)
  39 {
  40         unsigned long long loops;
  41 
  42         loops = (unsigned long long)xloops * loops_per_jiffy * HZ;
  43 
  44         __delay(loops >> 32);
  45 }
  46 EXPORT_SYMBOL(__const_udelay);
  47 
  48 void __udelay(unsigned long usecs)
  49 {
  50         __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */
  51 }
  52 EXPORT_SYMBOL(__udelay);
  53 
  54 void __ndelay(unsigned long nsecs)
  55 {
  56         __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */
  57 }
  58 EXPORT_SYMBOL(__ndelay);

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