chromeos: Add timestamps to measure VPD read times

This patch adds three timestamps to coreboot and the cbmem utility that
track the time required to read in the Chrome OS Vital Product Data
(VPD) blocks (RO and RW). It's useful to account for these like all
other large flash accesses, since their size is variable.

BRANCH=None
BUG=None
TEST=Booted Oak, found my weird 100ms gap at the start of ramstage
properly accounted for.

Change-Id: I2024ed4f7d5e5ae81df9ab5293547cb5a10ff5e0
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: b97288b5ac67ada56e2ee7b181b28341d54b7234
Original-Change-Id: Ie69c1a4ddb6bd3f1094b3880201d53f1b5373aef
Original-Signed-off-by: Julius Werner <jwerner@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/322831
Original-Reviewed-by: David Hendricks <dhendrix@chromium.org>
Reviewed-on: https://review.coreboot.org/13139
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
Julius Werner 2016-01-20 18:01:15 -08:00 committed by Patrick Georgi
parent 95bfcaecf9
commit 4f7a3614cd
3 changed files with 12 additions and 0 deletions

View File

@ -69,6 +69,9 @@ enum timestamp_id {
TS_DONE_LOADING = 508, TS_DONE_LOADING = 508,
TS_DONE_HASHING = 509, TS_DONE_HASHING = 509,
TS_END_HASH_BODY = 510, TS_END_HASH_BODY = 510,
TS_START_COPYVPD = 550,
TS_END_COPYVPD_RO = 551,
TS_END_COPYVPD_RW = 552,
/* 950+ reserved for vendorcode extensions (950-999: intel/fsp) */ /* 950+ reserved for vendorcode extensions (950-999: intel/fsp) */
TS_FSP_MEMORY_INIT_START = 950, TS_FSP_MEMORY_INIT_START = 950,

View File

@ -10,6 +10,7 @@
#include <fmap.h> #include <fmap.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <timestamp.h>
#include "cros_vpd.h" #include "cros_vpd.h"
#include "lib_vpd.h" #include "lib_vpd.h"
@ -83,6 +84,8 @@ static void cbmem_add_cros_vpd(int is_recovery)
int32_t ro_vpd_base = 0, rw_vpd_base = 0; int32_t ro_vpd_base = 0, rw_vpd_base = 0;
int32_t ro_vpd_size, rw_vpd_size; int32_t ro_vpd_size, rw_vpd_size;
timestamp_add_now(TS_START_COPYVPD);
ro_vpd_size = get_vpd_size("RO_VPD", &ro_vpd_base); ro_vpd_size = get_vpd_size("RO_VPD", &ro_vpd_base);
rw_vpd_size = get_vpd_size("RW_VPD", &rw_vpd_base); rw_vpd_size = get_vpd_size("RW_VPD", &rw_vpd_base);
@ -123,6 +126,7 @@ static void cbmem_add_cros_vpd(int is_recovery)
__func__); __func__);
ro_vpd_size = 0; ro_vpd_size = 0;
} }
timestamp_add_now(TS_END_COPYVPD_RO);
} }
if (rw_vpd_size) { if (rw_vpd_size) {
@ -143,6 +147,7 @@ static void cbmem_add_cros_vpd(int is_recovery)
"%s: Reading RW_VPD FMAP section failed.\n", "%s: Reading RW_VPD FMAP section failed.\n",
__func__); __func__);
} }
timestamp_add_now(TS_END_COPYVPD_RW);
} }
} }

View File

@ -520,6 +520,10 @@ static const struct timestamp_id_to_name {
{ TS_DONE_HASHING, "finished calculating body hash (SHA2)" }, { TS_DONE_HASHING, "finished calculating body hash (SHA2)" },
{ TS_END_HASH_BODY, "finished verifying body signature (RSA)" }, { TS_END_HASH_BODY, "finished verifying body signature (RSA)" },
{ TS_START_COPYVPD, "starting to load Chrome OS VPD" },
{ TS_END_COPYVPD_RO, "finished loading Chrome OS VPD (RO)" },
{ TS_END_COPYVPD_RW, "finished loading Chrome OS VPD (RW)" },
{ TS_DC_START, "depthcharge start" }, { TS_DC_START, "depthcharge start" },
{ TS_RO_PARAMS_INIT, "RO parameter init" }, { TS_RO_PARAMS_INIT, "RO parameter init" },
{ TS_RO_VB_INIT, "RO vboot init" }, { TS_RO_VB_INIT, "RO vboot init" },