Skip to content

Commit 0bc68af

Browse files
shivamurthyshastrimiquelraynal
authored andcommitted
mtd: spinand: micron: identify SPI NAND device with Continuous Read mode
Add SPINAND_HAS_CR_FEAT_BIT flag to identify the SPI NAND device with the Continuous Read mode. Some of the Micron SPI NAND devices have the "Continuous Read" feature enabled by default, which does not fit the subsystem needs. In this mode, the READ CACHE command doesn't require the starting column address. The device always output the data starting from the first column of the cache register, and once the end of the cache register reached, the data output continues through the next page. With the continuous read mode, it is possible to read out the entire block using a single READ command, and once the end of the block reached, the output pins become High-Z state. However, during this mode the read command doesn't output the OOB area. Hence, we disable the feature at probe time. Signed-off-by: Shivamurthy Shastri <[email protected]> Reviewed-by: Boris Brezillon <[email protected]> Signed-off-by: Miquel Raynal <[email protected]> Link: https://lore.kernel.org/linux-mtd/[email protected]
1 parent a15335a commit 0bc68af

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

drivers/mtd/nand/spi/micron.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#define MICRON_STATUS_ECC_4TO6_BITFLIPS (3 << 4)
1919
#define MICRON_STATUS_ECC_7TO8_BITFLIPS (5 << 4)
2020

21+
#define MICRON_CFG_CR BIT(0)
22+
2123
static SPINAND_OP_VARIANTS(read_cache_variants,
2224
SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
2325
SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
@@ -137,7 +139,21 @@ static const struct spinand_info micron_spinand_table[] = {
137139
micron_8_ecc_get_status)),
138140
};
139141

142+
static int micron_spinand_init(struct spinand_device *spinand)
143+
{
144+
/*
145+
* M70A device series enable Continuous Read feature at Power-up,
146+
* which is not supported. Disable this bit to avoid any possible
147+
* failure.
148+
*/
149+
if (spinand->flags & SPINAND_HAS_CR_FEAT_BIT)
150+
return spinand_upd_cfg(spinand, MICRON_CFG_CR, 0);
151+
152+
return 0;
153+
}
154+
140155
static const struct spinand_manufacturer_ops micron_spinand_manuf_ops = {
156+
.init = micron_spinand_init,
141157
};
142158

143159
const struct spinand_manufacturer micron_spinand_manufacturer = {

include/linux/mtd/spinand.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ struct spinand_ecc_info {
284284
};
285285

286286
#define SPINAND_HAS_QE_BIT BIT(0)
287+
#define SPINAND_HAS_CR_FEAT_BIT BIT(1)
287288

288289
/**
289290
* struct spinand_info - Structure used to describe SPI NAND chips

0 commit comments

Comments
 (0)