Blame view
lib/time.c
2.15 KB
3eb90bad6 Generic udelay() ... |
1 2 3 4 |
/* * (C) Copyright 2000-2009 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * |
1a4596601 Add GPL-2.0+ SPDX... |
5 |
* SPDX-License-Identifier: GPL-2.0+ |
3eb90bad6 Generic udelay() ... |
6 7 8 9 |
*/ #include <common.h> #include <watchdog.h> |
8dfafdde8 Introduce common ... |
10 11 |
#include <div64.h> #include <asm/io.h> |
3eb90bad6 Generic udelay() ... |
12 |
|
2108f4c4a config: consolida... |
13 14 15 |
#if CONFIG_SYS_HZ != 1000 #warning "CONFIG_SYS_HZ must be 1000 and should not be defined by platforms" #endif |
3eb90bad6 Generic udelay() ... |
16 17 18 |
#ifndef CONFIG_WD_PERIOD # define CONFIG_WD_PERIOD (10 * 1000 * 1000) /* 10 seconds default*/ #endif |
8dfafdde8 Introduce common ... |
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
DECLARE_GLOBAL_DATA_PTR; #ifdef CONFIG_SYS_TIMER_RATE ulong notrace get_tbclk(void) { return CONFIG_SYS_TIMER_RATE; } #endif #ifdef CONFIG_SYS_TIMER_COUNTER unsigned long notrace timer_read_counter(void) { #ifdef CONFIG_SYS_TIMER_COUNTS_DOWN return ~readl(CONFIG_SYS_TIMER_COUNTER); #else return readl(CONFIG_SYS_TIMER_COUNTER); #endif } #else |
65ba7add0 time: add weak an... |
38 |
extern unsigned long __weak timer_read_counter(void); |
8dfafdde8 Introduce common ... |
39 40 41 42 43 44 45 46 47 48 49 50 |
#endif unsigned long long __weak notrace get_ticks(void) { unsigned long now = timer_read_counter(); /* increment tbu if tbl has rolled over */ if (now < gd->timebase_l) gd->timebase_h++; gd->timebase_l = now; return ((unsigned long long)gd->timebase_h << 32) | gd->timebase_l; } |
d770f3961 time: fix gcc war... |
51 |
static unsigned long long notrace tick_to_time(uint64_t tick) |
8dfafdde8 Introduce common ... |
52 53 54 55 56 57 58 |
{ unsigned int div = get_tbclk(); tick *= CONFIG_SYS_HZ; do_div(tick, div); return tick; } |
de351d6be lib: time: add we... |
59 60 61 62 |
int __weak timer_init(void) { return 0; } |
8dfafdde8 Introduce common ... |
63 64 65 66 67 68 69 70 71 72 73 |
ulong __weak get_timer(ulong base) { return tick_to_time(get_ticks()) - base; } unsigned long __weak notrace timer_get_us(void) { return tick_to_time(get_ticks() * 1000); } static unsigned long long usec_to_tick(unsigned long usec) { |
2cd1b5722 time: fix usec_to... |
74 75 |
uint64_t tick = usec; tick *= get_tbclk(); |
8dfafdde8 Introduce common ... |
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
do_div(tick, 1000000); return tick; } void __weak __udelay(unsigned long usec) { unsigned long long tmp; ulong tmo; tmo = usec_to_tick(usec); tmp = get_ticks() + tmo; /* get current timestamp */ while (get_ticks() < tmp) /* loop till event */ /*NOP*/; } |
3eb90bad6 Generic udelay() ... |
91 92 93 94 95 96 97 98 99 100 101 102 103 |
/* ------------------------------------------------------------------------- */ 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); } |
c4c9fbeba consolidate mdela... |
104 105 106 107 108 109 |
void mdelay(unsigned long msec) { while (msec--) udelay(1000); } |