From patchwork Tue May 8 21:19:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wan, Jane (Nokia - US/Sunnyvale)" X-Patchwork-Id: 910487 X-Patchwork-Delegate: boris.brezillon@free-electrons.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nokia.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="eJx9SSKr"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nokia.onmicrosoft.com header.i=@nokia.onmicrosoft.com header.b="qer18qWj"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40gXVH6N3bz9rvt for ; Wed, 9 May 2018 07:21:27 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dj2onb/+F5ZU5kAhf3F4w0TZfH8DUZ06q4vjIin1c6U=; b=eJx9SSKr+eu4E2 T1UPyJjYDgW702xVRT0XRuYRv8Oc8LpcvwErDyqYg6c3g5n/IuWJws5dzDbmnFIpRXa14gFvakoYb iNxUC+ZcalkXs9mc9/6gypgpHhvDSeujxSAD6MarYm2yRtrG9p++NlXeEoPSDfGlkzOZbvFNyLWvR h/sgBFq/9JHTq2UPyFGfNcOqkdT/8grCwzy7YiSqZP307XooX2IHxcXMJW2ZfyvwcoUzjZyAagb+i dlSLQ3bIH0UxIbA6kiSGY8DHc17syRFRiLi3RSScrWH+9+94xjxvVcaaK3O4QqwaWC3MjL6+fD5fO Y4flIQBV0gQswBBxFZmg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1fGA2y-00025i-2D; Tue, 08 May 2018 21:21:20 +0000 Received: from mail-eopbgr50124.outbound.protection.outlook.com ([40.107.5.124] helo=EUR03-VE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fGA2e-0001ql-2a for linux-mtd@lists.infradead.org; Tue, 08 May 2018 21:21:02 +0000 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=P9wxoJj0r03gJ67LekaCg6bEFOMnPXiWrULIN96u9cA=; b=qer18qWjSS469WW5s0rzXWW2GznqV6nbZbU2tKCy85mbxS8qu7NNdFPO0rm9YrdXxgQkik95N8aQtmtnJ5cjc1KhSM+tSp/xJIU6NL4xjFXD2s5OhuuTyBEjDnsstJG5dOOY9NHxD8+0zfy+0IrHDfmUq24RZ6OVi3mtQbwgLrA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jane.wan@nokia.com; Received: from cobuntu-jwan.gainspeed.nsn-rdnet.net (131.228.32.160) by VI1PR07MB1614.eurprd07.prod.outlook.com (2a01:111:e400:c546::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.755.10; Tue, 8 May 2018 21:20:42 +0000 From: Jane Wan To: Boris.Brezillon@bootlin.com, 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 Subject: [PATCH v4 2/2] mtd: rawnand: use bit-wise majority to recover the contents of ONFI parameter Date: Tue, 8 May 2018 14:19:54 -0700 Message-Id: <1525814394-30067-2-git-send-email-Jane.Wan@nokia.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1525814394-30067-1-git-send-email-Jane.Wan@nokia.com> References: <1525814394-30067-1-git-send-email-Jane.Wan@nokia.com> MIME-Version: 1.0 X-Originating-IP: [131.228.32.160] X-ClientProxiedBy: VI1PR04CA0091.eurprd04.prod.outlook.com (2603:10a6:803:64::26) To VI1PR07MB1614.eurprd07.prod.outlook.com (2a01:111:e400:c546::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:(109105607167333); BCL:0; PCL:0; RULEID:(7020095)(4652020)(8989080)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(8990040)(2017052603328)(7193020); SRVR:VI1PR07MB1614; X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB1614; 3:2BAE5R2XrOwY9bIiKQNDES/eue4KfDHKz4HgpkA64dWSmdpz2h5NpnA78mqa7STu7w+VfwBeFQH7P5bSwtos7QptNYWHt7YXFeD3sXWAL91/5u9DQLvMBXkvcdyN/C1mysA2Ej9hfCFWg1dmUx3Hg/Ld/S6ptmqkPAaZyD5FylkemK9M3X0hwIIUkhKUy0Q6skScV1vj9KcZtpV98xvCrc9D2zT8gPvswxsbziVmga5mBgRfsSgMe3kxEiU6/fi48snW1YZq8aJcRgurQKB3dN23+3956PS0MC60nu+17Ik=; 25:6PObiia03BU2uJFqsZJBT99n0gfZZ/BKpnW26gokV+qW7V/kEkh+NT1b6APWr13lk3CVhXeC0SvgjHPQBQf1ncBszKeeD17pOLgKKKX6PS/KOIH3mJWiO81H1PUftjqSetahamiYoEkhm7Loz4AxV0Mx2uv1MlbzxZr1fl7rpnT3+4X084FVygtRvvqSnkBHACfV4QJKd9NVHKZ8Y+TQ/ldSe9MnWJbe+MHIx5IbnsAG0RuHpFeGQ3BfPjOcCf85rej3LVG2IyWMNNzSogL96/LfQ9CU1hnh0CFUqsX1TMf0rpnEeh9w7d/jKfgIabZXHTv0eN5CvW5QJ/hXrwn09w==; 31:dV8vzIrFsjVnx3Dyt52bsej2GgZEEGYP+NPbsF6vm4uiGGr2XPzN++TRtcoSFxW7BrfFER5kOzyT+UYh3ZcMTuPrVgvtJoZOGNHzxlfZnd1+g/eVuU2EIxI8yv1L/09bf0i1Vx/0B4S6yyLbqG+YK2XbrGETs6SM/nQQQEd7/snKrKV2f2Ehu+vzh/PxhQRJQI6bW3ELvgl5K4SbfnAIjjTcbG8uGGql8ip2pgYjK3E= X-MS-TrafficTypeDiagnostic: VI1PR07MB1614: X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB1614; 20:uHKmWS22Hg3vHlOUcXAhMqgw3vyvKe0uYX+3n8bvjsx7kGdRgRhv+MCGpEBXFZ7jg2clbzk4nOnN0zXGhvay9eV8sZDM2rkzbYx2LwXDByCJnewkVEDx8e3Ic0IJ9AagV1ektT32IUumSfdn1GOzBeqm0ai3fjQoIp+xlxMZK4Pje9H73VJyP3e5As6KsmY1xEtedUhvALqBOGgVQ2igilyWSqILatV2al9tRCElyi2AAiNI/fjFvquweDfXWwZUABWvALkyjO9PWZ8zm5ktSwqfC+GLA+oxIx5Gkng5e3GDyvWEpCrxwBwlHgQQmCUs4Yfa8p5o73zINDrM61xUMEJ8nyo2cvA5eeb1bUai7cgzH1Z0VDAxZdeFHvvpIJ8saLNkOvz3dYfQCg9j1HtJdjKnNnmCt+vX4bPfNQgvjsVt8L+EBIRyBkqu5i0/z3IKaHRZBMhWmr/EbCSYuBQDzOn6O93KsszeEam5DaHzQkG2l8YAwhO1Xw2IAZfnyeVQ; 4:FA/BcBk4iSkms3CYiAJ+vujgqxUGnq69lYBGk3E2v6A3kFeDDzvjYi/eAsp+GzFUrl9S/W2kzj2lMhcEX3jMkdL/QduO9awBNzj4M+pjI9cZr0UzeLqbmRAbF7cwrcpqlh5W1GHPYhig9ghMVxOubg1rbpfOiC6n0nDDyDHEPIELojVyqdgV/CiQT01qAvmZ3f0KHuCw1GBpmBU42K8pdG85cM+seFgxIuKir5g5/nWdc+PUGW5MqDZoWS4Wy7YbtFAPtA/YcKX9H7hEN5rueOBgL6cjK6bLzFMrxNoTLpreNIB+gec9uIYb1FnGiW92nFqjmPm7PaT83EMKymM4Qjk2M7oUyjmvvNlQPSEA924= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597)(109105607167333); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(93006095)(93001095)(3231254)(11241501184)(806099)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR07MB1614; BCL:0; PCL:0; RULEID:; SRVR:VI1PR07MB1614; X-Forefront-PRVS: 0666E15D35 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(39380400002)(366004)(39860400002)(376002)(346002)(199004)(189003)(81166006)(8676002)(81156014)(446003)(66066001)(47776003)(7736002)(68736007)(6512007)(486006)(476003)(956004)(97736004)(8936002)(25786009)(11346002)(50226002)(305945005)(2616005)(186003)(8656006)(4326008)(50466002)(53936002)(51416003)(86362001)(39060400002)(52116002)(2906002)(59450400001)(26005)(6506007)(36756003)(16526019)(386003)(6666003)(48376002)(6486002)(76176011)(6116002)(5660300001)(4720700003)(316002)(107886003)(105586002)(3846002)(16586007)(106356001)(478600001)(7416002)(921003)(1121003); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR07MB1614; H:cobuntu-jwan.gainspeed.nsn-rdnet.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nokia.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR07MB1614; 23:1jcIS2QGobGtrvl8NrtXburd/L3D4ZiXBlZw3WEj4?= ErD8yAd1/7gvZwNN5ZmvP9rVze16W8yeVYkKK92ASTEirOBcOMFjt+nL6gB0ngnu4XzbWV1Drdb2d/GeVmjrQcyTEqP3PHHMirbQ0kXUzrp7EYKSHa0J3o3QddSlVGvroRDS4Qu4lfClNNqA4aVY9xONn2ZUr1XmBl4DboyLtlRP9X17PKaNk+3SGGWvnkdgqXbqycjdW82aRuwCcRpQGioLrN0GsSGCBftPcyk000C7sI4OnudlcZ05ycTiTFd4ii1vV/GMO5KgxgNIlIbBTKbm7+V9Q9Pofa+70kAwVJO60COFzZ+ixi8PP7paKXDOgovKUqaNQwZFPKqHk2PNm2e7GAhYq4yaUi6t0jgLB8HVUIVN8Rsb9MTiOE/XWeDmkGynzj0UObhuAClB/qXaHF5g6PZCWXLjlwTRtz1laJPKM1P0DdsHIo04TxqXkkyW8ccmT8j1bJFxnFb//jji3ivVYDwYc1V4LG3a3nShzbzSzmZP5hAd7Z8D6ANLfLVAj63/UpBbXDGOAb8GetV7YyhlAdYIWOMWfPspkWkUd5dOxTR/Kjpw3QetjlbXoTCmtyRhXS1BeHwUm3+fYgV0+PAkF27oNkVuIv1o/YHgj0bwedJGU644mEHYmm2Wq5vLadQVzZa/2bDMmwBl7iVsqaSeDgW4zrDKwg/hyvFSB4ibDxS1sQ5EE7hVW6FvpAzYXl2Mgpi9gu+uuYincBcO9FpoSCMx86QEjzngivn4jI0HlHN82sLsoq2VTa2tPWzakC7XlzTlZK77MIstVysR6Ee0/MNkMJ5cQZVahhXMC0PokJdDASE4EIH2PazcZrozr4BaC6HplqqIrQ5lYigZRveVaL1EMS4a0Wzl85kuwO0uoWu7zo1236/SdSpDmtbepaB/9NGBpxLQKDKkulhHgf5nfMmzXY4nB4sN9MzAA73FYbiW49Tz6ys8uQ6RMm/WLDUU5ur72r6tSN8WANdOuUhvjg8B6tkKJ6hWG1Ajl9ilb9zShIMRe4ZVW6HNw6hZF6MTeHb4xooTKGhike/Z1C0EVu66XAQ49qGVa6lrnA5CS8ClHuLwODJpSrDo8MqR6aG+jEiGNCGsMsjYRGbZjBVWCn3D1YXtn4rAKHkUipfVM32Mz86zM9aEnmAlKZZOEiWGZNrbD+j6gpgrPT4FxSPr4woeAAhIFkcQhhAfBKyMPt9/Qmood/xr2OzMehrhJIDvDPpHNq0f4h+yer4LEhp1HJTuUG/hci8Sqx8TmsJCKE5PZ1mJn4Sm3WqOZzlCG9dBtPVVHUPmAd47ufcvV7o X-Microsoft-Antispam-Message-Info: S641d9ko0kXSNa98K2B+V2SxaavXpSM1GeZv6DNIdJ8LBx1wGripzkdeJ/IpLCdLMLI2eFGynHsLEHZ3RHPC8eK/hwUfVVhrbSewz+Q6MwJ3iF3azNLLe/fzDzUnxq0/wCd/zRLX57SJjaZNnpupnVpxdlcXz8TN1mBPfuKV0V3gkPpbv5jYQ3W3Z6V1q4ygoIJRRVxTOvJyqMJgqyVqVGCXgT/MSRp+0acTT6egyDc= X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB1614; 6:eGRHe9TuJUqeIiUsea/zFudWksRXhY5Eaf+7t/79mAXijrjMWEg2yaSrHLAFBX2VHCMfo5QsA/glS1kT0m48ykvw4hxF11aAIXXi9DePUEEK07dBDOl0GqGOKVujLW8EMvu3l68RdAxgqAdwtMC16WSIspY4M1lJAWfiZCrmSsgDh168jjP6Fu7Pqf0GtTfz6RFmSNzIOeXCFkj0HfkAg7924LVE8V+a1Ex3PZ1xeiSeAYKpjIDshfaY4PWGTVU0uYynGBC4Dgb+o5MKA1XFthlvnYX93xP9U10q6BhB9bMjercKBkc5yhvITS/kgcSEYP1XUq17mpBvry1vyiy7P+jYPO3WTQL7elrhxj1McXoqQlzxGQG3Wiw5NPR7Sr299mfUFCtmdNXs6penZelGSYPGoLQilQY99X4srnfJet8x8Zic6ODoqW7A3zhUKGxAWI2IntbnPQ7p6ediWxBfRQ==; 5:RtIimFMQQ6nV1xEV/Cst7ftlrlshGanncb7uEdeFzrehYO2afHj3XiEV316v/0QbUR85Xuma8Ho5G8Abr0Foo4oKNpetM5l3EQNyN8ZqNiTbmOaap4Ypu1XY3LDdAvSwil27wfWr3vAnNJCpjNuD7y/eIsKyp5016fqUPd0L3O8=; 24:EvDwQc0rdG7gEH/Dw6zeke4GGG2LuqOkca+1X28/UCVsv8PXxF2LOwILO8EXhpxHK4FE484Bv10PdiRyRP1XuuRwXbZkwc22DTrXs5fd6Bk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR07MB1614; 7:y2JrTmWJ/CF5PLxxM2mmo5YNr0NU5DzAQcbrYwPiDq+caO8ZpYxAW1hx6RCa/jjQFu3zHGlH+SkHNyVEgECXGTlNbTt7x0h0ilC/jvy6Ko8MRy+wv9jprPKJQEAKRytKLZmgLQo0mYSCldOGf0eRHzY3bP8R91k9ibPiCuYIw7qGPLUrx6DDVcnPO4ERPgA9IoVyWCN6Yb/9RyVcZozZPmuEDLZQlPCMGL9dYq36if4/0E6Yn0LniGndktbi7/9g X-MS-Office365-Filtering-Correlation-Id: 2e74da2b-04a1-41c0-3b3d-08d5b5298fce X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 May 2018 21:20:42.4203 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2e74da2b-04a1-41c0-3b3d-08d5b5298fce X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB1614 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180508_142100_412740_E912C7AD X-CRM114-Status: GOOD ( 14.67 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [40.107.5.124 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.0 T_DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jane Wan , ties.bos@nokia.com, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org 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) +{ + int i, j, k; + u8 v, m; + u8 *buf; + + buf = (u8 *)p; + for (i = 0; i < sizeof(*p); i++) { + v = 0; + for (j = 0; j < 8; j++) { + m = 0; + for (k = 0; k < pages; k++) + m += GET_BIT(j, buf[k*sizeof(*p) + i]); + if (m > pages/2) + v |= BIT(j); + } + ((u8 *)p)[i] = v; + } + + if (onfi_crc16(ONFI_CRC_BASE, (u8 *)p, 254) == + le16_to_cpu(p->crc)) { + return 1; + } + + return 0; +} + /* * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise. */ @@ -5102,7 +5134,7 @@ static int nand_flash_detect_onfi(struct nand_chip *chip) return 0; /* ONFI chip: allocate a buffer to hold its parameter page */ - p = kzalloc(sizeof(*p), GFP_KERNEL); + p = 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 = 0; i < 3; i++) { - ret = nand_read_data_op(chip, p, sizeof(*p), true); + ret = nand_read_data_op(chip, &p[i], sizeof(*p), true); if (ret) { ret = 0; goto free_onfi_param_page; } - if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) == + if (onfi_crc16(ONFI_CRC_BASE, (u8 *)&p[i], 254) == le16_to_cpu(p->crc)) { + if (i) + memcpy(p, &p[i], sizeof(*p)); break; } } if (i == 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 = onfi_recover_param(p, 3); + if (ret == 0) { + pr_err("ONFI parameter recovery failed, aborting\n"); + goto free_onfi_param_page; + } } /* Check version */