[RFC PATCH 2/5] MTD: nandsim: fix column address size of large page

Sheng Yong shengyong1 at huawei.com
Wed Aug 5 01:55:51 PDT 2015


If NAND flash has large page, its default cmdfunc is changed to
nand_command_lp() during scanning. When READID command is send, nand
tries to write 2 bytes as column address, so we have to tell nandsim
to read one more byte.

Signed-off-by: Sheng Yong <shengyong1 at huawei.com>
---
 drivers/mtd/nand/nandsim.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index 24a50e5..5938be4 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -238,7 +238,7 @@ MODULE_PARM_DESC(numchips,	 "Number of chips of the NAND flash (1 by default)");
 #define STATE_ADDR_PAGE        0x00000010 /* full (row, column) address is accepted */
 #define STATE_ADDR_SEC         0x00000020 /* sector address was accepted */
 #define STATE_ADDR_COLUMN      0x00000030 /* column address was accepted */
-#define STATE_ADDR_ZERO        0x00000040 /* one byte zero address was accepted */
+#define STATE_ADDR_ZERO        0x00000040 /* zero address was accepted */
 #define STATE_ADDR_MASK        0x00000070 /* address states mask */
 
 /* During data input/output the simulator is in these states */
@@ -1904,7 +1904,14 @@ static void switch_state(struct nandsim *ns)
 				break;
 
 			case STATE_ADDR_ZERO:
-				ns->regs->num = 1;
+				/* For flash which has large page,
+				 * its column consists of 2 bytes,
+				 * so 2 bytes are written to flash
+				 */
+				if (nsmtd->writesize > 512)
+					ns->regs->num = 2;
+				else
+					ns->regs->num = 1;
 				break;
 
 			case STATE_ADDR_COLUMN:
@@ -2073,7 +2080,14 @@ static void ns_nand_write_byte(struct mtd_info *mtd, u_char byte)
 					ns->regs->num = ns->geom.secaddrbytes;
 					break;
 				case STATE_ADDR_ZERO:
-					ns->regs->num = 1;
+					/* For flash which has large page,
+					 * its column consists of 2 bytes,
+					 * so 2 bytes are written to flash
+					 */
+					if (mtd->writesize > 512)
+						ns->regs->num = 2;
+					else
+						ns->regs->num = 1;
 					break;
 				default:
 					BUG();
-- 
1.8.3.4




More information about the linux-mtd mailing list