delay.c 798 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * delay loops
  4. *
  5. * Copyright (C) 2015 Yoshinori Sato
  6. */
  7. #include <linux/module.h>
  8. #include <linux/delay.h>
  9. #include <asm/param.h>
  10. #include <asm/processor.h>
  11. #include <asm/timex.h>
  12. void __delay(unsigned long cycles)
  13. {
  14. __asm__ volatile ("1: dec.l #1,%0\n\t"
  15. "bne 1b":"=r"(cycles):"0"(cycles));
  16. }
  17. EXPORT_SYMBOL(__delay);
  18. void __const_udelay(unsigned long xloops)
  19. {
  20. u64 loops;
  21. loops = (u64)xloops * loops_per_jiffy * HZ;
  22. __delay(loops >> 32);
  23. }
  24. EXPORT_SYMBOL(__const_udelay);
  25. void __udelay(unsigned long usecs)
  26. {
  27. __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */
  28. }
  29. EXPORT_SYMBOL(__udelay);
  30. void __ndelay(unsigned long nsecs)
  31. {
  32. __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */
  33. }
  34. EXPORT_SYMBOL(__ndelay);