summaryrefslogtreecommitdiff
path: root/common/system_common.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-07-24 09:14:43 -0700
committerGerrit <chrome-bot@google.com>2012-07-24 15:55:31 -0700
commit319d433d6864945c19103f0a779467f66d599c67 (patch)
tree05586e006318dfc71f9a712120864e4d39cdc7c2 /common/system_common.c
parent187ea8f4eaee59efd0d3c636dfb2fc108e11d7f6 (diff)
downloadchrome-ec-319d433d6864945c19103f0a779467f66d599c67.tar.gz
Calculate the hash only of the actual RW code
No need to hash a bunch of 0xff's at the end. We explicitly set a 0xea byte after the end of the code in firmware_image.lds.S. BUG=chrome-os-partner:11087 TEST=look for the hash start line in the EC debug output: [0.011543 hash start 0x00014000 0x00011590] The second number is the code size. It should be the same size as ec.RW.bin, instead of 0x14000. Change-Id: Ibc94851dc1a09eb46cad46bb97dc5762f9c521f0 Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/28300
Diffstat (limited to 'common/system_common.c')
-rw-r--r--common/system_common.c35
1 files changed, 30 insertions, 5 deletions
diff --git a/common/system_common.c b/common/system_common.c
index 22e42272c2..2fd978d6cd 100644
--- a/common/system_common.c
+++ b/common/system_common.c
@@ -31,7 +31,6 @@ struct jump_tag {
uint8_t data_version;
};
-
/*
* Data passed between the current image and the next one when jumping between
* images.
@@ -230,6 +229,32 @@ enum system_image_copy_t system_get_image_copy(void)
return SYSTEM_IMAGE_UNKNOWN;
}
+int system_get_image_used(enum system_image_copy_t copy)
+{
+ const uint8_t *image;
+ int size = 0;
+
+ if (copy == SYSTEM_IMAGE_RO) {
+ image = (const uint8_t *)CONFIG_SECTION_RO_OFF;
+ size = CONFIG_SECTION_RO_SIZE;
+ } else if (copy == SYSTEM_IMAGE_RW) {
+ image = (const uint8_t *)CONFIG_SECTION_RW_OFF;
+ size = CONFIG_SECTION_RW_SIZE;
+ }
+
+ if (size <= 0)
+ return 0;
+
+ /* If the last byte isn't 0xff, the image is completely full */
+ if (image[size - 1] != 0xff)
+ return size;
+
+ /* Scan backwards looking for 0xea byte */
+ for (size--; size > 0 && image[size] != 0xea; size--)
+ ;
+
+ return size;
+}
/* Returns true if the given range is overlapped with the active image.
*
@@ -606,11 +631,11 @@ DECLARE_CONSOLE_COMMAND(hibernate, command_hibernate,
static int command_version(int argc, char **argv)
{
- ccprintf("Chip: %s %s %s\n", system_get_chip_vendor(),
+ ccprintf("Chip: %s %s %s\n", system_get_chip_vendor(),
system_get_chip_name(), system_get_chip_revision());
- ccprintf("Board: %d\n", system_get_board_version());
- ccprintf("RO: %s\n", system_get_version(SYSTEM_IMAGE_RO));
- ccprintf("RW: %s\n", system_get_version(SYSTEM_IMAGE_RW));
+ ccprintf("Board: %d\n", system_get_board_version());
+ ccprintf("RO: %s\n", system_get_version(SYSTEM_IMAGE_RO));
+ ccprintf("RW: %s\n", system_get_version(SYSTEM_IMAGE_RW));
ccprintf("Build: %s\n", system_get_build_info());
return EC_SUCCESS;
}