diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-07 11:56:29 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-07 11:56:29 -0800 |
commit | 52fefcec97c25b15887e6a9a885ca54e7f7c0928 (patch) | |
tree | 4898112a7fb30c20a9da3aefe9fdc7fdebda57a6 /arch/xtensa/include/asm/delay.h | |
parent | a0e280e0f33f6c859a235fb69a875ed8f3420388 (diff) | |
parent | 5fee325e7d2bcbebf1cb38b4ff3a7aa3744c43e3 (diff) | |
download | kernel_samsung_smdk4412-52fefcec97c25b15887e6a9a885ca54e7f7c0928.zip kernel_samsung_smdk4412-52fefcec97c25b15887e6a9a885ca54e7f7c0928.tar.gz kernel_samsung_smdk4412-52fefcec97c25b15887e6a9a885ca54e7f7c0928.tar.bz2 |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/czankel/xtensa-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/czankel/xtensa-2.6:
xtensa: Update platform files to reflect new location of the header files.
xtensa: switch to packed struct unaligned access implementation
xtensa: Add xt2000 support files.
xtensa: move headers files to arch/xtensa/include
xtensa: use the new byteorder headers
Diffstat (limited to 'arch/xtensa/include/asm/delay.h')
-rw-r--r-- | arch/xtensa/include/asm/delay.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/arch/xtensa/include/asm/delay.h b/arch/xtensa/include/asm/delay.h new file mode 100644 index 0000000..e1d8c9e --- /dev/null +++ b/arch/xtensa/include/asm/delay.h @@ -0,0 +1,49 @@ +/* + * include/asm-xtensa/delay.h + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2001 - 2005 Tensilica Inc. + * + */ + +#ifndef _XTENSA_DELAY_H +#define _XTENSA_DELAY_H + +#include <asm/processor.h> +#include <asm/param.h> + +extern unsigned long loops_per_jiffy; + +static inline void __delay(unsigned long loops) +{ + /* 2 cycles per loop. */ + __asm__ __volatile__ ("1: addi %0, %0, -2; bgeui %0, 2, 1b" + : "=r" (loops) : "0" (loops)); +} + +static __inline__ u32 xtensa_get_ccount(void) +{ + u32 ccount; + asm volatile ("rsr %0, 234; # CCOUNT\n" : "=r" (ccount)); + return ccount; +} + +/* For SMP/NUMA systems, change boot_cpu_data to something like + * local_cpu_data->... where local_cpu_data points to the current + * cpu. */ + +static __inline__ void udelay (unsigned long usecs) +{ + unsigned long start = xtensa_get_ccount(); + unsigned long cycles = usecs * (loops_per_jiffy / (1000000UL / HZ)); + + /* Note: all variables are unsigned (can wrap around)! */ + while (((unsigned long)xtensa_get_ccount()) - start < cycles) + ; +} + +#endif + |