diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2016-08-18 09:27:44 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-08-21 15:52:12 -0700 |
commit | 665fa8bc054404152162320c27f7262d618a30a2 (patch) | |
tree | 1ee3d036046a55a7fa56cd13abd394e25e6f91db | |
parent | a7c6942f73159c21bd34bc3c4844dcd0e15ef654 (diff) | |
download | chrome-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.c | 45 |
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) |