Add an update test to the test-app.

Fix bugs found from the update test.
pull/714/head
Thomas Cook 2026-03-01 19:31:57 -05:00 committed by Daniele Lacamera
parent f819c04dfd
commit 9078ede0fc
2 changed files with 40 additions and 7 deletions

View File

@ -355,7 +355,12 @@ static int RAMFUNCTION trailer_write(uint8_t part, uintptr_t addr, uint8_t val)
nvm_cached_sector = nvm_select_fresh_sector(part);
addr_read = addr_align - (nvm_cached_sector * NVM_CACHE_SIZE);
XMEMCPY(NVM_CACHE, (void*)addr_read, NVM_CACHE_SIZE);
#ifdef NO_DIRECT_READ_OF_ERASED_SECTOR
if (hal_flash_is_erased_at((uintptr_t)addr_read))
XMEMSET(NVM_CACHE, 0xFF, NVM_CACHE_SIZE);
else
#endif
XMEMCPY(NVM_CACHE, (void*)addr_read, NVM_CACHE_SIZE);
NVM_CACHE[addr_off] = val;
/* Calculate write address */
@ -399,7 +404,12 @@ static int RAMFUNCTION partition_magic_write(uint8_t part, uintptr_t addr)
nvm_cached_sector = nvm_select_fresh_sector(part);
addr_read = base - (nvm_cached_sector * NVM_CACHE_SIZE);
addr_write = base - (!nvm_cached_sector * NVM_CACHE_SIZE);
XMEMCPY(NVM_CACHE, (void*)addr_read, NVM_CACHE_SIZE);
#ifdef NO_DIRECT_READ_OF_ERASED_SECTOR
if (hal_flash_is_erased_at((uintptr_t)addr_read))
XMEMSET(NVM_CACHE, 0xFF, NVM_CACHE_SIZE);
else
#endif
XMEMCPY(NVM_CACHE, (void*)addr_read, NVM_CACHE_SIZE);
XMEMCPY(NVM_CACHE + off, &wolfboot_magic_trail, sizeof(uint32_t));
ret = hal_flash_write(addr_write, NVM_CACHE, WOLFBOOT_SECTOR_SIZE);
if (ret != 0)
@ -852,12 +862,17 @@ void RAMFUNCTION wolfBoot_update_trigger(void)
#else
uint32_t magic = WOLFBOOT_MAGIC_TRAIL;
uint32_t offset = SECTOR_FLAGS_SIZE;
#ifdef FLAGS_HOME
# ifdef FLAGS_HOME
offset -= (PART_BOOT_ENDFLAGS - PART_UPDATE_ENDFLAGS);
#endif
# endif
selSec = nvm_select_fresh_sector(PART_UPDATE);
XMEMCPY(NVM_CACHE, (uint8_t*)lastSector - WOLFBOOT_SECTOR_SIZE * selSec,
WOLFBOOT_SECTOR_SIZE);
# ifdef NO_DIRECT_READ_OF_ERASED_SECTOR
if (hal_flash_is_erased_at((uintptr_t)lastSector - WOLFBOOT_SECTOR_SIZE * selSec))
XMEMSET(NVM_CACHE, 0xFF, WOLFBOOT_SECTOR_SIZE);
else
# endif
XMEMCPY(NVM_CACHE, (uint8_t*)lastSector - WOLFBOOT_SECTOR_SIZE * selSec,
WOLFBOOT_SECTOR_SIZE);
/* write to the non selected sector */
hal_flash_erase(lastSector - WOLFBOOT_SECTOR_SIZE * !selSec,
WOLFBOOT_SECTOR_SIZE);
@ -872,7 +887,6 @@ void RAMFUNCTION wolfBoot_update_trigger(void)
#endif
}
if (FLAGS_UPDATE_EXT()) {
ext_flash_lock();
} else {

View File

@ -87,8 +87,27 @@ void main(void)
wolfBoot_printf("Hello from firmware version %d\n", boot_ver);
if (boot_ver == 1) {
uint32_t update_ver;
/* blue on */
GPIO_PinWrite(GPIO, 1, BLUE_LED, 0);
#ifdef WOLFCRYPT_SECURE_MODE
update_ver = wolfBoot_nsc_update_firmware_version();
#else
update_ver = wolfBoot_update_firmware_version();
#endif
if (update_ver != 0) {
wolfBoot_printf("Update firmware detected, version: 0x%lx\n", update_ver);
wolfBoot_printf("Triggering update...\n");
#ifdef WOLFCRYPT_SECURE_MODE
wolfBoot_nsc_update_trigger();
#else
wolfBoot_update_trigger();
#endif
wolfBoot_printf("...done. Reboot to apply.\n");
}
}
else {
/* green on */