linux/arch/csky/lib/delay.c
<<
>>
Prefs
   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);
  40