According to the PPC reference implementation the udelay() function is
responsible for resetting the watchdog timer as frequently as needed.
Most other architectures do not meet that requirement, so long-running
operations might result in a watchdog reset.
This patch adds a generic udelay() function which takes care of
resetting the watchdog before calling an architecture-specific
__udelay().
Signed-off-by: Ingo van Lil <inguin(a)gmx.de>
---
board/armltd/integrator/timer.c | 2 +-
cpu/arm1136/mx31/timer.c | 2 +-
cpu/arm1136/omap24xx/timer.c | 2 +-
cpu/arm1176/s3c64xx/timer.c | 2 +-
cpu/arm720t/interrupts.c | 4 +-
cpu/arm920t/at91rm9200/timer.c | 2 +-
cpu/arm920t/imx/timer.c | 2 +-
cpu/arm920t/ks8695/timer.c | 2 +-
cpu/arm920t/s3c24x0/timer.c | 2 +-
cpu/arm925t/timer.c | 2 +-
cpu/arm926ejs/at91/timer.c | 2 +-
cpu/arm926ejs/davinci/timer.c | 2 +-
cpu/arm926ejs/kirkwood/timer.c | 2 +-
cpu/arm926ejs/mx27/timer.c | 2 +-
cpu/arm926ejs/nomadik/timer.c | 2 +-
cpu/arm926ejs/omap/timer.c | 2 +-
cpu/arm926ejs/versatile/timer.c | 2 +-
cpu/arm_cortexa8/omap3/timer.c | 2 +-
cpu/at32ap/interrupts.c | 2 +-
cpu/blackfin/interrupts.c | 2 +-
cpu/i386/sc520/sc520_timer.c | 2 +-
cpu/ixp/start.S | 4 +-
cpu/ixp/timer.c | 2 +-
cpu/lh7a40x/timer.c | 2 +-
cpu/mcf547x_8x/slicetimer.c | 2 +-
cpu/pxa/timer.c | 2 +-
cpu/s3c44b0/timer.c | 2 +-
cpu/sa1100/timer.c | 2 +-
examples/api/libgenwrap.c | 2 +-
include/asm-blackfin/delay.h | 2 +-
include/exports.h | 2 +-
lib_generic/Makefile | 1 +
lib_generic/time.c | 43 +++++++++++++++++++++++++++++++++++++++
lib_i386/pcat_timer.c | 2 +-
lib_m68k/time.c | 4 +-
lib_microblaze/time.c | 4 +-
lib_mips/time.c | 2 +-
lib_nios/time.c | 3 +-
lib_nios2/time.c | 3 +-
lib_ppc/time.c | 16 ++-----------
lib_sh/time.c | 2 +-
lib_sh/time_sh2.c | 2 +-
lib_sparc/time.c | 2 +-
43 files changed, 91 insertions(+), 59 deletions(-)
create mode 100644 lib_generic/time.c
diff --git a/board/armltd/integrator/timer.c b/board/armltd/integrator/timer.c
index 087cf59..7562ffa 100644
--- a/board/armltd/integrator/timer.c
+++ b/board/armltd/integrator/timer.c
@@ -124,7 +124,7 @@ void set_timer (ulong ticks)
}
/* delay usec useconds */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo, tmp;
diff --git a/cpu/arm1136/mx31/timer.c b/cpu/arm1136/mx31/timer.c
index 29b484e..7972ba0 100644
--- a/cpu/arm1136/mx31/timer.c
+++ b/cpu/arm1136/mx31/timer.c
@@ -152,7 +152,7 @@ void set_timer (ulong t)
}
/* delay x useconds AND perserve advance timstamp value */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
unsigned long long tmp;
ulong tmo;
diff --git a/cpu/arm1136/omap24xx/timer.c b/cpu/arm1136/omap24xx/timer.c
index 8dd8d7b..6754749 100644
--- a/cpu/arm1136/omap24xx/timer.c
+++ b/cpu/arm1136/omap24xx/timer.c
@@ -74,7 +74,7 @@ void set_timer (ulong t)
}
/* delay x useconds AND perserve advance timstamp value */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo, tmp;
diff --git a/cpu/arm1176/s3c64xx/timer.c b/cpu/arm1176/s3c64xx/timer.c
index 22a5b77..dc8c021 100644
--- a/cpu/arm1176/s3c64xx/timer.c
+++ b/cpu/arm1176/s3c64xx/timer.c
@@ -164,7 +164,7 @@ void set_timer(ulong t)
timestamp = t * (timer_load_val / (100 * CONFIG_SYS_HZ));
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
unsigned long long tmp;
ulong tmo;
diff --git a/cpu/arm720t/interrupts.c b/cpu/arm720t/interrupts.c
index 91d552c..eb8d425 100644
--- a/cpu/arm720t/interrupts.c
+++ b/cpu/arm720t/interrupts.c
@@ -224,7 +224,7 @@ void set_timer (ulong t)
timestamp = t;
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo;
@@ -296,7 +296,7 @@ ulong get_timer (ulong base)
return timestamp - base;
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
u32 ticks;
diff --git a/cpu/arm920t/at91rm9200/timer.c b/cpu/arm920t/at91rm9200/timer.c
index 235d107..9c54bbe 100644
--- a/cpu/arm920t/at91rm9200/timer.c
+++ b/cpu/arm920t/at91rm9200/timer.c
@@ -87,7 +87,7 @@ void set_timer (ulong t)
timestamp = t;
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
udelay_masked(usec);
}
diff --git a/cpu/arm920t/imx/timer.c b/cpu/arm920t/imx/timer.c
index 31ec588..b06b518 100644
--- a/cpu/arm920t/imx/timer.c
+++ b/cpu/arm920t/imx/timer.c
@@ -89,7 +89,7 @@ void udelay_masked (unsigned long usec)
} while (diff >= 0);
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
udelay_masked(usec);
}
diff --git a/cpu/arm920t/ks8695/timer.c b/cpu/arm920t/ks8695/timer.c
index 22987bc..886e370 100644
--- a/cpu/arm920t/ks8695/timer.c
+++ b/cpu/arm920t/ks8695/timer.c
@@ -81,7 +81,7 @@ void set_timer(ulong t)
timer_ticks = t;
}
-void udelay(ulong usec)
+void __udelay(ulong usec)
{
ulong start = get_timer_masked();
ulong end;
diff --git a/cpu/arm920t/s3c24x0/timer.c b/cpu/arm920t/s3c24x0/timer.c
index c8c7cdb..1be9126 100644
--- a/cpu/arm920t/s3c24x0/timer.c
+++ b/cpu/arm920t/s3c24x0/timer.c
@@ -97,7 +97,7 @@ void set_timer (ulong t)
timestamp = t;
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo;
ulong start = get_timer(0);
diff --git a/cpu/arm925t/timer.c b/cpu/arm925t/timer.c
index c16ef25..7dfe2b5 100644
--- a/cpu/arm925t/timer.c
+++ b/cpu/arm925t/timer.c
@@ -81,7 +81,7 @@ void set_timer (ulong t)
}
/* delay x useconds AND preserve advance timestamp value */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
int32_t tmo = usec * (TIMER_CLOCK / 1000) / 1000;
uint32_t now, last = __raw_readl(CONFIG_SYS_TIMERBASE + READ_TIM);
diff --git a/cpu/arm926ejs/at91/timer.c b/cpu/arm926ejs/at91/timer.c
index 811bb3c..7352b5c 100644
--- a/cpu/arm926ejs/at91/timer.c
+++ b/cpu/arm926ejs/at91/timer.c
@@ -105,7 +105,7 @@ ulong get_timer_masked(void)
return tick_to_time(get_ticks());
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
unsigned long long tmp;
ulong tmo;
diff --git a/cpu/arm926ejs/davinci/timer.c b/cpu/arm926ejs/davinci/timer.c
index 80751ad..56ad55f 100644
--- a/cpu/arm926ejs/davinci/timer.c
+++ b/cpu/arm926ejs/davinci/timer.c
@@ -110,7 +110,7 @@ void set_timer(ulong t)
timestamp = t;
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
ulong tmo;
ulong endtime;
diff --git a/cpu/arm926ejs/kirkwood/timer.c b/cpu/arm926ejs/kirkwood/timer.c
index 817ff42..2ec6a93 100644
--- a/cpu/arm926ejs/kirkwood/timer.c
+++ b/cpu/arm926ejs/kirkwood/timer.c
@@ -125,7 +125,7 @@ void set_timer(ulong t)
timestamp = t;
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
uint current;
ulong delayticks;
diff --git a/cpu/arm926ejs/mx27/timer.c b/cpu/arm926ejs/mx27/timer.c
index 9011058..8f1d47b 100644
--- a/cpu/arm926ejs/mx27/timer.c
+++ b/cpu/arm926ejs/mx27/timer.c
@@ -177,7 +177,7 @@ void set_timer (ulong t)
}
/* delay x useconds AND preserve advance timstamp value */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
unsigned long long tmp;
ulong tmo;
diff --git a/cpu/arm926ejs/nomadik/timer.c b/cpu/arm926ejs/nomadik/timer.c
index 16067c9..047b9e3 100644
--- a/cpu/arm926ejs/nomadik/timer.c
+++ b/cpu/arm926ejs/nomadik/timer.c
@@ -59,7 +59,7 @@ ulong get_timer(ulong base)
}
/* Delay x useconds */
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
ulong ini, end;
diff --git a/cpu/arm926ejs/omap/timer.c b/cpu/arm926ejs/omap/timer.c
index 392b158..2ac38c4 100644
--- a/cpu/arm926ejs/omap/timer.c
+++ b/cpu/arm926ejs/omap/timer.c
@@ -80,7 +80,7 @@ void set_timer (ulong t)
}
/* delay x useconds AND perserve advance timstamp value */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo, tmp;
diff --git a/cpu/arm926ejs/versatile/timer.c b/cpu/arm926ejs/versatile/timer.c
index 50c1335..563db36 100755
--- a/cpu/arm926ejs/versatile/timer.c
+++ b/cpu/arm926ejs/versatile/timer.c
@@ -109,7 +109,7 @@ void set_timer (ulong t)
}
/* delay x useconds AND perserve advance timstamp value */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo, tmp;
diff --git a/cpu/arm_cortexa8/omap3/timer.c b/cpu/arm_cortexa8/omap3/timer.c
index 12a16b3..401bfe6 100644
--- a/cpu/arm_cortexa8/omap3/timer.c
+++ b/cpu/arm_cortexa8/omap3/timer.c
@@ -82,7 +82,7 @@ void set_timer(ulong t)
}
/* delay x useconds */
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
long tmo = usec * (TIMER_CLOCK / 1000) / 1000;
unsigned long now, last = readl(&timer_base->tcrr);
diff --git a/cpu/at32ap/interrupts.c b/cpu/at32ap/interrupts.c
index 75cc39e..c6d8d16 100644
--- a/cpu/at32ap/interrupts.c
+++ b/cpu/at32ap/interrupts.c
@@ -96,7 +96,7 @@ void set_timer(unsigned long t)
/*
* For short delays only. It will overflow after a few seconds.
*/
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
unsigned long cycles;
unsigned long base;
diff --git a/cpu/blackfin/interrupts.c b/cpu/blackfin/interrupts.c
index bf6fb4b..51e3940 100644
--- a/cpu/blackfin/interrupts.c
+++ b/cpu/blackfin/interrupts.c
@@ -63,7 +63,7 @@ int disable_interrupts(void)
return 1;
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
unsigned long delay, start, stop;
unsigned long cclk;
diff --git a/cpu/i386/sc520/sc520_timer.c b/cpu/i386/sc520/sc520_timer.c
index 23de14b..3c09182 100644
--- a/cpu/i386/sc520/sc520_timer.c
+++ b/cpu/i386/sc520/sc520_timer.c
@@ -67,7 +67,7 @@ int timer_init(void)
return 0;
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
int m = 0;
long u;
diff --git a/cpu/ixp/start.S b/cpu/ixp/start.S
index 196ba5d..5ebce53 100644
--- a/cpu/ixp/start.S
+++ b/cpu/ixp/start.S
@@ -505,8 +505,8 @@ reset_endless:
/*
* 0 <= r0 <= 2000
*/
-.globl udelay
-udelay:
+.globl __udelay
+__udelay:
mov r2, #0x6800
orr r2, r2, #0x00db
mul r0, r2, r0
diff --git a/cpu/ixp/timer.c b/cpu/ixp/timer.c
index 6856149..edf341f 100644
--- a/cpu/ixp/timer.c
+++ b/cpu/ixp/timer.c
@@ -99,7 +99,7 @@ void ixp425_udelay(unsigned long usec)
while (!(*IXP425_OSST & IXP425_OSST_TIMER_1_PEND));
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
while (usec--) ixp425_udelay(1);
}
diff --git a/cpu/lh7a40x/timer.c b/cpu/lh7a40x/timer.c
index f9b5be0..2691315 100644
--- a/cpu/lh7a40x/timer.c
+++ b/cpu/lh7a40x/timer.c
@@ -90,7 +90,7 @@ void set_timer (ulong t)
timestamp = t;
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo,tmp;
diff --git a/cpu/mcf547x_8x/slicetimer.c b/cpu/mcf547x_8x/slicetimer.c
index 67e8189..8dc010a 100644
--- a/cpu/mcf547x_8x/slicetimer.c
+++ b/cpu/mcf547x_8x/slicetimer.c
@@ -40,7 +40,7 @@ static ulong timestamp;
#endif
extern void dtimer_intr_setup(void);
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
volatile slt_t *timerp = (slt_t *) (CONFIG_SYS_UDELAY_BASE);
u32 now, freq;
diff --git a/cpu/pxa/timer.c b/cpu/pxa/timer.c
index e2df3a5..8d0f826 100644
--- a/cpu/pxa/timer.c
+++ b/cpu/pxa/timer.c
@@ -78,7 +78,7 @@ void set_timer (ulong t)
/* nop */
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
udelay_masked (usec);
}
diff --git a/cpu/s3c44b0/timer.c b/cpu/s3c44b0/timer.c
index 34184ab..6f1d8f6 100644
--- a/cpu/s3c44b0/timer.c
+++ b/cpu/s3c44b0/timer.c
@@ -75,7 +75,7 @@ void set_timer (ulong t)
timestamp = t;
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
ulong tmo;
diff --git a/cpu/sa1100/timer.c b/cpu/sa1100/timer.c
index 3f77e81..0207501 100644
--- a/cpu/sa1100/timer.c
+++ b/cpu/sa1100/timer.c
@@ -49,7 +49,7 @@ void set_timer (ulong t)
/* nop */
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
udelay_masked (usec);
}
diff --git a/examples/api/libgenwrap.c b/examples/api/libgenwrap.c
index 2b62bad..2b107d9 100644
--- a/examples/api/libgenwrap.c
+++ b/examples/api/libgenwrap.c
@@ -74,7 +74,7 @@ void putc (const char c)
ub_putc(c);
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
ub_udelay(usec);
}
diff --git a/include/asm-blackfin/delay.h b/include/asm-blackfin/delay.h
index ea0b366..3af6ad3 100644
--- a/include/asm-blackfin/delay.h
+++ b/include/asm-blackfin/delay.h
@@ -47,7 +47,7 @@ extern __inline__ void __delay(unsigned long loops)
* first constant multiplications gets optimized away if the delay is
* a constant)
*/
-extern __inline__ void udelay(unsigned long usecs)
+extern __inline__ void __udelay(unsigned long usecs)
{
__delay(usecs);
}
diff --git a/include/exports.h b/include/exports.h
index 16ea03a..3e88b24 100644
--- a/include/exports.h
+++ b/include/exports.h
@@ -16,7 +16,7 @@ void install_hdlr(int, interrupt_handler_t*, void*);
void free_hdlr(int);
void *malloc(size_t);
void free(void*);
-void udelay(unsigned long);
+void __udelay(unsigned long);
unsigned long get_timer(unsigned long);
void vprintf(const char *, va_list);
void do_reset (void);
diff --git a/lib_generic/Makefile b/lib_generic/Makefile
index 686601c..918cdd7 100644
--- a/lib_generic/Makefile
+++ b/lib_generic/Makefile
@@ -44,6 +44,7 @@ COBJS-y += sha1.o
COBJS-$(CONFIG_SHA256) += sha256.o
COBJS-y += string.o
COBJS-y += strmhz.o
+COBJS-y += time.o
COBJS-y += vsprintf.o
COBJS-y += zlib.o
COBJS-$(CONFIG_RBTREE) += rbtree.o
diff --git a/lib_generic/time.c b/lib_generic/time.c
new file mode 100644
index 0000000..a309c26
--- /dev/null
+++ b/lib_generic/time.c
@@ -0,0 +1,43 @@
+/*
+ * (C) Copyright 2000-2009
+ * Wolfgang Denk, DENX Software Engineering, wd(a)denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <watchdog.h>
+
+#ifndef CONFIG_WD_PERIOD
+# define CONFIG_WD_PERIOD (10 * 1000 * 1000) /* 10 seconds default*/
+#endif
+
+/* ------------------------------------------------------------------------- */
+
+void udelay(unsigned long usec)
+{
+ ulong kv;
+
+ do {
+ WATCHDOG_RESET();
+ kv = usec > CONFIG_WD_PERIOD ? CONFIG_WD_PERIOD : usec;
+ __udelay (kv);
+ usec -= kv;
+ } while(usec);
+}
diff --git a/lib_i386/pcat_timer.c b/lib_i386/pcat_timer.c
index c351b23..1373fd1 100644
--- a/lib_i386/pcat_timer.c
+++ b/lib_i386/pcat_timer.c
@@ -71,7 +71,7 @@ static u16 read_pit(void)
}
/* this is not very exact */
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
int counter;
int wraps;
diff --git a/lib_m68k/time.c b/lib_m68k/time.c
index 29269f6..7eaea5e 100644
--- a/lib_m68k/time.c
+++ b/lib_m68k/time.c
@@ -47,7 +47,7 @@ static volatile ulong timestamp = 0;
#endif
extern void dtimer_intr_setup(void);
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
volatile dtmr_t *timerp = (dtmr_t *) (CONFIG_SYS_UDELAY_BASE);
uint start, now, tmp;
@@ -139,7 +139,7 @@ void set_timer(ulong t)
static unsigned short lastinc;
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
volatile pit_t *timerp = (pit_t *) (CONFIG_SYS_UDELAY_BASE);
uint tmp;
diff --git a/lib_microblaze/time.c b/lib_microblaze/time.c
index cbb4341..da016a0 100644
--- a/lib_microblaze/time.c
+++ b/lib_microblaze/time.c
@@ -27,14 +27,14 @@
#include <common.h>
#ifdef CONFIG_SYS_TIMER_0
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
int i;
i = get_timer (0);
while ((get_timer (0) - i) < (usec / 1000)) ;
}
#else
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
unsigned int i;
for (i = 0; i < (usec * CONFIG_XILINX_CLOCK_FREQ / 10000000); i++);
diff --git a/lib_mips/time.c b/lib_mips/time.c
index 07e356d..0e66441 100644
--- a/lib_mips/time.c
+++ b/lib_mips/time.c
@@ -70,7 +70,7 @@ void set_timer(ulong t)
write_c0_compare(read_c0_count() + CYCLES_PER_JIFFY);
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
unsigned int tmo;
diff --git a/lib_nios/time.c b/lib_nios/time.c
index 25a233e..d5096ee 100644
--- a/lib_nios/time.c
+++ b/lib_nios/time.c
@@ -27,13 +27,12 @@
extern void dly_clks( unsigned long ticks );
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
/* The Nios core doesn't have a timebase, so we do our
* best for now and call a low-level loop that counts
* cpu clocks.
*/
unsigned long cnt = (CONFIG_SYS_CLK_FREQ/1000000) * usec;
- WATCHDOG_RESET (); /* trigger watchdog if needed */
dly_clks (cnt);
}
diff --git a/lib_nios2/time.c b/lib_nios2/time.c
index 25a233e..d5096ee 100644
--- a/lib_nios2/time.c
+++ b/lib_nios2/time.c
@@ -27,13 +27,12 @@
extern void dly_clks( unsigned long ticks );
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
/* The Nios core doesn't have a timebase, so we do our
* best for now and call a low-level loop that counts
* cpu clocks.
*/
unsigned long cnt = (CONFIG_SYS_CLK_FREQ/1000000) * usec;
- WATCHDOG_RESET (); /* trigger watchdog if needed */
dly_clks (cnt);
}
diff --git a/lib_ppc/time.c b/lib_ppc/time.c
index 173ffab..2909961 100644
--- a/lib_ppc/time.c
+++ b/lib_ppc/time.c
@@ -23,10 +23,6 @@
#include <common.h>
-#ifndef CONFIG_WD_PERIOD
-# define CONFIG_WD_PERIOD (10 * 1000 * 1000) /* 10 seconds default*/
-#endif
-
/* ------------------------------------------------------------------------- */
/*
@@ -54,16 +50,10 @@ unsigned long usec2ticks(unsigned long usec)
* microseconds to wait) into a number of time base ticks; then we
* watch the time base until it has incremented by that amount.
*/
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
- ulong ticks, kv;
-
- do {
- kv = usec > CONFIG_WD_PERIOD ? CONFIG_WD_PERIOD : usec;
- ticks = usec2ticks (kv);
- wait_ticks (ticks);
- usec -= kv;
- } while(usec);
+ ulong ticks = usec2ticks (usec);
+ wait_ticks (ticks);
}
/* ------------------------------------------------------------------------- */
diff --git a/lib_sh/time.c b/lib_sh/time.c
index 52dbcd0..9a8f89a 100644
--- a/lib_sh/time.c
+++ b/lib_sh/time.c
@@ -105,7 +105,7 @@ unsigned long long get_ticks (void)
return 0 - readl(TCNT0);
}
-void udelay (unsigned long usec)
+void __udelay (unsigned long usec)
{
unsigned long long tmp;
ulong tmo;
diff --git a/lib_sh/time_sh2.c b/lib_sh/time_sh2.c
index 5c6c9d4..789b46f 100644
--- a/lib_sh/time_sh2.c
+++ b/lib_sh/time_sh2.c
@@ -103,7 +103,7 @@ void reset_timer(void)
cmt_timer_start(0);
}
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
unsigned long end = get_usec() + usec;
diff --git a/lib_sparc/time.c b/lib_sparc/time.c
index 433f3eb..82b2a3a 100644
--- a/lib_sparc/time.c
+++ b/lib_sparc/time.c
@@ -53,7 +53,7 @@ unsigned long usec2ticks(unsigned long usec)
* microseconds to wait) into a number of time base ticks; then we
* watch the time base until it has incremented by that amount.
*/
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
{
ulong ticks = usec2ticks(usec);
--
1.6.2.5