mtd: spi-nor: Add a RWW flag

[ 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>
This commit is contained in:
Miquel Raynal 2023-03-28 17:41:03 +02:00 committed by Greg Kroah-Hartman
parent 897a40dbcf
commit 8630dfcdab
3 changed files with 7 additions and 0 deletions

View File

@ -2440,6 +2440,9 @@ static void spi_nor_init_flags(struct spi_nor *nor)
if (flags & NO_CHIP_ERASE) if (flags & NO_CHIP_ERASE)
nor->flags |= SNOR_F_NO_OP_CHIP_ERASE; nor->flags |= SNOR_F_NO_OP_CHIP_ERASE;
if (flags & SPI_NOR_RWW)
nor->flags |= SNOR_F_RWW;
} }
/** /**

View File

@ -130,6 +130,7 @@ enum spi_nor_option_flags {
SNOR_F_IO_MODE_EN_VOLATILE = BIT(11), SNOR_F_IO_MODE_EN_VOLATILE = BIT(11),
SNOR_F_SOFT_RESET = BIT(12), SNOR_F_SOFT_RESET = BIT(12),
SNOR_F_SWP_IS_VOLATILE = BIT(13), SNOR_F_SWP_IS_VOLATILE = BIT(13),
SNOR_F_RWW = BIT(14),
}; };
struct spi_nor_read_command { struct spi_nor_read_command {
@ -459,6 +460,7 @@ struct spi_nor_fixups {
* NO_CHIP_ERASE: chip does not support chip erase. * NO_CHIP_ERASE: chip does not support chip erase.
* SPI_NOR_NO_FR: can't do fastread. * SPI_NOR_NO_FR: can't do fastread.
* SPI_NOR_QUAD_PP: flash supports Quad Input Page Program. * 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. * @no_sfdp_flags: flags that indicate support that can be discovered via SFDP.
* Used when SFDP tables are not defined in the flash. These * 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 NO_CHIP_ERASE BIT(7)
#define SPI_NOR_NO_FR BIT(8) #define SPI_NOR_NO_FR BIT(8)
#define SPI_NOR_QUAD_PP BIT(9) #define SPI_NOR_QUAD_PP BIT(9)
#define SPI_NOR_RWW BIT(10)
u8 no_sfdp_flags; u8 no_sfdp_flags;
#define SPI_NOR_SKIP_SFDP BIT(0) #define SPI_NOR_SKIP_SFDP BIT(0)

View File

@ -25,6 +25,7 @@ static const char *const snor_f_names[] = {
SNOR_F_NAME(IO_MODE_EN_VOLATILE), SNOR_F_NAME(IO_MODE_EN_VOLATILE),
SNOR_F_NAME(SOFT_RESET), SNOR_F_NAME(SOFT_RESET),
SNOR_F_NAME(SWP_IS_VOLATILE), SNOR_F_NAME(SWP_IS_VOLATILE),
SNOR_F_NAME(RWW),
}; };
#undef SNOR_F_NAME #undef SNOR_F_NAME