#include <asm/proc-armv/ptrace.h>
-extern void reset_cpu(ulong addr);
#define TIMER_LOAD_VAL 0xffffffff
/* macro to read the 32 bit timer */
timestamp = t;
}
-/* delay x useconds AND perserve advance timstamp value */
+/* delay x useconds AND preserve advance timestamp value */
void udelay (unsigned long usec)
{
-#ifdef CONFIG_INNOVATOROMAP1510
-#define LOOPS_PER_MSEC 60 /* tuned on omap1510 */
- volatile int i, time_remaining = LOOPS_PER_MSEC * usec;
-
- for (i = time_remaining; i > 0; i--) {
- }
-#else
ulong tmo, tmp;
if(usec >= 1000){ /* if "big" number, spread normalization to seconds */
else
tmo += tmp; /* else, set advancing stamp wake up time */
- while (get_timer_masked () < tmo)/* loop till event */
+ while (get_timer_masked () < tmo) /* loop till event */
/*NOP*/;
-#endif
}
void reset_timer_masked (void)
#else
ulong tmo;
+ ulong endtime;
+ signed long diff;
- if(usec >= 1000){ /* if "big" number, spread normalization to seconds */
+ if (usec >= 1000) { /* if "big" number, spread normalization to seconds */
tmo = usec / 1000; /* start to normalize for usec to ticks per sec */
tmo *= CFG_HZ; /* find number of "ticks" to wait to achieve target */
tmo /= 1000; /* finish normalize. */
- }else{ /* else small number, don't kill it prior to HZ multiply */
+ } else { /* else small number, don't kill it prior to HZ multiply */
tmo = usec * CFG_HZ;
tmo /= (1000*1000);
}
- reset_timer_masked (); /* set "advancing" timestamp to 0, set lastdec vaule */
+ endtime = get_timer_masked () + tmo;
- while (get_timer_masked () < tmo) /* wait for time stamp to overtake tick number.*/
- /*NOP*/;
+ do {
+ ulong now = get_timer_masked ();
+ diff = endtime - now;
+ } while (diff >= 0);
#endif
}