diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-07-24 09:14:43 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-07-24 15:55:31 -0700 |
commit | 319d433d6864945c19103f0a779467f66d599c67 (patch) | |
tree | 05586e006318dfc71f9a712120864e4d39cdc7c2 /common/system_common.c | |
parent | 187ea8f4eaee59efd0d3c636dfb2fc108e11d7f6 (diff) | |
download | chrome-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.c | 35 |
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; } |