Test erased flash with "flash_area_read_is_empty()"
Mynewt has recently added an encrypted flash layer driver, that runs
transparently on any flash, handling reads and writes, and bypassing
other flash operations to the HW driver. As a result of this change,
checking for erased data cannot be done by read + compare to erased_val
but need to be routed to an empty check on the lower level. To do this
Mynewt added a new flash_map function called "flash_area_read_is_empty"
which checks for erased blocks (and reads/decrypts the data as well).
This commit uses `flash_area_read_is_empty` to determine if magic,
flags and swap status are erased. For Zephyr/sim commits were added
previously that mimic this functionality by simply doing the
read/compare.
Signed-off-by: Fabio Utzig <utzig@apache.org>
diff --git a/boot/bootutil/src/loader.c b/boot/bootutil/src/loader.c
index 66c8843..f61a29f 100644
--- a/boot/bootutil/src/loader.c
+++ b/boot/bootutil/src/loader.c
@@ -404,23 +404,21 @@
int invalid;
int rc;
int i;
- uint8_t erased_val;
off = boot_status_off(fap);
max_entries = boot_status_entries(fap);
- erased_val = flash_area_erased_val(fap);
found = 0;
found_idx = 0;
invalid = 0;
for (i = 0; i < max_entries; i++) {
- rc = flash_area_read(fap, off + i * BOOT_WRITE_SZ(&boot_data),
- &status, 1);
- if (rc != 0) {
+ rc = flash_area_read_is_empty(fap, off + i * BOOT_WRITE_SZ(&boot_data),
+ &status, 1);
+ if (rc < 0) {
return BOOT_EFLASH;
}
- if (status == erased_val) {
+ if (rc == 1) {
if (found && !found_idx) {
found_idx = i;
}