summaryrefslogtreecommitdiff
path: root/chip/g/upgrade.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/g/upgrade.c')
-rw-r--r--chip/g/upgrade.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/chip/g/upgrade.c b/chip/g/upgrade.c
index 03c6a0450a..ca0fe07a8f 100644
--- a/chip/g/upgrade.c
+++ b/chip/g/upgrade.c
@@ -36,6 +36,8 @@ static int header_restored(uint32_t offset)
{
struct SignedHeader *header;
uint32_t new_size;
+ int rv;
+ bool ro_header;
header = (struct SignedHeader *)(CONFIG_PROGRAM_MEMORY_BASE + offset);
@@ -51,13 +53,20 @@ static int header_restored(uint32_t offset)
if (new_size > CONFIG_RW_SIZE)
return 0;
- if ((offset == CONFIG_RO_MEM_OFF) || (offset == CHIP_RO_B_MEM_OFF))
+ ro_header = (offset == CONFIG_RO_MEM_OFF) ||
+ (offset == CHIP_RO_B_MEM_OFF);
+ if (ro_header)
flash_open_ro_window(offset, sizeof(struct SignedHeader));
- return flash_physical_write(offset + offsetof(struct SignedHeader,
- image_size),
- sizeof(header->image_size),
- (char *)&new_size) == EC_SUCCESS;
+ /* rv is set to TRUE on success. */
+ rv = flash_physical_write(offset + offsetof(struct SignedHeader,
+ image_size),
+ sizeof(header->image_size),
+ (char *)&new_size) == EC_SUCCESS;
+ if (ro_header)
+ flash_close_ro_window();
+
+ return rv;
}
/*