dfu: dfu_mtd: set max_buf_size to erasesize also for NOR devices
authorPatrick Delaunay <patrick.delaunay@foss.st.com>
Thu, 4 Mar 2021 16:47:56 +0000 (17:47 +0100)
committerPatrice Chotard <patrice.chotard@foss.st.com>
Fri, 18 Jun 2021 08:09:41 +0000 (10:09 +0200)
For NOR devices the logical DFU buffer size is the sector_size,
as it is done in dfu_sf.c or in spi/sf_mtd.c
(sf_mtd_info.erasesize = flash->sector_size)

For NAND the DFU size was already limited to erasesize as
has_pages = true.

So the mtd dfu backend can use this erasesize for all the MTD devices,
NOR and NAND with dfu->max_buf_size = mtd->erasesize

This difference was initially copied from MTD command, where
data is fully available in RAM without size limitation.

This patch avoids to have many sector write in dfu_mtd.c at the end
of the DFU transfer and avoids issues with USB timeout or WATCHDOG.

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
drivers/dfu/dfu_mtd.c

index ec40b8f..894b570 100644 (file)
@@ -254,7 +254,6 @@ int dfu_fill_entity_mtd(struct dfu_entity *dfu, char *devstr, char *s)
 {
        char *st;
        struct mtd_info *mtd;
-       bool has_pages;
        int ret, part;
 
        mtd = get_mtd_device_nm(devstr);
@@ -264,9 +263,7 @@ int dfu_fill_entity_mtd(struct dfu_entity *dfu, char *devstr, char *s)
 
        dfu->dev_type = DFU_DEV_MTD;
        dfu->data.mtd.info = mtd;
-
-       has_pages = mtd->type == MTD_NANDFLASH || mtd->type == MTD_MLCNANDFLASH;
-       dfu->max_buf_size = has_pages ? mtd->erasesize : 0;
+       dfu->max_buf_size = mtd->erasesize;
 
        st = strsep(&s, " ");
        if (!strcmp(st, "raw")) {