c8e674125e
The removed version with the loop registers saved on the stack was originally intended to workaround the missing toolchain support for LoopReg Clobbers. Since our toolchain now supports these there is no point in keeping this workaround. And since we don't touch LoopRegs anymore we're no longer subject for ANOMALY_05000312. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
39 lines
710 B
C
39 lines
710 B
C
/*
|
|
* delay.h - delay functions
|
|
*
|
|
* Copyright (c) 2004-2007 Analog Devices Inc.
|
|
*
|
|
* Licensed under the GPL-2 or later.
|
|
*/
|
|
|
|
#ifndef __ASM_DELAY_H__
|
|
#define __ASM_DELAY_H__
|
|
|
|
#include <mach/anomaly.h>
|
|
|
|
static inline void __delay(unsigned long loops)
|
|
{
|
|
__asm__ __volatile__ (
|
|
"LSETUP(1f, 1f) LC0 = %0;"
|
|
"1: NOP;"
|
|
:
|
|
: "a" (loops)
|
|
: "LT0", "LB0", "LC0"
|
|
);
|
|
}
|
|
|
|
#include <linux/param.h> /* needed for HZ */
|
|
|
|
/*
|
|
* close approximation borrowed from m68knommu to avoid 64-bit math
|
|
*/
|
|
|
|
#define HZSCALE (268435456 / (1000000/HZ))
|
|
|
|
static inline void udelay(unsigned long usecs)
|
|
{
|
|
extern unsigned long loops_per_jiffy;
|
|
__delay((((usecs * HZSCALE) >> 11) * (loops_per_jiffy >> 11)) >> 6);
|
|
}
|
|
|
|
#endif
|