summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2016-08-18 09:27:44 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-08-21 15:52:12 -0700
commit665fa8bc054404152162320c27f7262d618a30a2 (patch)
tree1ee3d036046a55a7fa56cd13abd394e25e6f91db
parenta7c6942f73159c21bd34bc3c4844dcd0e15ef654 (diff)
downloadchrome-ec-665fa8bc054404152162320c27f7262d618a30a2.tar.gz
tpm: limit the length of the string reported through TPM_FW_VER
The version string reported through TPM_FW_VER register has become way too long, it takes too much time to transmit at startup, especially at i2c speeds. Let's limit it to the essentials: header versions and hashes of the active RO and RW sections. BRANCH=none BUG=chrome-os-partner:49954 TEST=verified version in the firmware log localhost ~ # grep cr50 /sys/firmware/log Firmware version: B2:0 RO_A:0.0.1/84e2dde7 RW_A:0.0.3/cr50_v1.1.5106-f7349c9+ Change-Id: Ic391f90673fe21c0100b776944f6efc080213ff3 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/372380 Reviewed-by: Scott Collyer <scollyer@chromium.org>
-rw-r--r--common/tpm_registers.c45
1 files changed, 9 insertions, 36 deletions
diff --git a/common/tpm_registers.c b/common/tpm_registers.c
index 6811c1d758..a7dfa84963 100644
--- a/common/tpm_registers.c
+++ b/common/tpm_registers.c
@@ -115,7 +115,7 @@ static int tpm_fw_ver_index;
* cr50 image components. The number is somewhat arbitrary, calculated for the
* worst case scenario when all compontent trees are 'dirty'.
*/
-static uint8_t tpm_fw_ver[280];
+static uint8_t tpm_fw_ver[80];
/*
* We need to be able to report firmware version to the host, both RO and RW
@@ -130,46 +130,19 @@ static void set_version_string(void)
active_ro = system_get_ro_image_copy();
active_rw = system_get_image_copy();
- snprintf(tpm_fw_ver, sizeof(tpm_fw_ver),
- "RO_A:%s %s",
- (active_ro == SYSTEM_IMAGE_RO ? "*" : ""),
- system_get_version(SYSTEM_IMAGE_RO));
- offset = strlen(tpm_fw_ver);
- if (offset == sizeof(tpm_fw_ver) - 1)
- return;
-
- snprintf(tpm_fw_ver + offset,
- sizeof(tpm_fw_ver) - offset,
- " RO_B:%s %s",
- (active_ro == SYSTEM_IMAGE_RO_B ? "*" : ""),
- system_get_version(SYSTEM_IMAGE_RO_B));
- offset = strlen(tpm_fw_ver);
- if (offset == sizeof(tpm_fw_ver) - 1)
- return;
-
- snprintf(tpm_fw_ver + offset,
- sizeof(tpm_fw_ver) - offset,
- " RW_A:%s %s",
- (active_rw == SYSTEM_IMAGE_RW ? "*" : ""),
- system_get_version(SYSTEM_IMAGE_RW));
+ snprintf(tpm_fw_ver, sizeof(tpm_fw_ver), "%s:%d RO_%c:%s",
+ system_get_chip_revision(),
+ system_get_board_version(),
+ (active_ro == SYSTEM_IMAGE_RO ? 'A' : 'B'),
+ system_get_version(active_ro));
offset = strlen(tpm_fw_ver);
if (offset == sizeof(tpm_fw_ver) - 1)
return;
snprintf(tpm_fw_ver + offset,
- sizeof(tpm_fw_ver) - offset,
- " RW_B:%s %s",
- (active_rw == SYSTEM_IMAGE_RW_B ? "*" : ""),
- system_get_version(SYSTEM_IMAGE_RW_B));
- offset = strlen(tpm_fw_ver);
- if (offset == sizeof(tpm_fw_ver) - 1)
- return;
-
- snprintf(tpm_fw_ver + offset, sizeof(tpm_fw_ver) - offset,
- "\n%s:%d %s",
- system_get_chip_revision(),
- system_get_board_version(),
- system_get_build_info());
+ sizeof(tpm_fw_ver) - offset, " RW_%c:%s",
+ (active_rw == SYSTEM_IMAGE_RW ? 'A' : 'B'),
+ system_get_version(active_rw));
}
static void set_tpm_state(enum tpm_states state)