From 44476137e3522744c076aca3615597e2f2845305 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Mon, 6 Feb 2023 15:46:34 +0100 Subject: [PATCH] mtd: add fast path to mtd_write_page() If we overwrite a whole sector, don't perform a read-modify-write cycle. --- drivers/mtd/mtd.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/mtd/mtd.c b/drivers/mtd/mtd.c index 030b3f8fba..e7793e9f51 100644 --- a/drivers/mtd/mtd.c +++ b/drivers/mtd/mtd.c @@ -183,6 +183,12 @@ static size_t _write_sector(mtd_dev_t *mtd, const void *data, uint32_t sector, len = sector_size - offset; } + /* fast path: skip reading the sector if we overwrite it completely */ + if (offset == 0 && len == sector_size) { + work = (void *)data; + goto write; + } + /* copy sector to RAM */ res = mtd_read_page(mtd, work, sector_page, 0, sector_size); if (res < 0) { @@ -198,6 +204,7 @@ static size_t _write_sector(mtd_dev_t *mtd, const void *data, uint32_t sector, /* modify sector in RAM */ memcpy(work + offset, data, len); +write: /* write back modified sector copy */ res = mtd_write_page_raw(mtd, work, sector_page, 0, sector_size); if (res < 0) {