diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2017-01-12 09:40:10 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-01-30 16:48:40 -0800 |
commit | 7cbb815732d7434f5985d3b50a869aa71ba5c507 (patch) | |
tree | 5c8714c956b96cbe3c6793d31b338e68afbacc79 /chip | |
parent | 927e01da02ab68c304d95508df5ba0b50f8bb960 (diff) | |
download | chrome-ec-7cbb815732d7434f5985d3b50a869aa71ba5c507.tar.gz |
version: Store image size data in version struct
Store our image size (known at build time) in our version struct (now
renamed to image_data). This will allow us to more efficiently determine
the size of an image in a follow-up CL.
Note that compatibility is broken for old ROs that do not include this
CL.
BUG=chromium:577915
TEST=Verify on kevin + lars + lars_pd that stored image size matches
output of system_get_image_used() for both RO and RW images.
BRANCH=None
Change-Id: I49ea5fc27a7f11f66daba485a87d0dfe7d0c770f
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/427408
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r-- | chip/g/system.c | 15 | ||||
-rw-r--r-- | chip/mec1322/lfw/ec_lfw.c | 2 | ||||
-rw-r--r-- | chip/mec1322/lfw/ec_lfw.ld | 2 |
3 files changed, 11 insertions, 8 deletions
diff --git a/chip/g/system.c b/chip/g/system.c index ad553168c5..041ee8e9b5 100644 --- a/chip/g/system.c +++ b/chip/g/system.c @@ -259,7 +259,7 @@ static char vers_str[MAX_RO_VER_LEN]; const char *system_get_version(enum system_image_copy_t copy) { - const struct version_struct *v; + const struct image_data *data; const struct SignedHeader *h; enum system_image_copy_t this_copy; uintptr_t vaddr, delta; @@ -290,7 +290,7 @@ const char *system_get_version(enum system_image_copy_t copy) if (copy == this_copy) { snprintf(vers_str, sizeof(vers_str), "%d.%d.%d/%s", h->epoch_, h->major_, h->minor_, - version_data.version); + current_image_data.version); return vers_str; } @@ -299,7 +299,7 @@ const char *system_get_version(enum system_image_copy_t copy) * puts the version string right after the reset vectors, so * it's at the same relative offset. Measure that offset here. */ - delta = (uintptr_t)&version_data - vaddr; + delta = (uintptr_t)¤t_image_data - vaddr; /* Now look at that offset in the requested image */ vaddr = get_program_memory_addr(copy); @@ -307,17 +307,18 @@ const char *system_get_version(enum system_image_copy_t copy) break; h = (const struct SignedHeader *)vaddr; vaddr += delta; - v = (const struct version_struct *)vaddr; + data = (const struct image_data *)vaddr; /* * Make sure the version struct cookies match before returning * the version string. */ - if (v->cookie1 == version_data.cookie1 && - v->cookie2 == version_data.cookie2 && + if (data->cookie1 == current_image_data.cookie1 && + data->cookie2 == current_image_data.cookie2 && h->magic) { /* Corrupted header's magic is set to zero. */ snprintf(vers_str, sizeof(vers_str), "%d.%d.%d/%s", - h->epoch_, h->major_, h->minor_, v->version); + h->epoch_, h->major_, h->minor_, + data->version); return vers_str; } default: diff --git a/chip/mec1322/lfw/ec_lfw.c b/chip/mec1322/lfw/ec_lfw.c index 6824d10686..b99d33d011 100644 --- a/chip/mec1322/lfw/ec_lfw.c +++ b/chip/mec1322/lfw/ec_lfw.c @@ -256,7 +256,7 @@ void lfw_main() spi_enable(CONFIG_SPI_FLASH_PORT, 1); uart_puts("littlefw "); - uart_puts(version_data.version); + uart_puts(current_image_data.version); uart_puts("\n"); switch (system_get_image_copy()) { diff --git a/chip/mec1322/lfw/ec_lfw.ld b/chip/mec1322/lfw/ec_lfw.ld index 55b5fda390..adb8b30bba 100644 --- a/chip/mec1322/lfw/ec_lfw.ld +++ b/chip/mec1322/lfw/ec_lfw.ld @@ -53,4 +53,6 @@ SECTIONS . = ORIGIN(SRAM) + LENGTH(SRAM) - 1; BYTE(0xFF); /* emit at least a byte to make linker happy */ } + + __image_size = LOADADDR(.text) + SIZEOF(.text) - ORIGIN(VECTOR); } |