xref: /aosp_15_r20/external/coreboot/src/include/timestamp.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __TIMESTAMP_H__
4 #define __TIMESTAMP_H__
5 
6 #include <commonlib/timestamp_serialized.h> /* IWYU pragma: export */
7 #include <stdint.h>
8 
9 #if CONFIG(COLLECT_TIMESTAMPS)
10 /*
11  * timestamp_init() needs to be called once in *one* of the ENV_ROMSTAGE_OR_BEFORE
12  * stages (bootblock, romstage, verstage, etc). It's up to the chipset/arch
13  * to make the call in the earliest stage, otherwise some timestamps will be lost.
14  * For x86 ENV_BOOTBLOCK / ENV_SEPARATE_ROMSTAGE call must be made before CAR is torn down.
15  */
16 void timestamp_init(uint64_t base);
17 /*
18  * Add a new timestamp. For ENV_ROMSTAGE_OR_BEFORE, this timestamp will be stored
19  * inside REGION(timestamp) before cbmem comes online. For later stages, timestamps
20  * added before cbmem_[recovery|initialize] calls will be lost.
21  */
22 void timestamp_add(enum timestamp_id id, int64_t ts_time);
23 /* Calls timestamp_add with current timestamp. */
24 void timestamp_add_now(enum timestamp_id id);
25 
26 /* Apply a factor of N/M to all timestamps recorded so far. */
27 void timestamp_rescale_table(uint16_t N, uint16_t M);
28 
29 /*
30  * Get the time since boot scaled in microseconds. Therefore use the base time
31  * of the timestamps to get the initial value which is subtracted from
32  * current timestamp at call time. This will provide a more reliable value even
33  * if the TSC is not reset on soft reset or warm start.
34  */
35 uint32_t get_us_since_boot(void);
36 
37 #else
38 #define timestamp_init(base)
39 #define timestamp_add(id, time)
40 #define timestamp_add_now(id)
41 #define timestamp_rescale_table(N, M)
42 #define get_us_since_boot() 0
43 #endif
44 
45 /**
46  * Workaround for guard combination above.
47  */
48 #if CONFIG(COLLECT_TIMESTAMPS)
49 /* Implemented by the architecture code */
50 uint64_t timestamp_get(void);
51 #else
52 #define timestamp_get() 0
53 #endif
54 
55 uint64_t get_initial_timestamp(void);
56 /* Returns timestamp tick frequency in MHz. */
57 int timestamp_tick_freq_mhz(void);
58 
59 #endif
60