Merge commit 'v2.6.34-rc2' into perf/core
[linux-2.6-block.git] / arch / blackfin / include / asm / delay.h
CommitLineData
1394f032 1/*
9e83b98a
MF
2 * delay.h - delay functions
3 *
4 * Copyright (c) 2004-2007 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2 or later.
7 */
8
9#ifndef __ASM_DELAY_H__
10#define __ASM_DELAY_H__
1394f032 11
639f6571 12#include <mach/anomaly.h>
1394f032 13
9e83b98a
MF
14static inline void __delay(unsigned long loops)
15{
c8e67412 16__asm__ __volatile__ (
9e83b98a
MF
17 "LSETUP(1f, 1f) LC0 = %0;"
18 "1: NOP;"
19 :
20 : "a" (loops)
21 : "LT0", "LB0", "LC0"
22 );
1394f032
BW
23}
24
25#include <linux/param.h> /* needed for HZ */
26
27/*
4e653e04 28 * close approximation borrowed from m68knommu to avoid 64-bit math
1394f032 29 */
4e653e04
MH
30
31#define HZSCALE (268435456 / (1000000/HZ))
32
6388d14e 33static inline unsigned long __to_delay(unsigned long scale)
1394f032
BW
34{
35 extern unsigned long loops_per_jiffy;
6388d14e
BS
36 return (((scale * HZSCALE) >> 11) * (loops_per_jiffy >> 11)) >> 6;
37}
38
39static inline void udelay(unsigned long usecs)
40{
41 __delay(__to_delay(usecs));
1394f032
BW
42}
43
6388d14e
BS
44static inline void ndelay(unsigned long nsecs)
45{
46 __delay(__to_delay(1) * nsecs / 1000);
47}
48
49#define ndelay ndelay
50
9e83b98a 51#endif