Fix flash buffer alignment in target layer.

This commit is contained in:
Gareth McMullin 2015-03-26 22:18:18 -07:00
parent 7202db5860
commit 36f749fed9
2 changed files with 11 additions and 1 deletions

View File

@ -131,6 +131,8 @@ struct target_flash {
flash_done_func done;
target *t;
struct target_flash *next;
int align;
uint8_t erased;
};
struct target_s {

View File

@ -189,7 +189,15 @@ int target_flash_write(target *t,
while (len) {
struct target_flash *f = flash_for_addr(t, dest);
size_t tmplen = MIN(len, f->length - (dest % f->length));
if (f->align > 1) {
uint32_t offset = dest % f->align;
uint8_t data[ALIGN(offset + len, f->align)];
memset(data, f->erased, sizeof(data));
memcpy((uint8_t *)data + offset, src, len);
ret |= f->write(f, dest - offset, data, sizeof(data));
} else {
ret |= f->write(f, dest, src, tmplen);
}
src += tmplen;
len -= tmplen;
}