mtd: nand: fix Samsung SLC detection regression

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Wed Nov 21 06:59:02 EST 2012


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=6924d99fcdf1a688538a3cdebd1f135c22eec191
Commit:     6924d99fcdf1a688538a3cdebd1f135c22eec191
Parent:     af451af4e0a3a4cd7536843f585c96a9b095a4e8
Author:     Brian Norris <computersforpeace at gmail.com>
AuthorDate: Wed Nov 14 21:46:30 2012 -0800
Committer:  Artem Bityutskiy <artem.bityutskiy at linux.intel.com>
CommitDate: Thu Nov 15 15:37:43 2012 +0200

    mtd: nand: fix Samsung SLC detection regression
    
    This patch fixes errors seen in identifying old Samsung SLC, due to the
    following commits:
    
        commit e2d3a35ee427aaba99b6c68a56609ce276c51270
        mtd: nand: detect Samsung K9GBG08U0A, K9GAG08U0F ID
    
        commit e3b88bd604283ef83ae6e8f53622d5b1ffe9d43a
        mtd: nand: add generic READ ID length calculation functions
    
    Some Samsung NAND with "5-byte" ID really appear to have 6-byte IDs, with
    wraparound like:
    
      Samsung K9K8G08U0D
      ec d3 51 95 58 ec ec d3
    
      Samsung K9F1G08U0C
      ec f1 00 95 40 ec ec f1
    
      Samsung K9F2G08U0B
      ec da 10 95 44 00 ec da
    
    This bad wraparound makes it hard to reliably detect the difference
    between Samsung SLC with 5-byte ID and Samsung SLC with 6-byte ID.
    
    The fix is to, for now, only use the new Samsung table for MLC. We
    cannot support the new SLC (K9FAG08U0M) until Samsung gives better ID
    decode information.
    
    Note that this applies in addition to the previous regression fix:
    
        commit bc86cf7af2ebda88056538e8edff852ee627f76a
        mtd: nand: fix Samsung SLC NAND identification regression
    
    Together, these patches completely restore the previous detection
    behavior so that we cannot see any more regressions in Samsung SLC NAND
    (finger crossed). With luck, I can get a hold of a Samsung
    representative and stop having to cross my fingers eventually.
    
    Reported-by: Sylwester Nawrocki <sylvester.nawrocki at gmail.com>
    Tested-by: Sylwester Nawrocki <sylvester.nawrocki at gmail.com>
    Signed-off-by: Brian Norris <computersforpeace at gmail.com>
    Signed-off-by: Artem Bityutskiy <artem.bityutskiy at linux.intel.com>
---
 drivers/mtd/nand/nand_base.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index d5ece6e..1a03b7f 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2990,6 +2990,7 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
 	 * ID to decide what to do.
 	 */
 	if (id_len == 6 && id_data[0] == NAND_MFR_SAMSUNG &&
+			(chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
 			id_data[5] != 0x00) {
 		/* Calc pagesize */
 		mtd->writesize = 2048 << (extid & 0x03);



More information about the linux-mtd-cvs mailing list