1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #15912 from fjmolinas/pr_riotboot_flashwrite_invalidate_checksum

sys/riotboot/flashwrite: when invalidating erase checksum as well
This commit is contained in:
benpicco 2021-02-09 13:36:19 +01:00 committed by GitHub
commit 27c5978710
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 8 deletions

View File

@ -116,6 +116,11 @@ extern "C" {
#define FLASHPAGE_SIZE (128U)
#endif
#if defined(CPU_FAM_STM32L0) || defined(CPU_FAM_STM32L1) || \
defined(CPU_FAM_STM32L4)
#define FLASHPAGE_ERASE_STATE (0x00U)
#endif
#ifdef FLASHPAGE_SIZE
#define FLASHPAGE_NUMOF (STM32_FLASHSIZE / FLASHPAGE_SIZE)
#endif

View File

@ -85,6 +85,15 @@ extern "C" {
#define FLASHPAGE_WRITE_BLOCK_ALIGNMENT
#endif
/**
* @def FLASHPAGE_ERASE_STATE
*
* @brief State of an erased byte in memory
*/
#if defined(DOXYGEN) || !defined(FLASHPAGE_ERASE_STATE)
#define FLASHPAGE_ERASE_STATE (0xFFU)
#endif
/**
* @def PERIPH_FLASHPAGE_CUSTOM_PAGESIZES
*

View File

@ -30,11 +30,6 @@
#define LOG_PREFIX "riotboot_flashwrite: "
#include "log.h"
/**
* @brief Magic number used to invalidate a slot
*/
#define INVALIDATE_HDR 0xAA
static inline size_t min(size_t a, size_t b)
{
return a <= b ? a : b;
@ -178,10 +173,14 @@ int riotboot_flashwrite_invalidate(int slot)
return -2;
}
uint8_t data_flash[4];
memset(data_flash, INVALIDATE_HDR, sizeof(data_flash));
/* invalidate header (checksum and magic number must be invalidated),
write the whole header to avoid running in memory alignment issues
with FLASHPAGE_WRITE_BLOCK_SIZE */
riotboot_hdr_t tmp_hdr;
memset(&tmp_hdr, (~FLASHPAGE_ERASE_STATE), sizeof(riotboot_hdr_t));
flashpage_write((void *)riotboot_slot_get_hdr(slot), data_flash, sizeof(data_flash));
flashpage_write((void *)riotboot_slot_get_hdr(slot), &tmp_hdr,
sizeof(riotboot_hdr_t));
return 0;
}