diff options
-rw-r--r-- | src/arch/x86/postcar.c | 5 | ||||
-rw-r--r-- | src/include/timestamp.h | 5 | ||||
-rw-r--r-- | src/lib/timestamp.c | 47 |
3 files changed, 17 insertions, 40 deletions
diff --git a/src/arch/x86/postcar.c b/src/arch/x86/postcar.c index 155c41336b..add72c2cda 100644 --- a/src/arch/x86/postcar.c +++ b/src/arch/x86/postcar.c @@ -31,7 +31,10 @@ void main(void) console_init(); - /* Recover cbmem so infrastruture using it is functional. */ + /* + * CBMEM needs to be recovered because timestamps rely on + * the cbmem infrastructure being around. Explicitly recover it. + */ cbmem_initialize(); timestamp_add_now(TS_START_POSTCAR); diff --git a/src/include/timestamp.h b/src/include/timestamp.h index 951032c1e7..f20fc6800a 100644 --- a/src/include/timestamp.h +++ b/src/include/timestamp.h @@ -28,8 +28,9 @@ */ void timestamp_init(uint64_t base); /* - * Add a new timestamp. Depending on cbmem is available or not, this timestamp - * will be stored to cbmem / timestamp cache. + * Add a new timestamp. For ENV_ROMSTAGE_OR_BEFORE, this timestamp will be stored + * inside REGION(timestamp) before cbmem comes online. For later stages, timestamps + * added before cbmem_[recovery|initialize] calls will be lost. */ void timestamp_add(enum timestamp_id id, uint64_t ts_time); /* Calls timestamp_add with current timestamp. */ diff --git a/src/lib/timestamp.c b/src/lib/timestamp.c index b647ca276c..dcb3124567 100644 --- a/src/lib/timestamp.c +++ b/src/lib/timestamp.c @@ -27,34 +27,9 @@ #define MAX_TIMESTAMPS 192 -/* When changing this number, adjust TIMESTAMP() size ASSERT() in memlayout.h */ -#define MAX_BSS_TIMESTAMP_CACHE 16 - -struct __packed timestamp_cache { - struct timestamp_table table; - /* The struct timestamp_table has a 0 length array as its last field. - * The following 'entries' array serves as the storage space for the - * cache when allocated in the BSS. */ - struct timestamp_entry entries[MAX_BSS_TIMESTAMP_CACHE]; -}; - DECLARE_OPTIONAL_REGION(timestamp); -#if ENV_ROMSTAGE_OR_BEFORE -#define USE_TIMESTAMP_REGION (REGION_SIZE(timestamp) > 0) -#else -#define USE_TIMESTAMP_REGION 0 -#endif - -/* Currently we never store timestamp cache in .bss. */ -#define TIMESTAMP_CACHE_IN_BSS 0 - -/* - * Storage of cache entries prior to cbmem coming online. - */ -static struct timestamp_cache timestamp_cache; - -/* This points to the active timestamp_table and can change within a stage. +/* This points to the active timestamp_table and can change within a stage as CBMEM comes available. */ static struct timestamp_table *glob_ts_table CAR_GLOBAL; @@ -62,24 +37,22 @@ static void timestamp_cache_init(struct timestamp_table *ts_cache, uint64_t base) { ts_cache->num_entries = 0; - ts_cache->max_entries = MAX_BSS_TIMESTAMP_CACHE; ts_cache->base_time = base; - - if (USE_TIMESTAMP_REGION) - ts_cache->max_entries = (REGION_SIZE(timestamp) - - offsetof(struct timestamp_table, entries)) - / sizeof(struct timestamp_entry); + ts_cache->max_entries = (REGION_SIZE(timestamp) - + offsetof(struct timestamp_table, entries)) + / sizeof(struct timestamp_entry); } static struct timestamp_table *timestamp_cache_get(void) { struct timestamp_table *ts_cache = NULL; - if (TIMESTAMP_CACHE_IN_BSS) { - ts_cache = ×tamp_cache.table; - } else if (USE_TIMESTAMP_REGION) { - if (REGION_SIZE(timestamp) < sizeof(*ts_cache)) - BUG(); + if (!ENV_ROMSTAGE_OR_BEFORE) + return NULL; + + if (REGION_SIZE(timestamp) < sizeof(*ts_cache)) { + BUG(); + } else { ts_cache = (void *)_timestamp; } |