From patchwork Fri Mar 23 21:25:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagdish Gediya X-Patchwork-Id: 889837 X-Patchwork-Delegate: yorksun@freescale.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.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="ICXbtksH"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 406ycP15q5z9s0t for ; Fri, 23 Mar 2018 20:17:39 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 919A2C21DF3; Fri, 23 Mar 2018 09:17:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: ** X-Spam-Status: No, score=2.5 required=5.0 tests=BAD_ENC_HEADER, DATE_IN_FUTURE_12_24,SPF_HELO_PASS,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id D6246C21D65; Fri, 23 Mar 2018 09:17:27 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 53BE2C21D65; Fri, 23 Mar 2018 09:17:26 +0000 (UTC) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20076.outbound.protection.outlook.com [40.107.2.76]) by lists.denx.de (Postfix) with ESMTPS id 9CC09C21C6A for ; Fri, 23 Mar 2018 09:17:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=nNoYbk2W8OOnpoFDu1zGMCr63npvpKtw+HpyJeIZLQU=; b=ICXbtksHyo/E/ZhLcXqPDKlMLXCqYp1aSk34EUcIWkYaltEXWHgkr/ii/8NgMOlvoL/wUOt0ld29K+Xq2PhQpemFAK/w+TlDmOu8HCI4+9p62WUWBGcU8V9tzVGYjegs1Wy7LlBxbovl0m7hlwbp7uPimj2z+3CkseLcstg3shc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jagdish.gediya@nxp.com; Received: from lab_pc.ap.freescale.net (14.142.187.166) by DB6PR0402MB2773.eurprd04.prod.outlook.com (2603:10a6:4:96::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.588.14; Fri, 23 Mar 2018 09:17:22 +0000 From: Jagdish Gediya To: u-boot@lists.denx.de Date: Sat, 24 Mar 2018 02:55:51 +0530 Message-Id: <1521840351-28427-1-git-send-email-jagdish.gediya@nxp.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [14.142.187.166] X-ClientProxiedBy: MA1PR0101CA0020.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:21::30) To DB6PR0402MB2773.eurprd04.prod.outlook.com (2603:10a6:4:96::10) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e0ab81c5-1fbe-43b9-b32b-08d5909ee39a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB6PR0402MB2773; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0402MB2773; 3:d5SnD27vZm98dI4nVSL+3OHT+BoO3M7GHyTNX9z400yXv17UeyJo3YgL9inaYWdpYdKICsHJzTIyMohyo/qVN320XIHMlU3QLYeZDFPqNhEaA6N3n//t1/qg85sWrxm/q59j6DCIuUnVrkeK/iQFxD/Ruy5/q/i6L3fTlwpFtKMdpQVeG2UmXNmDZ6Jm77MrJ2OfmdfUt3hyKeZuVb+s4D0PtpP//y9fi8HqmVBLMKcTRWgMnnl05XFGa5SecHSQ; 25:YixCGPMgu0xdUa9VgDLa7s/PR7IK/+rU5uVPj01Xldfj8D0Y7F0r7vJhhwihoaHa7sL9B+ppHmQ1h0PX4dOdgP7OoBCf1uo+qXzeoUJqrklKJpZNrEFOEvzf8YlYq1ED/LPc25GryjnsccSnUACVWalZeHXTQ6j8TJXOdOPnRkzjrmWW2vH/cR7t60MQ3ZOTP2nMSL9KKD0xy4IO7yp2z49p5jebQJBE4Hg6W0tZ6vOQVi5izColjA9QmHOoYF1KqWK2ej5ndrSrm7p/YlPwuZgVtd3wJmh6ufN7vjN07OC2Ygg7MSLhXIsCK/gbuokPAYEzwootzjdWKgUdj9hwWQ==; 31:vkq8ljWIaUDhJgXNL1l6zwQVLYU1ngx24Wrad4q3KOm3ieRqDkayGatOJdNOimPPkkzwV2tJrlytIBTzKVNKXXolaw/GG5yB00HZ25aS+HMGtmfqKDVfv44/h7Nra9yfosqWylUMN2BVQQTjy9NQasf+j4sWUsgvf2zptC2XeHZPxtbRebs/UA/q5LVmzWKjKewbveLfg/JAbwAzB+x/1Ao2KFD/vnnrtx8fGl+f3M8= X-MS-TrafficTypeDiagnostic: DB6PR0402MB2773: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0402MB2773; 20:s8+KCQ8HIJ71nB0IbchvqVGELB9tTxY6/MccMSa31F2uD+D2PvSPfptuBGQYlw/oUfvKmSAAAUn/Bf/4J9OJwfz3d0G/Ne/Md80SPkPjWd7aI7GMhYo7dWBP9AZZLkn+XcZ8KdJmGsyMq56xZ7JuE1EJKN0jZXFqES/x5WZYcU4h6bmxLWwKs6GoVGO4XGfThnggNqyePcDWUOw7Tr/trTj4MiFjHdWhsV5xm844pOSEhy/2nnU18juND2Eu9kI4U63kZ4v5ZrcScSoow3xf1tNZYZlyr5Iwcio04IPniFcXjFl6guz2nvFc/a11qMCClCdm+jV4hi222mIKXzH0F0D5QUugNGGGfRVEGfVOvnUmcBHHNTZEN9GVnS3Ekp0w/qjYEzSrsPvBPrH3gCUsy20picnbASJKrec3b8kdcuLn490++q5VSdEVmO4jR3YY16NESzSIksuUPX6gXDq47OJDtLmgtwgq1FMTJ/nIojgVmwgEYmLgRjIBR2Y91bI+; 4:Zmv2YG+G8y3VUFWSmuP/7QXt7Fg+rbfSUt6SEMF2a16rBfwWOUbjKEG86yd7sfCZn7QjSUWRjEafqa8fUjYmZLEeJBHlECaXS/hmtN69IQ86l+/ChQw5RfDjuCvBusMYhDOrfjX0wirqfCUcr9KTZYyRefgbNRjdWXfV6bz043yFEdo7kZv0y1kYEETgG9Js4pRZxA1LjnRTKfROfkhHCNESGyBoNTQkjGCc8qOlvkMCECRBavOy4baybzWJrf3V2PHTg4zAv6xK3uc47/z3upbDY45hejA7mmBcU96ABdZr2QyaRSOcg4ac0nZ57IbHqR6gt/rSFiXKa2vkTWs2YmkGXxtx+VDha5EaGHIjygo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231221)(944501327)(52105095)(3002001)(10201501046)(6055026)(6041310)(20161123560045)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(6072148)(201708071742011); SRVR:DB6PR0402MB2773; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0402MB2773; X-Forefront-PRVS: 0620CADDF3 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(39380400002)(39860400002)(376002)(366004)(346002)(199004)(189003)(6666003)(81166006)(47776003)(26005)(8676002)(81156014)(54906003)(2361001)(305945005)(8936002)(186003)(7736002)(6512007)(5660300001)(6916009)(68736007)(16526019)(1857600001)(86362001)(55236004)(53936002)(6506007)(48376002)(6116002)(3846002)(25786009)(36756003)(97736004)(16586007)(2906002)(386003)(5009440100003)(478600001)(105586002)(2351001)(50466002)(66066001)(51416003)(316002)(6486002)(52116002)(50226002)(551934003)(4326008)(106356001)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0402MB2773; H:lab_pc.ap.freescale.net; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0402MB2773; 23:QnXzZnf/0p59bgduHVE5Z22ChYSx0NahM/EwhzK?= Or2X7i7GStdgKanFjcgtIiyNDQOtk5JTPofpvE48uGIti+qeCAcMYPjgoE9ekTcsVfMQvXCJ3Txld5sJsbo0mvhT+cDKhu5OuQ59TcRei15X1wJYcBgqznQNgf5c9JfqxC1TRKD0nuv5NIek3j+l9+3JQueAedKpzeHbPHDfCf/tD90++hiLRdkUd0H2sprJ9OSM26S4PpNh3zduG1Kv3EgVwo1H6Wdt42dlq+Brax8SlIpdxg/D8Xmx1hY7PUTIh9P1Upoo+eVcydPHpr8iRV9sGplJb8GwcsM70WqCbx+czdvmdJflvqXk7v6eEfFhldawpnTTwRDpEVMTEEk434An2QmEcyKEnNuWCjGcNBs+FdncowPcG0yVKo3Azsainf0fGYdMpBxAP1kJByyM5pStDglMbnRwX2qivU5/5BeaqfAzQCWb5K78djE0I4syR1U+PAIYdiuVTPEz9n6hYXNVjXGcghwj5L2OPumF/UHGllvaEO+Bkt4mlfAOozzXHZqK0sxE4EMwXHX1T4mROzTe4aST3pRrJx8W/m736LNn6samwKZSUB+xVWDhdd20wTExloiq03s6UZBS7zS/W/ih/0VDFOalRJFEeGXLDW9Z7sh0Hd6rKhBqC9Rl3CpTv6LDbGNCin9d0xC4tlg2WwWjkKKpUz8PRWso9DJiTc4zy/9/VBk0J2SQYJISghhivpxN6WcuVcofSONZtAtv5k1kQfR4/I/UusqTpI5of50uvGw2/6IcGjuvyR8eTnphh+svgoevjyiCrRYQ2UIUMqVT9uRRJVxVNRZd1oB/UC1gDmJQuR+dodSDKgMk7UvriPtCByNWWsk/pliXqcwsdGfXs1x13FJvjhAmvLmpzdVaYTiLEXLmHuhEIq8ys4IvD2mZMCDlcpG26pXE6anEovmWnWFMAM4H4HaOKPc/keOUzQQXLi/nCcl8iseebiY8O3nNyFmULHot43vuFTBfqqcD8YM2wKVu0ON/NDZQdJ8ay4iShLFMp/JvJUZtD+g1LONc3b69Uk9zE4d4vnLdD+E64t83H4xZDmeqaM//c+SWGtBCUSDhVMa00Jqs+zb+bIx+Vw8O+n6GRKz8jBiW7VkwkxUi+Phr/cz6VK5M/Hftd8FsqNywSSuWOcDzbDxLF01gBw18lwta5pw5QkSOXbfIrntwxi2yA/nY+0GCLku763uW9Vfm/62rQ7CpN1U6bkOU= X-Microsoft-Antispam-Message-Info: FkXZSb0d7ZgIsxAPB4+2b++Su65m9SHKp+92G4dibEwK3JKB+c3vShP8qqV9tXoCuyzSHMKBr+N+xo0r+2OCGU4CMN6E5SSNFUMBsf6ly2dCDHr8xTpkc47ch9rfbS2fSaUIqsoAHQdlK0iuPZu7e0lnrWpRSoRZUUi7qDyQ2TZ/3ASxvCIIp5HBboBY2hCW X-Microsoft-Exchange-Diagnostics: 1; DB6PR0402MB2773; 6:QB0ACxuyY0vbtzTLyhs3hnqYUxuVGVM4d9aX+071Y4ccYwVGcKidDCRVy+nnkPSL5eIkvx3IzCjxW0ztgVI8Q5kb+ihYZR2Ba/Gro98q96bop2tpfbn9bfLvSZbCGUv5nTrHc9yRsbeQJ2KSgEPncigffGAepUFzebGATEc9IjmmnH8nJgu9GzskR36l5eF8MerkqE2bksYohQ/RHJMBMvZ6NbdMu25Z94GOmTkEkNbH8kYH5JbCuwAhr+e5tXEnyEXMl6RPkkeisxKPlK5voB/rnjdCmxTlcgvs5zRH2O1k1bzf68CPF23Ltym5H9UDmGe90bPoLaDY0C9wS7WkdIcgf6SHVyQo+yWICTcUJxo=; 5:hY6o6xN8/giybpKbejfljBz9kEmzdZCvOTCe/DLvdWsxaCxExev5q+WVz6wJ8XtHbESmh09BlT8V7uhCZVNZ4c1AzM6L0AY7UxR1vB8GMPQSbJXjbvXw3YLS+j5TxMP9SyAjlKEjkxXcbad7WrHCGxi+DoZtbVkoVygy7hOsguQ=; 24:oLJhuUkzjT0y4ZCi6WNUjrmKBhh+GGJyGIADHxC8/8Jn1UUNClNBT9ezTSSKTvxE0Mbp2OJ24Cqp6YUzEWWCN90ibwau/pb44SphgotoaAo=; 7:KIWkEOrc09pDZOwKChrVE8Dh3042iEyJP9FBYdwluqbjftqN6z6lQ+j2zkiIdpNV9Un4qOcvBW4zfzrcquzgsvGczfcXh/KMbs46002CwFBCH2BVqgA1QJPHhM7/oaDVjaegSwH7K2H43I3HhtbzTGtRh9FFaN12yULwshJLV5T+jR5kTquiWti4/NVBYzdNHFNi1YrxY7OTFkqbKedjdpxs9MlbnRGJnmTnPfV0vNtz3/uidsW0vuBFQf1VDFY7 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Mar 2018 09:17:22.4342 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e0ab81c5-1fbe-43b9-b32b-08d5909ee39a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0402MB2773 Cc: oss@buserror.net Subject: [U-Boot] [PATCH][v3] mtd: nand: fsl_ifc: Fix eccstat array overflow for IFC ver >= 2.0.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Number of ECC status registers i.e. (ECCSTATx) has been increased in IFC version 2.0.0 due to increase in SRAM size. This is causing eccstat array to over flow. So, replace eccstat array with u32 variable to make it fail-safe and independent of number of ECC status registers or SRAM size. Signed-off-by: Prabhakar Kushwaha Signed-off-by: Jagdish Gediya --- Changes for v2: - Resolve checkpatch error - Give suitable name to variable and do proper initialization. Changes for v3: - Changes to avoid reading of register twice if sector_start is multiple of 4. drivers/mtd/nand/fsl_ifc_nand.c | 32 ++++++++++++-------------------- include/fsl_ifc.h | 4 ++-- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c index d1165f7..c36043d 100644 --- a/drivers/mtd/nand/fsl_ifc_nand.c +++ b/drivers/mtd/nand/fsl_ifc_nand.c @@ -270,14 +270,9 @@ static int is_blank(struct mtd_info *mtd, struct fsl_ifc_ctrl *ctrl, /* returns nonzero if entire page is blank */ static int check_read_ecc(struct mtd_info *mtd, struct fsl_ifc_ctrl *ctrl, - u32 *eccstat, unsigned int bufnum) + u32 eccstat, unsigned int bufnum) { - u32 reg = eccstat[bufnum / 4]; - int errors; - - errors = (reg >> ((3 - bufnum % 4) * 8)) & 15; - - return errors; + return (eccstat >> ((3 - bufnum % 4) * 8)) & 15; } /* @@ -291,7 +286,7 @@ static int fsl_ifc_run_command(struct mtd_info *mtd) struct fsl_ifc_runtime *ifc = ctrl->regs.rregs; u32 timeo = (CONFIG_SYS_HZ * 10) / 1000; u32 time_start; - u32 eccstat[8] = {0}; + u32 eccstat; int i; /* set the chip select for NAND Transaction */ @@ -321,20 +316,17 @@ static int fsl_ifc_run_command(struct mtd_info *mtd) if (ctrl->eccread) { int errors; int bufnum = ctrl->page & priv->bufnum_mask; - int sector = bufnum * chip->ecc.steps; - int sector_end = sector + chip->ecc.steps - 1; - - for (i = sector / 4; i <= sector_end / 4; i++) { - if (i >= ARRAY_SIZE(eccstat)) { - printf("%s: eccstat too small for %d\n", - __func__, i); - return -EIO; - } + int sector_start = bufnum * chip->ecc.steps; + int sector_end = sector_start + chip->ecc.steps - 1; + u32 *eccstat_regs; - eccstat[i] = ifc_in32(&ifc->ifc_nand.nand_eccstat[i]); - } + eccstat_regs = ifc->ifc_nand.nand_eccstat; + eccstat = ifc_in32(&eccstat_regs[sector_start / 4]); + + for (i = sector_start; i <= sector_end; i++) { + if ((i != sector_start) && !(i % 4)) + eccstat = ifc_in32(&eccstat_regs[i / 4]); - for (i = sector; i <= sector_end; i++) { errors = check_read_ecc(mtd, ctrl, eccstat, i); if (errors == 15) { diff --git a/include/fsl_ifc.h b/include/fsl_ifc.h index 29aa687..4bff019 100644 --- a/include/fsl_ifc.h +++ b/include/fsl_ifc.h @@ -892,8 +892,8 @@ struct fsl_ifc_nand { u32 nand_erattr1; u32 res19[0x10]; u32 nand_fsr; - u32 res20[0x3]; - u32 nand_eccstat[6]; + u32 res20[0x1]; + u32 nand_eccstat[8]; u32 res21[0x1c]; u32 nanndcr; u32 res22[0x2];