]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mtd: spi-nor: Allow flashes to specify MTD writesize
authorTakahiro Kuwano <Takahiro.Kuwano@infineon.com>
Tue, 15 Oct 2024 04:08:32 +0000 (13:08 +0900)
committerTom Rini <trini@konsulko.com>
Tue, 15 Oct 2024 14:57:49 +0000 (08:57 -0600)
Some flashes like the Infineon SEMPER NOR flash family use ECC. Under
this ECC scheme, multi-pass writes to an ECC block is not allowed.
In other words, once data is programmed to an ECC block, it can't be
programmed again without erasing it first.

Upper layers like file systems need to be given this information so they
do not cause error conditions on the flash by attempting multi-pass
programming. This can be done by setting 'writesize' in 'struct
mtd_info'.

Set the default to 1 but allow flashes to modify it in fixup hooks. If
more flashes show up with this constraint in the future it might be
worth it to add it to 'struct flash_info', but for now increasing its
size is not worth it.

This patch replicates the following upstream linux commit:
afd473e85827 ("mtd: spi-nor: core: Allow flashes to specify MTD writesize")

Acked-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
drivers/mtd/spi/spi-nor-core.c
include/linux/mtd/spi-nor.h

index 6f5395c7b9b13057701561ea3c6d20a5e8ac158f..d39d0ee7813db386f37a4ce7c3beb71068960014 100644 (file)
@@ -3081,6 +3081,7 @@ static int spi_nor_init_params(struct spi_nor *nor,
        memset(params, 0, sizeof(*params));
 
        /* Set SPI NOR sizes. */
+       params->writesize = 1;
        params->size = info->sector_size * info->n_sectors;
        params->page_size = info->page_size;
 
@@ -4499,7 +4500,7 @@ int spi_nor_scan(struct spi_nor *nor)
        mtd->dev = nor->dev;
        mtd->priv = nor;
        mtd->type = MTD_NORFLASH;
-       mtd->writesize = 1;
+       mtd->writesize = params.writesize;
        mtd->flags = MTD_CAP_NORFLASH;
        mtd->size = params.size;
        mtd->_erase = spi_nor_erase;
index 047e83e84638fefc650688901513fa5787a8956e..1ae586b2e5fa69c78f3fea11c0f3fbbd3cfbb421 100644 (file)
@@ -457,6 +457,7 @@ enum spi_nor_pp_command_index {
 
 struct spi_nor_flash_parameter {
        u64                             size;
+       u32                             writesize;
        u32                             page_size;
        u8                              rdsr_dummy;
        u8                              rdsr_addr_nbytes;