Received: by 10.192.165.148 with SMTP id m20csp615101imm; Wed, 9 May 2018 19:53:38 -0700 (PDT) X-Google-Smtp-Source: AB8JxZptLAm2uqeVEWaN/Fz6ZbG03/MDYXGQ+3xsfkG91dPc6ZvrXhYgjRWSkGdbU3mOQR/2Hia8 X-Received: by 10.98.24.214 with SMTP id 205mr46163879pfy.242.1525920818468; Wed, 09 May 2018 19:53:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525920818; cv=none; d=google.com; s=arc-20160816; b=ZeqdJAwIT2PKiUNclEuREGGG+k4wFYTK007OZwo6Am+BKavQ7C+G2+0sASNy9VKYLj FDGhc/lcNcJ98/tBUuJ3E1FpH2IlQ8f9UkVi0TeSkKoL/B1BnyU9H2QvBctKL8hJlIbn cQJRnXi17ovzavLeWVCXNY0cgBPxK1gBGAxYari5+Aoy1tyNMpI8kT3J4MEhJ9+w+F7N WA0BJu1o8w6vqDcm3Sq2RFHDiSQMbHfK+EvlHAuwRtJp4vgACb3ukp6hTeptQMnAfe5W vR7trUExgcDW0WR239i4bxPR1hAsTtAd5O/iHDMJvLpKMCO+s1kh2neMO9DKCmqGYLg2 QBpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:msip_labels :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=tiJao8BYxs+OW0y8jTtCjAl19FNfC4ggcsy9HJPz1TM=; b=YucJ2QdwvihsvCvz3H5XfUoUAN9O1pBMOpplIA1CjC/6Q1eIHOiSIok3nMjqQsa55i IZJ9XhSyV+6atkgbz7nb3SGhXDebP3UMQiUrFtRekTHlLFRLC8ehFfzrF4wrysP6KyTJ 24ct+sP2FMDcCrBphU6GvZ9aEf7Xook8ZOAsLVCBZfNtaXHOgB9cz8jTXJeG3wPhmYNu eoxraRXqPtkj5+SfPy6y83cdFfomWiJZgN1WydHoBim/RDjRxhp5mevs23ZbuX6gjpAw 5S4GPK7zCEDFn8ocuIqJv3ERFKE4TwV8VrM2xyWiB1wOfDZk/faV7mRGibIU0APWCaxp +BFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nokia.onmicrosoft.com header.s=selector1-nokia-com header.b=YhlSPfPz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nokia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k13-v6si22648751pgr.124.2018.05.09.19.53.24; Wed, 09 May 2018 19:53:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nokia.onmicrosoft.com header.s=selector1-nokia-com header.b=YhlSPfPz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nokia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756443AbeEJCwH (ORCPT + 99 others); Wed, 9 May 2018 22:52:07 -0400 Received: from mail-db5eur01on0108.outbound.protection.outlook.com ([104.47.2.108]:23045 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756118AbeEJCwF (ORCPT ); Wed, 9 May 2018 22:52:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nokia.onmicrosoft.com; s=selector1-nokia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=tiJao8BYxs+OW0y8jTtCjAl19FNfC4ggcsy9HJPz1TM=; b=YhlSPfPz+/WMp2ewC/ns3aR3XCmBY9aps5TnmDqCa4El1qZ5/b7tLBZCJwVBo1HLcq3gwQPntdJLLNOMgJfTBm8WdZhI2Dw0ohKry2O14toFtixXJqtjHf4F2mNFOV+U2A5EVhjNgYan9IXWpN3g0rHuz3CB9RL874VsLdmpDGg= Received: from VI1PR07MB1615.eurprd07.prod.outlook.com (10.166.142.145) by VI1PR07MB1053.eurprd07.prod.outlook.com (10.161.111.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.755.16; Thu, 10 May 2018 02:52:02 +0000 Received: from VI1PR07MB1615.eurprd07.prod.outlook.com ([fe80::f086:ea8b:4f87:b505]) by VI1PR07MB1615.eurprd07.prod.outlook.com ([fe80::f086:ea8b:4f87:b505%7]) with mapi id 15.20.0776.004; Thu, 10 May 2018 02:52:01 +0000 From: "Wan, Jane (Nokia - US/Sunnyvale)" To: Boris Brezillon CC: "miquel.raynal@bootlin.com" , "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "richard@nod.at" , "marek.vasut@gmail.com" , "yamada.masahiro@socionext.com" , "prabhakar.kushwaha@nxp.com" , "shawnguo@kernel.org" , "jagdish.gediya@nxp.com" , "shreeya.patel23498@gmail.com" , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "Bos, Ties (Nokia - US/Sunnyvale)" Subject: RE: [PATCH v4 2/2] mtd: rawnand: use bit-wise majority to recover the contents of ONFI parameter Thread-Topic: [PATCH v4 2/2] mtd: rawnand: use bit-wise majority to recover the contents of ONFI parameter Thread-Index: AQHT5xJwEDIRXNUdfkG1jib9vw/7OKQnc1UAgADRt5A= Date: Thu, 10 May 2018 02:52:01 +0000 Message-ID: References: <1525814394-30067-1-git-send-email-Jane.Wan@nokia.com> <1525814394-30067-2-git-send-email-Jane.Wan@nokia.com> <20180509161928.149a42a7@bbrezillon> In-Reply-To: <20180509161928.149a42a7@bbrezillon> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-originating-ip: [131.228.32.185] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;VI1PR07MB1053;7:YEdBBsmzwgYhCzAE3CFFbHIIOUwQl5pRVDS/gvpPvpRn4dC+iYt31lIMYdQifUxTY23tH2mtBIbiKxJ8/Vn2AiIPS5563VozAEtLdBsmZ4GIA6gJYfwJXN+o9NyKf8jyRB6YvstliVUiwSrN4y/AuMTojocGKbU8LiSvXGiXB7Eg8XcZ0HnuBgak1mVSXJRfF6dOA3jSGmBbnNXlxVpSvaI2cKvmPPl/m0KcNwbHblHP/6+QkpZTUr5ycpHxBzbk x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-forefront-antispam-report: SFV:SKI;SCL:-1;SFV:NSPM;SFS:(10019020)(979002)(39860400002)(376002)(346002)(39380400002)(366004)(396003)(13464003)(199004)(189003)(102836004)(305945005)(5250100002)(3846002)(76176011)(446003)(86362001)(2906002)(3660700001)(7416002)(11346002)(476003)(3280700002)(6116002)(486006)(9686003)(8936002)(4326008)(7736002)(5660300001)(8656006)(74316002)(55016002)(6246003)(81156014)(107886003)(8676002)(53546011)(99286004)(26005)(53936002)(54906003)(186003)(6506007)(7696005)(316002)(59450400001)(39060400002)(81166006)(97736004)(33656002)(66066001)(105586002)(25786009)(229853002)(106356001)(6436002)(6916009)(14454004)(2900100001)(68736007)(478600001)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR07MB1053;H:VI1PR07MB1615.eurprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:(109105607167333);BCL:0;PCL:0;RULEID:(7020095)(4652020)(8989080)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(8990040)(48565401081)(2017052603328)(7193020);SRVR:VI1PR07MB1053; x-ms-traffictypediagnostic: VI1PR07MB1053: authentication-results: spf=none (sender IP is ) smtp.mailfrom=jane.wan@nokia.com; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(185117386973197)(82608151540597)(85827821059158)(109105607167333)(258649278758335); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3002001)(3231254)(11241501184)(806099)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(6072148)(201708071742011);SRVR:VI1PR07MB1053;BCL:0;PCL:0;RULEID:;SRVR:VI1PR07MB1053; x-forefront-prvs: 066898046A received-spf: None (protection.outlook.com: nokia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 6cqscf1g97/n4eYpbsuduXM/N3cokLSUNAetDjHE6lJ//GBfNmhrwJxKMXq5meVM2PpatJqoapjHUFTHRiyiifinpgc/McU4t9Ho+jU9MGCkAqRmTVMmen6tzp2jA9lKF/LcryQnsqh7ppCaIOh+0Vr7Y+JnsNvZj1GnKR1whQlvNntIEQNs2Dc+d10K0I+wot+GEfCxeaecqWqBFE6J7LCygi63Wuw2pFxpZVlMQncCvzszpCBNraSf++FI1xG+ spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: c1f03ff4-f6a0-46a6-0923-08d5b621012a X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c1f03ff4-f6a0-46a6-0923-08d5b621012a X-MS-Exchange-CrossTenant-originalarrivaltime: 10 May 2018 02:52:01.0869 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB1053 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Boris, I've sent v5 of the patch based on your comment. Thanks. Jane > -----Original Message----- > From: Boris Brezillon [mailto:boris.brezillon@bootlin.com] > Sent: Wednesday, May 09, 2018 7:19 AM > To: Wan, Jane (Nokia - US/Sunnyvale) > Cc: miquel.raynal@bootlin.com; dwmw2@infradead.org; > computersforpeace@gmail.com; richard@nod.at; marek.vasut@gmail.com; > yamada.masahiro@socionext.com; prabhakar.kushwaha@nxp.com; > shawnguo@kernel.org; jagdish.gediya@nxp.com; > shreeya.patel23498@gmail.com; linux-mtd@lists.infradead.org; linux- > kernel@vger.kernel.org; Bos, Ties (Nokia - US/Sunnyvale) > Subject: Re: [PATCH v4 2/2] mtd: rawnand: use bit-wise majority to recove= r the > contents of ONFI parameter >=20 > On Tue, 8 May 2018 14:19:54 -0700 > Jane Wan wrote: >=20 > > Per ONFI specification (Rev. 4.0), if all parameter pages have invalid > > CRC values, the bit-wise majority may be used to recover the contents > > of the parameter pages from the parameter page copies present. > > > > Signed-off-by: Jane Wan > > --- > > drivers/mtd/nand/raw/nand_base.c | 49 > ++++++++++++++++++++++++++++++++++---- > > 1 file changed, 44 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/mtd/nand/raw/nand_base.c > > b/drivers/mtd/nand/raw/nand_base.c > > index 72f3a89..dfc341c 100644 > > --- a/drivers/mtd/nand/raw/nand_base.c > > +++ b/drivers/mtd/nand/raw/nand_base.c > > @@ -5086,6 +5086,38 @@ static int > nand_flash_detect_ext_param_page(struct nand_chip *chip, > > return ret; > > } > > > > +#define GET_BIT(bit, val) (((val) >> (bit)) & 0x01) > > + > > +/* > > + * Recover NAND parameter page with bit-wise majority */ static int > > +onfi_recover_param(struct nand_onfi_params *p, int pages) >=20 > I had something more generic in mind: >=20 > static void nand_bit_wise_majority(const void **srcbufs, > void *dstbuf, > unsigned int nbufs, > unsigned int bufsize) > { > ... > } >=20 > And then you do the crc check in nand_flash_detect_onfi(). >=20 > The reason I'm asking that is because I'm almost sure we'll re-use this f= unctions > for extended param pages, and also for vendor specific data (we already h= ave a > byte-wise majority check in the hynix driver, so I wouldn't be surprised = if other > vendors decided to use a bit-wise approach for some of their OTP area). [Jane] Modified the function as suggested in v5. >=20 > > +{ > > + int i, j, k; > > + u8 v, m; > > + u8 *buf; > > + > > + buf =3D (u8 *)p; > > + for (i =3D 0; i < sizeof(*p); i++) { > > + v =3D 0; > > + for (j =3D 0; j < 8; j++) { > > + m =3D 0; > > + for (k =3D 0; k < pages; k++) > > + m +=3D GET_BIT(j, buf[k*sizeof(*p) + i]); > > + if (m > pages/2) > > + v |=3D BIT(j); > > + } > > + ((u8 *)p)[i] =3D v; > > + } > > + > > + if (onfi_crc16(ONFI_CRC_BASE, (u8 *)p, 254) =3D=3D > > + le16_to_cpu(p->crc)) { > > + return 1; > > + } > > + > > + return 0; > > +} > > + > > /* > > * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 oth= erwise. > > */ > > @@ -5102,7 +5134,7 @@ static int nand_flash_detect_onfi(struct nand_chi= p > *chip) > > return 0; > > > > /* ONFI chip: allocate a buffer to hold its parameter page */ > > - p =3D kzalloc(sizeof(*p), GFP_KERNEL); > > + p =3D kzalloc((sizeof(*p) * 3), GFP_KERNEL); > > if (!p) > > return -ENOMEM; > > > > @@ -5113,21 +5145,28 @@ static int nand_flash_detect_onfi(struct > nand_chip *chip) > > } > > > > for (i =3D 0; i < 3; i++) { > > - ret =3D nand_read_data_op(chip, p, sizeof(*p), true); > > + ret =3D nand_read_data_op(chip, &p[i], sizeof(*p), true); > > if (ret) { > > ret =3D 0; > > goto free_onfi_param_page; > > } > > > > - if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) =3D=3D > > + if (onfi_crc16(ONFI_CRC_BASE, (u8 *)&p[i], 254) =3D=3D > > le16_to_cpu(p->crc)) { > > + if (i) > > + memcpy(p, &p[i], sizeof(*p)); > > break; > > } > > } > > > > if (i =3D=3D 3) { > > - pr_err("Could not find valid ONFI parameter page; aborting\n"); > > - goto free_onfi_param_page; > > + pr_err("Could not find valid ONFI parameter page\n"); > > + pr_info("Recover ONFI params with bit-wise majority\n"); > > + ret =3D onfi_recover_param(p, 3); > > + if (ret =3D=3D 0) { > > + pr_err("ONFI parameter recovery failed, aborting\n"); > > + goto free_onfi_param_page; > > + } > > } > > > > /* Check version */