/* delay x useconds */ void __udelay(unsigned long usec) { unsigned long count_value; count_value = timer_get_us_down(); while ((int)(count_value - timer_get_us_down()) < (int)usec) ; }
/* delay x useconds */ void __udelay(unsigned long usec) { #if 0 struct s5p_timer *const timer = s5p_get_base_timer(); unsigned long tmo, tmp, count_value; count_value = readl(&timer->tcntb4); if (usec >= 1000) { /* * if "big" number, spread normalization * to seconds * 1. start to normalize for usec to ticks per sec * 2. find number of "ticks" to wait to achieve target * 3. finish normalize. */ tmo = usec / 1000; tmo *= (CONFIG_SYS_HZ * count_value / 10); tmo /= 1000; } else { /* else small number, don't kill it prior to HZ multiply */ tmo = usec * CONFIG_SYS_HZ * count_value / 10; tmo /= (1000 * 1000); } /* get current timestamp */ tmp = get_timer_org(0); /* if setting this fordward will roll time stamp */ /* reset "advancing" timestamp to 0, set lastinc value */ /* else, set advancing stamp wake up time */ if ((tmo + tmp + 1) < tmp) reset_timer_masked(); else tmo += tmp; /* loop till event */ while (get_timer_masked() < tmo) ; /* nop */ #else unsigned long count_value; count_value = timer_get_us_down(); while ((int)(count_value - timer_get_us_down()) < (int)usec) ; #endif }
/* * timer without interrupts */ unsigned long get_timer(unsigned long base) { ulong now = timer_get_us_down(); /* * Increment the time by the amount elapsed since the last read. * The timer may have wrapped around, but it makes no difference to * our arithmetic here. */ gd->timer_reset_value += gd->lastinc - now; gd->lastinc = now; /* Divide by 1000 to convert from us to ms */ return gd->timer_reset_value / 1000 - base; }
int timer_init(void) { /* PWM Timer 4 */ pwm_init(4, MUX_DIV_4, 0); pwm_config(4, 0, 0); pwm_enable(4); /* Use this as the current monotonic time in us */ gd->timer_reset_value = 0; /* Use this as the last timer value we saw */ gd->lastinc = timer_get_us_down(); reset_timer_masked(); return 0; }
/* * timer without interrupts */ unsigned long get_timer(unsigned long base) { unsigned long long time_ms; ulong now = timer_get_us_down(); /* * Increment the time by the amount elapsed since the last read. * The timer may have wrapped around, but it makes no difference to * our arithmetic here. */ gd->arch.timer_reset_value += gd->arch.lastinc - now; gd->arch.lastinc = now; /* Divide by 1000 to convert from us to ms */ time_ms = gd->arch.timer_reset_value; do_div(time_ms, 1000); return time_ms - base; }