summaryrefslogtreecommitdiff
path: root/chip
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-01-12 09:40:10 -0800
committerchrome-bot <chrome-bot@chromium.org>2017-01-30 16:48:40 -0800
commit7cbb815732d7434f5985d3b50a869aa71ba5c507 (patch)
tree5c8714c956b96cbe3c6793d31b338e68afbacc79 /chip
parent927e01da02ab68c304d95508df5ba0b50f8bb960 (diff)
downloadchrome-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.c15
-rw-r--r--chip/mec1322/lfw/ec_lfw.c2
-rw-r--r--chip/mec1322/lfw/ec_lfw.ld2
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)&current_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);
}