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-sba...@denx.de>

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

Signed-off-by: Marek Vasut <marek.va...@gmail.com>
Cc: Stefano Babic <sba...@denx.de>
Cc: Scott Wood <scottw...@freescale.com>
Cc: Veli-Pekka Peltola <veli-pekka.pelt...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to