mtd: spi-nor: Add a RWW flag
authorMiquel Raynal <miquel.raynal@bootlin.com>
Tue, 28 Mar 2023 15:41:03 +0000 (17:41 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 May 2023 09:53:28 +0000 (11:53 +0200)
[ Upstream commit 4eddee70140b3ae183398b246a609756546c51f1 ]

Introduce a new (no SFDP) flag for the feature that we are about to
support: Read While Write. This means, if the chip has several banks and
supports RWW, once a page of data to write has been transferred into the
chip's internal SRAM, another read operation happening on a different
bank can be performed during the tPROG delay.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20230328154105.448540-7-miquel.raynal@bootlin.com
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Stable-dep-of: 9fd0945fe6fa ("mtd: spi-nor: spansion: Enable JFFS2 write buffer for Infineon s28hx SEMPER flash")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/mtd/spi-nor/core.c
drivers/mtd/spi-nor/core.h
drivers/mtd/spi-nor/debugfs.c

index 88da4a125c743ea62b4fba8675b98ac3f843b6f2..621e9ad4bcc394da00b51e4d686f1331b2a081b7 100644 (file)
@@ -2440,6 +2440,9 @@ static void spi_nor_init_flags(struct spi_nor *nor)
 
        if (flags & NO_CHIP_ERASE)
                nor->flags |= SNOR_F_NO_OP_CHIP_ERASE;
+
+       if (flags & SPI_NOR_RWW)
+               nor->flags |= SNOR_F_RWW;
 }
 
 /**
index 8a846ad86d298587cffdf61bd1cc24738aefc92b..f23d1e77199e5f06f1e550effea3369d99ee8cfd 100644 (file)
@@ -130,6 +130,7 @@ enum spi_nor_option_flags {
        SNOR_F_IO_MODE_EN_VOLATILE = BIT(11),
        SNOR_F_SOFT_RESET       = BIT(12),
        SNOR_F_SWP_IS_VOLATILE  = BIT(13),
+       SNOR_F_RWW              = BIT(14),
 };
 
 struct spi_nor_read_command {
@@ -459,6 +460,7 @@ struct spi_nor_fixups {
  *   NO_CHIP_ERASE:           chip does not support chip erase.
  *   SPI_NOR_NO_FR:           can't do fastread.
  *   SPI_NOR_QUAD_PP:         flash supports Quad Input Page Program.
+ *   SPI_NOR_RWW:             flash supports reads while write.
  *
  * @no_sfdp_flags:  flags that indicate support that can be discovered via SFDP.
  *                  Used when SFDP tables are not defined in the flash. These
@@ -509,6 +511,7 @@ struct flash_info {
 #define NO_CHIP_ERASE                  BIT(7)
 #define SPI_NOR_NO_FR                  BIT(8)
 #define SPI_NOR_QUAD_PP                        BIT(9)
+#define SPI_NOR_RWW                    BIT(10)
 
        u8 no_sfdp_flags;
 #define SPI_NOR_SKIP_SFDP              BIT(0)
index 5f56b23205d8b553f82d02182e515dd98a5aa555..8b4922a1aafb9b532679e0508676c0d9e8208a33 100644 (file)
@@ -25,6 +25,7 @@ static const char *const snor_f_names[] = {
        SNOR_F_NAME(IO_MODE_EN_VOLATILE),
        SNOR_F_NAME(SOFT_RESET),
        SNOR_F_NAME(SWP_IS_VOLATILE),
+       SNOR_F_NAME(RWW),
 };
 #undef SNOR_F_NAME