From patchwork Wed Dec 25 07:37:19 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huang Shijie X-Patchwork-Id: 305098 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from casper.infradead.org (unknown [IPv6:2001:770:15f::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 6FAC72C0089 for ; Wed, 25 Dec 2013 19:09:04 +1100 (EST) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VvjWR-0007Vm-Oy; Wed, 25 Dec 2013 08:08:56 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VvjWO-00030K-SV; Wed, 25 Dec 2013 08:08:52 +0000 Received: from mail-db8lp0184.outbound.messaging.microsoft.com ([213.199.154.184] helo=db8outboundpool.messaging.microsoft.com) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VvjWM-0002yG-IU for linux-mtd@lists.infradead.org; Wed, 25 Dec 2013 08:08:51 +0000 Received: from mail164-db8-R.bigfish.com (10.174.8.246) by DB8EHSOBE017.bigfish.com (10.174.4.80) with Microsoft SMTP Server id 14.1.225.22; Wed, 25 Dec 2013 08:08:23 +0000 Received: from mail164-db8 (localhost [127.0.0.1]) by mail164-db8-R.bigfish.com (Postfix) with ESMTP id 2D4A184025D; Wed, 25 Dec 2013 08:08:23 +0000 (UTC) X-Forefront-Antispam-Report: CIP:70.37.183.190; KIP:(null); UIP:(null); IPV:NLI; H:mail.freescale.net; RD:none; EFVD:NLI X-SpamScore: 3 X-BigFish: VS3(zzzz1f42h2148h208ch1ee6h1de0h1fdah2073h2146h1202h1e76h2189h1d1ah1d2ah1fc6h1082kzz1de098h8275bh1de097hz2dh2a8h839hd24he5bhf0ah1288h12a5h12a9h12bdh12e5h137ah139eh13b6h1441h1504h1537h162dh1631h1758h1898h18e1h1946h19b5h1ad9h1b0ah1b2fh2222h224fh1fb3h1d0ch1d2eh1d3fh1dfeh1dffh1e23h1fe8h1ff5h2218h2216h226dh22d0h2327h2336h1155h) Received: from mail164-db8 (localhost.localdomain [127.0.0.1]) by mail164-db8 (MessageSwitch) id 1387958901647785_12535; Wed, 25 Dec 2013 08:08:21 +0000 (UTC) Received: from DB8EHSMHS019.bigfish.com (unknown [10.174.8.244]) by mail164-db8.bigfish.com (Postfix) with ESMTP id 8F75940047; Wed, 25 Dec 2013 08:08:21 +0000 (UTC) Received: from mail.freescale.net (70.37.183.190) by DB8EHSMHS019.bigfish.com (10.174.4.29) with Microsoft SMTP Server (TLS) id 14.16.227.3; Wed, 25 Dec 2013 08:08:21 +0000 Received: from tx30smr01.am.freescale.net (10.81.153.31) by 039-SN1MMR1-004.039d.mgd.msft.net (10.84.1.14) with Microsoft SMTP Server (TLS) id 14.3.158.2; Wed, 25 Dec 2013 08:08:20 +0000 Received: from shlinux2.ap.freescale.net (shlinux2.ap.freescale.net [10.192.224.44]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id rBP88DpJ018404; Wed, 25 Dec 2013 01:08:18 -0700 From: Huang Shijie To: Subject: [PATCH V2 2/2] mtd: nand: parse the Hynix nand which uses <26nm technology Date: Wed, 25 Dec 2013 15:37:19 +0800 Message-ID: <1387957039-12575-3-git-send-email-b32955@freescale.com> X-Mailer: git-send-email 1.7.2.rc3 In-Reply-To: <1387957039-12575-1-git-send-email-b32955@freescale.com> References: <1387957039-12575-1-git-send-email-b32955@freescale.com> MIME-Version: 1.0 X-OriginatorOrg: freescale.com X-FOPE-CONNECTOR: Id%0$Dn%*$RO%0$TLS%0$FQDN%$TlsDn% X-FOPE-CONNECTOR: Id%0$Dn%FREESCALE.MAIL.ONMICROSOFT.COM$RO%1$TLS%0$FQDN%$TlsDn% X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20131225_030850_848986_D48FBDAF X-CRM114-Status: GOOD ( 12.24 ) X-Spam-Score: -0.6 (/) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-0.6 points) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 UNRESOLVED_TEMPLATE Headers contain an unresolved template -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: Huang Shijie , computersforpeace@gmail.com, linux-mtd@lists.infradead.org X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The Hynix uses different ID parsing rules for <26nm technology. We should check the id_data[5] for Hynix nand now. This patch adds the parsing code for the Hynix nand which use <26nm technology. Tested with H27UBG8T2CTR(8192 + 640). Signed-off-by: Huang Shijie --- drivers/mtd/nand/nand_base.c | 87 +++++++++++++++++++++++++++++++----------- 1 files changed, 64 insertions(+), 23 deletions(-) diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 79f0050..070884a 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -3109,36 +3109,77 @@ static void nand_parse_hynix(struct mtd_info *mtd, struct nand_chip *chip, u8 id_data[8], int *busw) { int extid = id_data[3]; + int tech = id_data[5]; unsigned int tmp; + /* + * The (id_data[5] <= 3) means the nand uses >=26nm technology; + * The (id_data[5] > 3) means the nand uses <26nm technology; + * + * Please reference the H27UBG8T2B (p.23) and H27UBG8T2C (p.23). + */ + tmp = (tech <= 3) ? SZ_2K : SZ_4K; + /* Calc pagesize */ - mtd->writesize = 2048 << (extid & 0x03); + mtd->writesize = tmp << (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; + tmp = ((extid >> 2) & 0x04) | (extid & 0x03); + + if (tech <= 3) { + switch (tmp) { + 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; + } + } else { + switch (tmp) { + case 0: + mtd->oobsize = 640; + break; + case 1: + mtd->oobsize = 448; + break; + case 2: + mtd->oobsize = 224; + break; + case 3: + mtd->oobsize = 128; + break; + case 4: + mtd->oobsize = 64; + break; + case 5: + mtd->oobsize = 32; + break; + case 6: + mtd->oobsize = 16; + break; + default: + mtd->oobsize = 640; + break; + } } + extid >>= 2; /* Calc blocksize */