diff options
author | Julius Werner <jwerner@chromium.org> | 2014-12-02 20:51:19 -0800 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-04-14 09:03:40 +0200 |
commit | a7d924412a4300e91b3bd6eb3581b954b02f8d37 (patch) | |
tree | 0d9ee617776b8b24a47a980562aecaf0f5159a0a /src/lib | |
parent | b5995b5872803838e7f3e03d3fb4f64a290d978f (diff) |
timestamps: You can never have enough of them!
Now that we have timestamps in pre-RAM stages, let's actually make use
of them. This patch adds several timestamps to both the bootblock and
especially the verstage to allow more fine-grained boot time tracking.
Some of the introduced timestamps can appear more than once per boot.
This doesn't seem to be a problem for both coreboot and the cbmem
utility, and the context makes it clear which operation was timestamped
at what point.
Also simplifies cbmem's timestamp printing routine a bit, fixing a
display bug when a timestamp had a section of exactly ",000," in it
(e.g. 1,000,185).
BRANCH=None
BUG=None
TEST=Booted Pinky, Blaze and Falco, confirmed that all timestamps show
up and contained sane values. Booted Storm (no timestamps here since it
doesn't support pre-RAM timestamps yet).
Change-Id: I7f4d6aba3ebe3db0d003c7bcb2954431b74961b3
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: 7a2ce81722aba85beefcc6c81f9908422b8da8fa
Original-Change-Id: I5979bfa9445a9e0aba98ffdf8006c21096743456
Original-Signed-off-by: Julius Werner <jwerner@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/234063
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/9608
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/loaders/load_and_run_romstage.c | 3 | ||||
-rw-r--r-- | src/lib/lzma.c | 4 | ||||
-rw-r--r-- | src/lib/timestamp.c | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/loaders/load_and_run_romstage.c b/src/lib/loaders/load_and_run_romstage.c index 8467e90129..9bd9603bab 100644 --- a/src/lib/loaders/load_and_run_romstage.c +++ b/src/lib/loaders/load_and_run_romstage.c @@ -24,6 +24,7 @@ #include <cbfs.h> #include <halt.h> #include <program_loading.h> +#include <timestamp.h> void run_romstage(void) { @@ -32,11 +33,13 @@ void run_romstage(void) .type = PROG_ROMSTAGE, }; + timestamp_add_now(TS_START_COPYROM); if (cbfs_load_prog_stage(CBFS_DEFAULT_MEDIA, &romstage) < 0) { if (IS_ENABLED(CONFIG_BOOTBLOCK_CONSOLE)) die("Couldn't load romstage.\n"); halt(); } + timestamp_add_now(TS_END_COPYROM); prog_run(&romstage); } diff --git a/src/lib/lzma.c b/src/lib/lzma.c index 8efa1e6e1a..89e4d97600 100644 --- a/src/lib/lzma.c +++ b/src/lib/lzma.c @@ -12,6 +12,7 @@ #include <console/console.h> #include <string.h> #include <lib.h> +#include <timestamp.h> #include "lzmadecode.h" @@ -27,6 +28,8 @@ unsigned long ulzma(unsigned char * src, unsigned char * dst) MAYBE_STATIC unsigned char scratchpad[15980]; unsigned char *cp; + /* Note: these timestamps aren't useful for memory-mapped media (x86) */ + timestamp_add_now(TS_START_ULZMA); memcpy(properties, src, LZMA_PROPERTIES_SIZE); /* The outSize in LZMA stream is a 64bit integer stored in little-endian * (ref: lzma.cc@LZMACompress: put_64). To prevent accessing by @@ -50,5 +53,6 @@ unsigned long ulzma(unsigned char * src, unsigned char * dst) printk(BIOS_WARNING, "lzma: Decoding error = %d\n", res); return 0; } + timestamp_add_now(TS_END_ULZMA); return outSize; } diff --git a/src/lib/timestamp.c b/src/lib/timestamp.c index 67635f87ed..5846781706 100644 --- a/src/lib/timestamp.c +++ b/src/lib/timestamp.c @@ -25,7 +25,7 @@ #include <arch/early_variables.h> #include <smp/node.h> -#define MAX_TIMESTAMPS 30 +#define MAX_TIMESTAMPS 60 static struct timestamp_table* ts_table_p CAR_GLOBAL = NULL; static uint64_t ts_basetime CAR_GLOBAL = 0; |