[U-Boot] [PATCH] NAND: Let NAND_NO_SUBPAGE_WRITE through

Marek Vasut marek.vasut at gmail.com
Sat Nov 5 03:24:03 CET 2011


There is a problem reported that the NAND_NO_SUBPAGE_WRITE, set by some drivers,
is silently ignored by NAND core. This causes UBI to malfunction on these
drivers, because UBI tries to use subpage writes.

This was discussed already with no conclusion, see thread:
Message-Id: <1302372335-30232-6-git-send-email-sbabic at denx.de>

The bug was recently retriggered by Veli-Pekka Peltola, causing him trouble with
UBI on the MX28 CPU:
Message-ID: <4EB3E4EA.9080509 at bluegiga.com>

Signed-off-by: Marek Vasut <marek.vasut at gmail.com>
Cc: Stefano Babic <sbabic at denx.de>
Cc: Scott Wood <scottwood at freescale.com>
Cc: Veli-Pekka Peltola <veli-pekka.peltola at bluegiga.com>
---
 drivers/mtd/nand/nand_base.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 6aac6a2..7ecd5a3 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2548,6 +2548,7 @@ static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
 {
 	int ret, maf_idx;
 	int tmp_id, tmp_manf;
+	int no_subpage = 0;
 
 	/* Select the device */
 	chip->select_chip(mtd, 0);
@@ -2612,10 +2613,20 @@ static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
 	if (!ret)
 		nand_flash_detect_non_onfi(mtd, chip, type, &busw);
 
+	/*
+	 * If the controller is incapable of subpage writes, force no subpage
+	 * writes. This has to be done here, otherwise UBI will complain.
+	 */
+	if (chip->options & NAND_NO_SUBPAGE_WRITE)
+		no_subpage = 1;
+
 	/* Get chip options, preserve non chip based options */
 	chip->options &= ~NAND_CHIPOPTIONS_MSK;
 	chip->options |= type->options & NAND_CHIPOPTIONS_MSK;
 
+	if (no_subpage)
+		chip->options |= NAND_NO_SUBPAGE_WRITE;
+
 	/*
 	 * Set chip as a default. Board drivers can override it, if necessary
 	 */
-- 
1.7.6.3



More information about the U-Boot mailing list