From patchwork Thu May 10 21:28:37 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: 911570 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="ZMpTdxx+"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nokia.onmicrosoft.com header.i=@nokia.onmicrosoft.com header.b="pPMR8ank"; 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 40hmZX6DdLz9s33 for ; Fri, 11 May 2018 07:29:24 +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: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:In-Reply-To:References: List-Owner; bh=6caRXZlRjRJ4K907ysSEz7QXrkwWU9OffmIGA9UUT30=; b=ZMpTdxx+ech1lQ JAGmrXNgkmqxIzgoeQnl5vX7foD3LVTveVND0aQlbjOMOUKQKmjVc01Vcd47GO29hpDh1cmye99zz NChWZmFauOkqJ8kTEAhZZWN3t3hopioRUSxL3UR5NBkG87mEgbNDGRYQRcQsbKw3h3xRKh97UJPm3 idI+DSzzjJxwdeobqAA++T4pHCYjo16dktIG3DyVmfTSfjpW5arc1Pouy7vRL8Mb1yo5Al3X8b91G Ie2odGggjhip4ZnGu4V8CNoWi+cVsBzpjmPZQBgbWnp/zeT550+XQWDu4dZNefCtl6aUtEd7uSlWl sGouz8uIzSaicmyer6Jg==; 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 1fGt7k-0001bg-U9; Thu, 10 May 2018 21:29:16 +0000 Received: from mail-he1eur01on0102.outbound.protection.outlook.com ([104.47.0.102] helo=EUR01-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fGt7g-0001Zb-PM for linux-mtd@lists.infradead.org; Thu, 10 May 2018 21:29:14 +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=TuUWQzfS25BIpEnAJ9Ran7v1Es5HdNdVW0aiAXGfIeU=; b=pPMR8ankVx1T8jXcB+PcW8x0Gy88tPKNxNN10Nu3uM4DbNNSOhGcVWJmzHFSivFv+BSyxI/wFYsAj2Me63ZHkK48S2t+f0IezFS9E4vbPdiDkH0eerF0b+G+CgC5QE5tk8MjMt1hbVstjPtitYkHZ0L+TCBQalbLHJ9PFbn06wg= Received: from cobuntu-jwan.gainspeed.nsn-rdnet.net (131.228.32.160) by AM4PR07MB1601.eurprd07.prod.outlook.com (2603:10a6:200:25::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.755.13; Thu, 10 May 2018 21:28:53 +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 v6] mtd: rawnand: use bit-wise majority to recover the contents of ONFI parameter Date: Thu, 10 May 2018 14:28:37 -0700 Message-Id: <1525987717-31675-1-git-send-email-Jane.Wan@nokia.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 X-Originating-IP: [131.228.32.160] X-ClientProxiedBy: HE1PR0802CA0023.eurprd08.prod.outlook.com (2603:10a6:3:bd::33) To AM4PR07MB1601.eurprd07.prod.outlook.com (2603:10a6:200:25::15) 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:AM4PR07MB1601; X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1601; 3:+rQirc/sjs7UbTthQSu7/G4M09bMwQNwIVDcM/mNcgbNiFBYOunv4vILAB2XE29S5a9dTIJdRrQ4CYXFBA1hZOBYYsVzzVWNLBde3EprkKHXThh2W/ZVduBgZU/gLrF6Z7pQBUrfenjWuWfPSohpRDCRug1NFd7QBQyNsRk4I68iWrxJQfs4F3j4799ckopheV6V06ELBIAD+VhzQUbEj1hDpZNkfOY9oceICqY9Eo1Km8jg0bRaub0oC8ND1PxocGCjRdwQZUFKGgl8eRoRTSMknP614wltccLKWl8kWaA=; 25:hZCXJ8Wn5/nUTThdbhMkW2Ejol6oePVJk2n6q5O3dU/psQIxOVrA5Z58oHDoGDqdmM8EEk4NGckshYXDI3GiwEB0HIHfHupVufLSRHxbQyiHXAX3xge793c9qDnV7SAVHZvtFJ2CdhZ0jkOmsy/qb/A7fq0nSHc36E9R1PD9plgKyjwoqTnrjGJCT5GNaBOpNqPOXea0hAazsMhdVE/7uuc5VUvOJvYxc/edMbaL/g86GPiRs9jRq1FPLLQb5NJykCdRV+rXV3jVpx7Z1vgCD3sTLLCyA7sLmWWfiyCaOKuUMaDb+DCXYvX46y+zhoANyCP3jYThNcj7F13AcAC15g==; 31:cFSmjQLld832Nk9zaXzrR9JpgJYbOOe7tJJuXLKExDMoCxUnxjYaLroNq3g23qvwppM9lzcnnGNHra4YsKMN+C45XDK8GjUteSLYqXluMODPoaa/0wuV9YFTcEi+13m/4gM8PjtdIZ1tQHObw5KycXiDRaLWWdtjRqpshuI4tJa5sYkZvwjk6FidMsBbwK4zw8CwPZNVFsOTt8SjsoGgnfCFUPDQ5HaaCiyvreBVmgU= X-MS-TrafficTypeDiagnostic: AM4PR07MB1601: X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1601; 20:bpzaDQrfbSbMBnr+j9tNC/HiAieDBpDXYHXWa319GUIXBGRlL6iDR52LqWXssMg9SCpZ6R1g3u9XyeuUPdfPgsWjIbfFkB4GjCMYKzE466xRf0aoeMTgDH94pj43K1hVoReCSb8OhmTPYyOsWCw9ApshqdzqSDnq3m3ztwB0Ckgvk/ZfPzxp1f2+JM144DlrGmDb7WJWyikvIUpQEzDNWAyHFGiGkR6XC0a2QZXEzi7XsJ0YpmlSWLLj8W+eeuomhog5ZnpYhp4z8AavzlJu5TMoSJVHTq0Ee6G1+V9OzEi9UTvFmkuv14SAUhurq3sDHJLEJmSKAtsT61snR17iZ6bXaCA+NpvRSss1pg3G+75GWHLeS9rsrNWyCCBMTmtwtdTObpcxQt8SJY4SRJJZFU3T6a0Sm+g68mXWV8pmFU59kocMwKbs64LBMB+9Dt/pJriBM0ciWPXlvHTI9cuwISaAPDGoZbLNoPveDfyYvVxnE7eRfPhyjwZXiWStNDD9; 4:G3kvOaRNdV8jsaTpWbmLf0acJqERfe1ksw4wdkZ+L5bpus7ka6PDbjjrQvSNFRgNRhFHXsbu3qXTnG9TeqjZuNddSfNQThlBq8vQ2cpSuIGIwrLWT4gJnXMKZBHVaYeGJOWah91zhL3NVlICNIMyhynQJLUy0MI0OWeKHYKtlV6KAJCBunN9b2yIQJurEXjLSPvmVHiT305O+Bgkkfomq9wqZwnyQXXHcWrvIRd/l0WRTKZwCAZgmQ0/uBdIzbvopO5LmGNpdBFHY6blO2SSW+UthGPcKGhjSXFBkQXZhj3UkCPUMYuXrepQccKShVk+1nTpcIdbilhyzt63FqT/dN8R1tMGCj/Xu4MeyigkAtk= 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)(8121501046)(5005006)(3002001)(93006095)(93001095)(10201501046)(3231254)(11241501184)(806099)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123564045)(20161123562045)(20161123560045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM4PR07MB1601; BCL:0; PCL:0; RULEID:; SRVR:AM4PR07MB1601; X-Forefront-PRVS: 066898046A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(376002)(39860400002)(39380400002)(366004)(346002)(396003)(189003)(199004)(105586002)(86362001)(47776003)(386003)(66066001)(26005)(51416003)(6506007)(48376002)(305945005)(7416002)(2906002)(50466002)(3846002)(52116002)(106356001)(8656006)(486006)(59450400001)(6346003)(316002)(68736007)(6116002)(7736002)(956004)(97736004)(81166006)(107886003)(4326008)(53936002)(39060400002)(8676002)(6512007)(8936002)(25786009)(50226002)(478600001)(4720700003)(5660300001)(36756003)(16526019)(81156014)(186003)(16586007)(476003)(2616005)(6666003)(6486002)(921003)(1121003); DIR:OUT; SFP:1102; SCL:1; SRVR:AM4PR07MB1601; H:cobuntu-jwan.gainspeed.nsn-rdnet.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: nokia.com does not designate permitted sender hosts) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jane.wan@nokia.com; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM4PR07MB1601; 23:w8Q1/kD1pIUxyOuYmM52zkLudeOlkJ78e6OxkF7CU?= 1M3ePDsBdaPyyExueNT48El/AZYKJvFcbTAj6mdOb+X4rJ5RHfT5UiLYcCBogm5SguMtFhWDsvnTLsP85wcKd8TOgs9CnNorp0POPlLupel/M7hfkGv4foWncNnGQ3KKkqu63xDS4RUIrTkMzIcuSqLIl0492ui14lcPA3Xk/3fPWSLGxDtC3UIYdPlLpVJ4TmYEsfCBvcAhs7NnITJMJaRb92plxkuz5uFuiBNLwx0g8a/XtgrTRVwOptS251jLAYWKfAbyrBIlFkcOlveUfczsAKkQzBmWwKspxvx+PJnPoZ51oSe6IzOaXGhLjLSJIKIp3x8DJeOk0q72vA51lIhlkZYE9pGNi4g6tMeH6Km43462wjzD+vLwDnC9v7QtHqjq7pg30km1f52C8ggjRlEfe58rGwfA4uz1A6LL8vLxEfYMC5BYtBu/abI7cR2TXg4ou/NqsW23mfXr9g9mh5GEhkE5SnKjRpR/zo0eQv72g0GWfzU3hYGJX1MYqB60g4Fmw3iuWmOMxcm1RXhszssRISgcgYQyK9qgj/jc0sEXjzaaURSqexXI8jCHxfe7+/FPiZ3P9dbmtD7k1UApL+Wy0x0n88+oG6jlIp9ApGwHEG1OYHeeoOYqDm/ATfujQovbj0P3GC3i0lkh70NE2jGEGY2L/vfmqj/nNNjUPV49USS/rJXZz15illDW5QFW2AwoTHhOZ5iP2mFM864UVTmnCfl2adfoAmmbjgBB1fl4w4D8dXo4rg3Nk0zIxe8uz18pIB0u0td79tor/zy22xqn8jv5/tKxpXd2ewPUb3X/yIdio6hxOuMXw9d1+RPHZQalxlZeBmfZU0Hha737VI2zz7mAZfoF9hojyQffbgif+he3oqNM0WhWQSqgqH9dRQbPkl9QcWkpLK6202wStCX327ybZSpU1257Gp/6svwoUsrFbHna/jHnvLb5s9BeWrLxj6JtblIag0eZXjaxMtBmkETu34uX6HWWEjzTa+F6esdSOd554F6Yc8k5L/O7VtI+Jd/izAMHiOYJmZOPHQsdURg3UfQiP5FCqjum3Dh7S62PgPzkSqpsq/JZnHzwfTmue5u1v1WjWGmw1+ccsJXbILSswLjSSXt1zdGNloE6h4eoFgoJnUIaz83C8RbIapp++Byc/gk00p+JMdT10vQ2SCT+rxgPEkAngr+p8pxRv3MiNkrYZzEXMMlizR/UewmsJWZk8Woayc6todh61DWhSbRMTewBP7ZOojooV/g2A== X-Microsoft-Antispam-Message-Info: 7F/I7flatsz370JOKNcgYNEO4wk3fB9H7yqRAGEJA/DefZJu5vD32ce7spXPpIB2cKrUlU33DGnBL6a/ZLhkHpY50SbjRMhAPrurTwYyEWtoAVF5+LNJrzj/HxDTVGwSQj6lIfJ90q8Qud3P+CT6IWuNxzgXM+SS6HSYzDrIpLs1v0Vos9pvjMEUU/pxgF8uFRrXSq+E7ZFD7yYB0IIoWL496cIl0TumFAK2Bqw2Hf8= X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1601; 6:0A5izozw7T3v7o+e16xqFLe82Z2/yE3ytR65cuN4k3WkDY5H27SUrQhxtzojZThC1bzGpHi7bfeNcc4dE+PZ5Es/lPUap6ig1bW6Tl8Fb7XwRD0GB3O6nDFb57h20DksEd32ud1Jfm82uLDjtPWLPgY2t9cnFpXeuYn+a3FFGRdFFqVHmEPZiGCCuW9LIm4iZPmeWmLGs92Vcpymo8w4I07hZmq2SyuUJimx1Bl+9nBTrozLpK4sGRMiocamS/GlkiYTAIksARuBpHIpOlGvG6/VgIS/sx1KvD5PD7rPfuzcx1YC5x2D9BnCgYqx/1YQz7UYIf8BxcCEvwnqJNhNlS5XBGJziWzoyOKSAmL7pN6SbGsOFMOA+eeX2mmtWCIQAGIUg3lZsTBJBmn5lizVQYJ7VIJtgYwgZ5nWIfkcykqWCmtYxW85LuKt0vUG37Q29cKTi87lk3zCLIB2wUc2ZA==; 5:xu2PsQ84VRWMLjJzIqn5VEMZ9gi+mXJYr+GZ9ZlK1VtHPbV+iLnK//L4Zp/Vms9yIdUFqyMcuVmDIkd0num4vqRcWxFVCHeYH+VwL6eWu5X4/1GOS/3YYBr2u+KQXP65b+mxIp45I+UyW9s+sz8jb/rmankasSsvOOavz3aIClM=; 24:Dy63Ojc6l5nZwfMPIbse2iJnR7ddg0y97CY6bUSKXDjMJYyzGTJMI9eY74Ri/1LOui3EAORZg5qbY2FwMasFPaPb2AX4sqE06GTgWmp3aOw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1601; 7:P3JeT3F+PZSdeO5FwcpGl73Hrq49V8H5Dpbzg76Gnx/DSr8+H9eCvFwn4B5MufBI9LQ8nWzCX7vCUF847+Mv56ju0rbtr9q8PJBwD1vCbdYjKPlXv14QH7MZo1j2VDCDw/qSXlptLvjyqT4dv4yOMlaY8rS1dad/Znctwcc9IISTKA80y5kA4m0fyOtdtYeml2nlx3oNOoDVBQuRky/t1F9bF7oy/EckIkX8wkwsDOsejxQT51HLP+CiOBy2lEIn X-MS-Office365-Filtering-Correlation-Id: 1df9c17d-83a3-453b-7e52-08d5b6bd09f2 X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 May 2018 21:28:53.6943 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1df9c17d-83a3-453b-7e52-08d5b6bd09f2 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR07MB1601 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180510_142913_017034_DD41BCB8 X-CRM114-Status: GOOD ( 16.51 ) 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 [104.47.0.102 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender 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 --- v6: support the cases that srcbufs are not contiguous v5: make the bit-wise majority functon generic v4: move the bit-wise majority code in a separate function v3: fix warning message detected by kbuild test robot v2: rebase the changes on top of v4.17-rc1 drivers/mtd/nand/raw/nand_base.c | 52 ++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index 72f3a89..acf905c 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -5087,6 +5087,35 @@ static int nand_flash_detect_ext_param_page(struct nand_chip *chip, } /* + * Recover data with bit-wise majority + */ +static void nand_bit_wise_majority(const void **srcbufs, + unsigned int nsrcbufs, + void *dstbuf, + unsigned int bufsize) +{ + int i, j, k; + + for (i = 0; i < bufsize; i++) { + u8 cnt, val; + + val = 0; + for (j = 0; j < 8; j++) { + cnt = 0; + for (k = 0; k < nsrcbufs; k++) { + const u8 *srcbuf = srcbufs[k]; + + if (srcbuf[i] & BIT(j)) + cnt++; + } + if (cnt > nsrcbufs / 2) + val |= BIT(j); + } + ((u8 *)dstbuf)[i] = val; + } +} + +/* * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise. */ static int nand_flash_detect_onfi(struct nand_chip *chip) @@ -5102,7 +5131,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 +5142,34 @@ 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; + const void *srcbufs[3] = {p, p + 1, p + 2}; + + pr_err("Could not find valid ONFI parameter page\n"); + pr_info("Recover ONFI params with bit-wise majority\n"); + + nand_bit_wise_majority(srcbufs, ARRAY_SIZE(srcbufs), p, + sizeof(*p)); + + if (onfi_crc16(ONFI_CRC_BASE, (u8 *)p, 254) != + le16_to_cpu(p->crc)) { + pr_err("ONFI parameter recovery failed, aborting\n"); + goto free_onfi_param_page; + } } /* Check version */