util/cbmem: accumulate total time for all entries

Display the total accumulated time using each timestamp
entry. It purposefully doesn't take into account the first
timestamp because that can be a platform dependent value
that may not contribute to the concept of "total".

BUG=None
BRANCH=None
TEST=Ran cbmem on glados where TSC doesn't reset to 0 on
     reboots. Clear total value given at end.

Original-Change-Id: Idddb8b88d3aaad11d72c58b18e8fd9fd1447a30e
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/291480
Original-Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Original-Trybot-Ready: David James <davidjames@chromium.org>

Change-Id: I79a0954d3b738323aaebb3e05171bcf639e5d977
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/11202
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Aaron Durbin 2015-08-06 13:52:08 -05:00
parent 079df39285
commit 799bf781fd
1 changed files with 14 additions and 3 deletions

View File

@ -476,10 +476,11 @@ static const struct timestamp_id_to_name {
{ TS_FSP_AFTER_FINALIZE, "returning from FspNotify(ReadyToBoot)" } { TS_FSP_AFTER_FINALIZE, "returning from FspNotify(ReadyToBoot)" }
}; };
void timestamp_print_entry(uint32_t id, uint64_t stamp, uint64_t prev_stamp) uint64_t timestamp_print_entry(uint32_t id, uint64_t stamp, uint64_t prev_stamp)
{ {
int i; int i;
const char *name; const char *name;
uint64_t step_time;
name = "<unknown>"; name = "<unknown>";
for (i = 0; i < ARRAY_SIZE(timestamp_ids); i++) { for (i = 0; i < ARRAY_SIZE(timestamp_ids); i++) {
@ -492,12 +493,15 @@ void timestamp_print_entry(uint32_t id, uint64_t stamp, uint64_t prev_stamp)
printf("%4d:", id); printf("%4d:", id);
printf("%-50s", name); printf("%-50s", name);
print_norm(arch_convert_raw_ts_entry(stamp)); print_norm(arch_convert_raw_ts_entry(stamp));
step_time = arch_convert_raw_ts_entry(stamp - prev_stamp);
if (prev_stamp) { if (prev_stamp) {
printf(" ("); printf(" (");
print_norm(arch_convert_raw_ts_entry(stamp - prev_stamp)); print_norm(step_time);
printf(")"); printf(")");
} }
printf("\n"); printf("\n");
return step_time;
} }
/* dump the timestamp table */ /* dump the timestamp table */
@ -507,6 +511,7 @@ static void dump_timestamps(void)
struct timestamp_table *tst_p; struct timestamp_table *tst_p;
size_t size; size_t size;
uint64_t prev_stamp; uint64_t prev_stamp;
uint64_t total_time;
if (timestamps.tag != LB_TAG_TIMESTAMPS) { if (timestamps.tag != LB_TAG_TIMESTAMPS) {
fprintf(stderr, "No timestamps found in coreboot table.\n"); fprintf(stderr, "No timestamps found in coreboot table.\n");
@ -527,16 +532,22 @@ static void dump_timestamps(void)
timestamp_print_entry(0, tst_p->base_time, prev_stamp); timestamp_print_entry(0, tst_p->base_time, prev_stamp);
prev_stamp = tst_p->base_time; prev_stamp = tst_p->base_time;
total_time = 0;
for (i = 0; i < tst_p->num_entries; i++) { for (i = 0; i < tst_p->num_entries; i++) {
uint64_t stamp; uint64_t stamp;
const struct timestamp_entry *tse = &tst_p->entries[i]; const struct timestamp_entry *tse = &tst_p->entries[i];
/* Make all timestamps absolute. */ /* Make all timestamps absolute. */
stamp = tse->entry_stamp + tst_p->base_time; stamp = tse->entry_stamp + tst_p->base_time;
timestamp_print_entry(tse->entry_id, stamp, prev_stamp); total_time += timestamp_print_entry(tse->entry_id,
stamp, prev_stamp);
prev_stamp = stamp; prev_stamp = stamp;
} }
printf("\nTotal Time: ");
print_norm(total_time);
printf("\n");
unmap_memory(); unmap_memory();
} }