mtd: spinand: Disable continuous read during probe
Subsystems (2)
PATCH 1/1 mtd: spinand: Disable continuous read during probe
Macronix serial NAND devices with continuous read support do not clear the configuration register on soft reset and lack a hardware reset pin. When continuous read is interrupted (e.g., during reboot), the feature remains enabled at the device level.
With continuous read enabled, the OOB area becomes inaccessible and all reads are instead directed to the main area. As a result, during partition allocation as part of MTD device registration, the first two bytes of the main area for the master block are read and indicate that the block is bad. This process repeats for every subsequent block for the partition.
All reads and writes that reference the BBT find no good blocks and fail.
The only paths for recovery from this state are triggering the continuous read feature by way of raw MTD reads or through a NAND device power drain.
Disable continuous read explicitly during spinand probe to ensure quiescent feature state.
---
Testing details:
- Instrumented feature enablement and verified fix with affected Macronix serial NAND device: warm reboot without patch marks all blocks bad during partition allocation; with patch applied, device registers cleanly with no bad blocks marked
- Patch cherry-picks cleanly to mainline v6.19-rc6 and builds without warnings
- Boot tested mainline + patch on aarch64 host without SPI interface
--- drivers/mtd/nand/spi/core.c | 1 + 1 file changed, 1 insertion(+)
drivers/mtd/nand/spi/core.c +1 -0
@@ -859,6 +859,7 @@ static void spinand_cont_read_init(struct spinand_device *spinand) (engine_type == NAND_ECC_ENGINE_TYPE_ON_DIE || engine_type == NAND_ECC_ENGINE_TYPE_NONE)) { spinand->cont_read_possible = true; +spinand_cont_read_enable (spinand, false); } }
--
2.43.0
Quoted 45 lines · David LaPorte
[You don't often get email from [email protected]. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
Macronix serial NAND devices with continuous read support do not clear the configuration register on soft reset and lack a hardware reset pin. When continuous read is interrupted (e.g., during reboot), the feature remains enabled at the device level.
With continuous read enabled, the OOB area becomes inaccessible and all reads are instead directed to the main area. As a result, during partition allocation as part of MTD device registration, the first two bytes of the main area for the master block are read and indicate that the block is bad. This process repeats for every subsequent block for the partition.
All reads and writes that reference the BBT find no good blocks and fail.
The only paths for recovery from this state are triggering the continuous read feature by way of raw MTD reads or through a NAND device power drain.
Disable continuous read explicitly during spinand probe to ensure quiescent feature state.
Fixes 631cfdd0520d ("mtd: spi-nand: Add continuous read support")Signed-off-by David LaPorte <[email protected]>Reviewed-by Gunnar Kudrjavets <[email protected]>---
Testing details:
- Instrumented feature enablement and verified fix with affected Macronix serial NAND device: warm reboot without patch marks all blocks bad during partition allocation; with patch applied, device registers cleanly with no bad blocks marked
- Patch cherry-picks cleanly to mainline v6.19-rc6 and builds without warnings
- Boot tested mainline + patch on aarch64 host without SPI interface--- drivers/mtd/nand/spi/core.c | 1 + 1 file changed, 1 insertion(+)drivers/mtd/nand/spi/core.c +0
-0
drivers/mtd/nand/spi/core.c static void spinand_cont_read_init(struct spinand_device *spinand) · line 862
Quoted 4 lines
drivers/mtd/nand/spi/core.c +1
-0@@ -859,6 +859,7 @@ static void spinand_cont_read_init(struct spinand_device *spinand) (engine_type == NAND_ECC_ENGINE_TYPE_ON_DIE || engine_type == NAND_ECC_ENGINE_TYPE_NONE)) { spinand->cont_read_possible = true; +spinand_cont_read_enable (spinand, false);
I think a comment should be added here explaining why you disable cont_read here
Quoted 6 lines
drivers/mtd/nand/spi/core.c +0
-1} } --2.43.0