bootutil: Fix issue with align > 1
Some flash devices not only require writes to occur on an `align` byte
boundary, but also require that the writes be done in chunks of this
size as well. Enhance the sections that write status bytes to write
more than a single status byte.
diff --git a/boot/bootutil/src/bootutil_misc.c b/boot/bootutil/src/bootutil_misc.c
index 87895ba..2fe08e3 100644
--- a/boot/bootutil/src/bootutil_misc.c
+++ b/boot/bootutil/src/bootutil_misc.c
@@ -309,13 +309,17 @@
boot_write_copy_done(const struct flash_area *fap)
{
uint32_t off;
- uint8_t val;
int rc;
+ uint8_t buf[8];
+ uint8_t align;
off = boot_copy_done_off(fap);
- val = 1;
- rc = flash_area_write(fap, off, &val, 1);
+ align = hal_flash_align(fap->fa_device_id);
+ memset(buf, 0xFF, 8);
+ buf[0] = 1;
+
+ rc = flash_area_write(fap, off, buf, align);
if (rc != 0) {
return BOOT_EFLASH;
}
@@ -327,13 +331,16 @@
boot_write_image_ok(const struct flash_area *fap)
{
uint32_t off;
- uint8_t val;
int rc;
+ uint8_t buf[8];
+ uint8_t align;
off = boot_image_ok_off(fap);
- val = 1;
- rc = flash_area_write(fap, off, &val, 1);
+ align = hal_flash_align(fap->fa_device_id);
+ memset(buf, 0xFF, 8);
+ buf[0] = 1;
+ rc = flash_area_write(fap, off, buf, align);
if (rc != 0) {
return BOOT_EFLASH;
}