All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Norris <computersforpeace@gmail.com>
To: <linux-mtd@lists.infradead.org>
Cc: Angus Clark <angus.clark@st.com>,
	Mike Dunn <mikedunn@newsguy.com>,
	Artem Bityutskiy <dedekind1@gmail.com>,
	Huang Shijie <b32955@freescale.com>,
	Shmulik Ladkani <shmulik.ladkani@gmail.com>,
	Brian Norris <computersforpeace@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>
Subject: [PATCH 8/9] mtd: nand: decode Hynix MLC, 6-byte ID length
Date: Mon, 24 Sep 2012 20:40:54 -0700	[thread overview]
Message-ID: <1348544455-17656-9-git-send-email-computersforpeace@gmail.com> (raw)
In-Reply-To: <1348544455-17656-1-git-send-email-computersforpeace@gmail.com>

Hynix has introduced a new ID decoding scheme for their newer MLC, some of
which don't support ONFI. The following devices all follow the pattern given in
the datasheet for Hynix H27UBG8T2B, p.22:

Hynix H27UAG8T2A
Hynix H27UBG8T2A
Hynix H27UBG8T2B

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
 drivers/mtd/nand/nand_base.c | 45 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index fd5c307..7e93d0d 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2940,8 +2940,10 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
 	 * Field definitions are in the following datasheets:
 	 * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
 	 * New style   (6 byte ID): Samsung K9GBG08U0M (p.40)
+	 * Hynix MLC   (6 byte ID): Hynix H27UBG8T2B (p.22)
 	 *
-	 * Check for ID length + Samsung ID to decide what to do.
+	 * Check for ID length, cell type, and Hynix/Samsung ID to decide what
+	 * to do.
 	 */
 	if (id_len == 6 && id_data[0] == NAND_MFR_SAMSUNG &&
 			(chip->cellinfo & NAND_CI_CELLTYPE_MSK)) {
@@ -2968,6 +2970,47 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
 		mtd->erasesize = (128 * 1024) <<
 			(((extid >> 1) & 0x04) | (extid & 0x03));
 		*busw = 0;
+	} else if (id_len == 6 && id_data[0] == NAND_MFR_HYNIX &&
+			(chip->cellinfo & NAND_CI_CELLTYPE_MSK)) {
+		unsigned int tmp;
+
+		/* Calc pagesize */
+		mtd->writesize = 2048 << (extid & 0x03);
+		extid >>= 2;
+		/* Calc oobsize */
+		switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
+		case 0:
+			mtd->oobsize = 128;
+			break;
+		case 1:
+			mtd->oobsize = 224;
+			break;
+		case 2:
+			mtd->oobsize = 448;
+			break;
+		case 3:
+			mtd->oobsize = 64;
+			break;
+		case 4:
+			mtd->oobsize = 32;
+			break;
+		case 5:
+			mtd->oobsize = 16;
+			break;
+		default:
+			mtd->oobsize = 640;
+			break;
+		}
+		extid >>= 2;
+		/* Calc blocksize */
+		tmp = ((extid >> 1) & 0x04) | (extid & 0x03);
+		if (tmp < 0x03)
+			mtd->erasesize = (128 * 1024) << tmp;
+		else if (tmp == 0x03)
+			mtd->erasesize = 768 * 1024;
+		else
+			mtd->erasesize = (64 * 1024) << tmp;
+		*busw = 0;
 	} else {
 		/* Calc pagesize */
 		mtd->writesize = 1024 << (extid & 0x03);
-- 
1.7.11.3

  parent reply	other threads:[~2012-09-25  3:41 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-25  3:40 [PATCH 0/9] mtd: nand: improve NAND ID detection Brian Norris
2012-09-25  3:40 ` [PATCH 1/9] mtd: nand: remove unnecessary variable Brian Norris
2012-09-25  3:40 ` [PATCH 2/9] mtd: nand: remove redundant ID read Brian Norris
2012-09-25  3:40 ` [PATCH 3/9] mtd: nand: split BB marker options decoding into its own function Brian Norris
2012-09-25  3:40 ` [PATCH 4/9] mtd: nand: split extended ID " Brian Norris
2012-09-25  3:40 ` [PATCH 5/9] mtd: nand: split simple ID decode " Brian Norris
2012-09-25  3:40 ` [PATCH 6/9] mtd: nand: add generic READ ID length calculation functions Brian Norris
2012-09-25  3:40 ` [PATCH 7/9] mtd: nand: increase max OOB size to 640 Brian Norris
2012-09-25  3:40 ` Brian Norris [this message]
2012-09-25  3:40 ` [PATCH 9/9] mtd: nand: detect Samsung K9GBG08U0A, K9GAG08U0F ID Brian Norris
2012-10-05  1:37   ` Marek Vasut
2012-10-06 20:24     ` Brian Norris
2012-10-07  3:29       ` Marek Vasut
2012-09-27 12:23 ` [PATCH 0/9] mtd: nand: improve NAND ID detection Artem Bityutskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1348544455-17656-9-git-send-email-computersforpeace@gmail.com \
    --to=computersforpeace@gmail.com \
    --cc=angus.clark@st.com \
    --cc=b32955@freescale.com \
    --cc=dedekind1@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=mikedunn@newsguy.com \
    --cc=shmulik.ladkani@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.