mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-27 15:12:21 +00:00
Exynos: Add timer_get_us function
timer_get_us returns the time in microseconds since a certain reference point of history. However, it does not guarantee to return an accurate time after a long period; instead, it wraps around (that is, the reference point is reset to some other point of history) after some periods. The frequency of wrapping around is about an hour (or 2^32 microseconds). Test with command "sf probe 1:0; time sf read 40008000 0 1000". Try with different numbers of bytes and see that sane values are obtained Signed-off-by: Che-Liang Chiou <clchiou@chromium.org> Signed-off-by: Akshay Saraswat <akshay.s@samsung.com> Acked-by: Simon Glass <sjg@chromium.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:
parent
3d00c0cb96
commit
f24869d3a8
1 changed files with 15 additions and 0 deletions
|
@ -90,6 +90,21 @@ unsigned long get_timer(unsigned long base)
|
|||
return gd->arch.timer_reset_value / 1000 - base;
|
||||
}
|
||||
|
||||
unsigned long timer_get_us(void)
|
||||
{
|
||||
static unsigned long base_time_us;
|
||||
|
||||
struct s5p_timer *const timer =
|
||||
(struct s5p_timer *)samsung_get_base_timer();
|
||||
unsigned long now_downward_us = readl(&timer->tcnto4);
|
||||
|
||||
if (!base_time_us)
|
||||
base_time_us = now_downward_us;
|
||||
|
||||
/* Note that this timer counts downward. */
|
||||
return base_time_us - now_downward_us;
|
||||
}
|
||||
|
||||
/* delay x useconds */
|
||||
void __udelay(unsigned long usec)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue