From patchwork Wed Mar 21 22:06:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagdish Gediya X-Patchwork-Id: 888658 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=nxp.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="C5Z/DzZx"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="FAQMZvoq"; 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 405lc81SJXz9s16 for ; Wed, 21 Mar 2018 20:58:16 +1100 (AEDT) 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=6NyzPcPZq57y51dlJtYXNc3Ov99No7v34lzjzO6wZX0=; b=C5Z/DzZxIwNz7a YqXfc9PZF92S5uIdM475KSpiFirPKOAdwVqNQbTZy1sW8KAamDgL7leTMOPUPam9lIhhLdawhYJO9 iKBaA7VxDsdqO8qNgFWxZMTBK0PPC309piV1toycE1puvvno57ug5BBwpaURvizYH9i3/CvcaNo4m qr4hFHBFS4sxxMc8g2DHlQ+PIiUdufro67PlIfWRxiOSk2JL5yu7QEU1ORWntgjJMt85cn72Y+GPv ybI9WO2tbs/px/Z5z/Yk1KzK1NdYap7dYO7Yk0CUB1WM2/yAelRlhbcS8jUg+buchUQqCKSGQsqUf KLeMqRV2tQ/coBPGktRw==; 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 1eyaVT-0007N9-Ct; Wed, 21 Mar 2018 09:58:07 +0000 Received: from mail-he1eur01on0041.outbound.protection.outlook.com ([104.47.0.41] helo=EUR01-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1eyaVQ-0007LT-Cf for linux-mtd@lists.infradead.org; Wed, 21 Mar 2018 09:58:06 +0000 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=+kom6aFHWfEuM+H2AGND2nN3Qa8oihuzSMEtiAe14ww=; b=FAQMZvoqWs1LYF8o5P+F9KexIK0tBNsqSEgPS5phNUD8JUDaYvkZsAjENvjPhYbmLwfy2Jimrp7wjSDyiGEbqiR3vQHGGOLkbPxC4oCNiQrmxh3JYb9cds4M9Q5QSafJePTdCtq8Ojid20BDEk16krh+bOtDn0c5boWKCBABWao= 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 HE1PR0402MB2780.eurprd04.prod.outlook.com (2603:10a6:3:d4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.588.14; Wed, 21 Mar 2018 09:57:46 +0000 From: Jagdish Gediya To: linux-mtd@lists.infradead.org Subject: [PATCH][v5] mtd: rawnand: fsl_ifc: Fix eccstat array overflow for IFC ver >= 2.0.0 Date: Thu, 22 Mar 2018 03:36:03 +0530 Message-Id: <1521669973-10450-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: PN1PR0101CA0016.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c00:e::26) To HE1PR0402MB2780.eurprd04.prod.outlook.com (2603:10a6:3:d4::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 5cce0f99-c40c-421a-a678-08d58f123400 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:HE1PR0402MB2780; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0402MB2780; 3:R0cfzycgt9nZC6BLi+uj2WiHqk9n1pTSgSl9L7hZ64D9K/rzn43aO+Jrhww4UcFbWDZ7+aANmK08ih5BxP/FLDnYJCCdBV5e4lCkrGFwE75AhnDnoF6xQcbRSSUvAnWDiIFiiEyY+QNr/2fglYNQraiGQSLdIw5jyBzKPnzsmrcYEL+S47tiysvurNt8HOJnyp8EdbF9Zh0ZbA5YmmYg2NB66wB2cdkdO9ag3w1MuGQuT96nRzipEOwftt1F39jJ; 25:m/wvC7ebbngpOuJlT4tQj9iHRIKgiQQIYHLyAKE6reCvTG0Y0M0F1DSEKmO/f7zRaBUVSEoPkFmeVSK2uUot9GwNLTMr6imDnqbc4Y41/cazk7dR6cY6k+TCv98rSfuBn0s/mw7MIWhk0EHDz8WxTj1QknWqyZ0WVRUNf2zTuuKhDRb/Diy9JVmCOvKhOe2G0D94NJUIpuOWiTXzG1hW/w1ODmYt1D1KTT+T9zohe/1yPCFS3pdJXV/J5BMHqyIk4EJ7m9c28wTYIpDNoMwys3lLJPFQzOGOYZbcLlMNQlHV3Zzct+l0JmnxbYAFY4q8qcYQ9mspz+R7rnYVTkBesg==; 31:MfUw8668+yd/uQRz7HMTugITvs9CYRKZIJpB3iX7IAmKZ2GBwaJIXWta51L8XVUyZ/0Z/KwOqZ96/l3g7s8DPP6QOSahrc76wMDt3JCzhW+pNnadsipzMCIzKQSZ3siB4E0uzq134cVQs4aiULA7XbuqIbK7Kax5e8Cqa2SeXxNxHkBBX0vT8VXucQ/TJaFrfX0+62lV3lR6dTlXWKkeZk1OUEk6L9Yc/Z2PNeLGWSE= X-MS-TrafficTypeDiagnostic: HE1PR0402MB2780: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0402MB2780; 20:iaKj0AAoPP8INxwbIkmzD8GhSuny9v2gKGpUKqhv+SafwrXdjSUM9wzt6D6D6E3NxsuJkB+60Z/nlD852m22q/LB5CQXjnm50kwCA465L4+kXVtmEfF8kz7RwnGA448rCm0/dGesLGJZGztLjb6x3NuRSUXF6HuUoBbUjZWN5Rw3nDVUIGo8++A8HUjl/ROxVyUxnxExRE8v9ygZmddzbBTvBmU8RIBFGj1PALxm0Nz0NqU7Qy188v4k/k2IDxFxnw55uNi7YOmZ1rZJb8+eBg4necbffq4Tj5Ryh8VupYXRHfO3R5mYyAEncUBo8ZRvpPKeixdYBsLmhh9Lz4zHBxZYmIH80CWXrwS8r5HOR5Jcs46qfyYz5LwYRsBuqBI2ezzJoqfX5JX/6dya+zXXc56xAASZk9ew6C6UkcSo5wnE/8Sm76IQASJyC82bO0g5ERVGiCTy2XZU1rcMo3lqdD18xoAoxIGTN4giqIHQj0Bd6jem5pWOv9dGz0lMYpMI; 4:2t/bAjfbhiKBJS9FfPynM8aA3JsWst0YL1Pc/afkkew8wShdWedxivFSC2tuSd7JIvdpKIDCRYN9NlCKX6xSWt8Yi8Yp+NM55ubzRbIVXWKe4bpNxGsQFo7WJISM/CzbnmsHb6p9nrYRhzP94DEfxIZpdZCLE8EtiBN2BUhTDvnjeSsjUssHZAzRxrA3IgpFPhfLEoAuNnv7c+7mSlNEKB8xrmR2W+O9Jy6HEN7tp5mP5V1slYu0PfWgoKx4FW+IPhjZUi2x9nxkXeuITPslVSgTHWdcwncKeEEjLAoNlWH8i+mn4yJzakQpM9oNvrHPxJkMxBhCHv34/vJ/8gV2gNDAG+eWZxXU+r/XxjhX48cex1zf3Ek+5ZjXmo2cdJO2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(185117386973197)(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3231221)(944501244)(52105095)(93006095)(93001095)(3002001)(6055026)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123564045)(6072148)(201708071742011); SRVR:HE1PR0402MB2780; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0402MB2780; X-Forefront-PRVS: 0618E4E7E1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(376002)(39380400002)(366004)(396003)(199004)(189003)(55236004)(54906003)(6512007)(53936002)(81166006)(68736007)(575784001)(86362001)(8936002)(316002)(81156014)(8676002)(50226002)(7736002)(39060400002)(305945005)(25786009)(4326008)(6666003)(5660300001)(551934003)(106356001)(2361001)(2351001)(105586002)(6916009)(6486002)(478600001)(47776003)(97736004)(66066001)(3846002)(50466002)(36756003)(6116002)(6506007)(2906002)(48376002)(186003)(59450400001)(16526019)(386003)(51416003)(5009440100003)(26005)(1857600001)(52116002)(16586007)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0402MB2780; 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; HE1PR0402MB2780; 23:pC1DBXVRti22NC6dPCdxe5k2eWHU5YIRcvkD/iJ?= Q2zhHAchtNuwHhyjrBmQerYi1XMDhZ6VjqVNKBzHnKJwXFHDfgZT2MOWUACVsPTUkjXD1KE+GpH7jqJ0N1TdBCz+69XLrVTqRZaFigWH7dwvgjNjYtxFjl8Xu3IOxS4GS6IzAwZvTYavrYRm96x3oj4HU/xvKDiwRFDn6Y+zJqpEPh5JY32vc5fcWqFx2l8PdTMfw/NkONKltHw4Y1jUHeERJM1wGInNEkR3sQGreLLQEqcWjObrEFc0kyJNSzpOtmKt0dvn/H7Io93dCWWwKibkKDCpVRy5Ufgw9Dtfgxm5FI3nUpHRV9bd1tnTltVKLT4tMrW0FlloTa4NWic01+q/uRyzzkDmUg1NZjnDME4Cl6o3GcLpWVhycyUGFJSHUobUbq09PjNuMt2FHIgB1Y7+JuxqY7rhn3nzxRXk9T44Rj9zGsHmBYauyaM6q58SNuqRnEtBOx/pN95IvinaFiAL+0jd8RQzt3GXcjnA8D8w1h5e2nS5/WGe+8beU254yekU5aG+xVJ3vBBq8l4eb7DALk44615Ll7OncW06en84HYgujM+Wtusa/ZCZDg+Row8Mz+ZH8YH0w/fNdCNCzIYOmPMJpZTyVMHd9fYTaLRkP48k3MihCbnOIO3CaBSANjQPTomCdVfBEijZXVgVB87Vpb6Ot5zUDROS954W1YCZ1x4YmrfFpul2A/bLG1OtdzVDt3swiosoG8gWoF3u0fB7FOSRTzqOyi7cQOCoEg4EDnhrlnhbaTjggbOQ0nvIWIIcujueuXN4vApfDKJmu61gWIEFE0xq1W8i+4K2eBwainVk5gjQ+lvXp6TFbT9pkUfN9gbKUu8fSowPvYgsZ/A3+1nfzoiGLWBUTarpYiYFFw6/fxJO3F0IGLr7WSf9yNPPDJEGCtiteLQOkEC8xJsXN+hO10YY4uHKUZVo+y7peFG91krrvaTFYYFsBGQiQcViVSoSm+4/9gG7vVMijG7sC+CaI+tKLlsFXIHtHtNrRX4uGSHiYQkuDQMjVmIEwM2FvNqdtClv73i2GaP7ywD9WCulcngxxMcytMP1SJpS1f+87V2WT6e7HFh3KDdyt+NPi43IUL27Io/Z2pqAWQhVocyHtVUGPY/DaM1dQF6A3uTvEFWpWJtc06Q1xMBHQnp/8mtDJmjiQ5iyKrfGDmFIO1MA1lJJ5zZZkTXYStcLqq2xdhCjze75yxTD+LtQQFf3hH9s/kMrYxDGAvZhxOaHCiRSb3eluZGthHJcNyhpw6JFYAlLswM0oRn5dFejK5yk= X-Microsoft-Antispam-Message-Info: CbgY+MUx+URiigpGjJTJa9tGOYz0qoWDQERxiiHxMco8+9R5XDxST+x8ETzEH1OI1z71mmsxIxmMGF7sdEAT4ZRDCEj+fV5j963Vq6ajawcGSRC+CacjchJC4l5wS9HbfzbcMD4epyq9sMogfl2FPkIqYsW39TCHtQZnZs9RP6RzNr7HLCvd9x1ssbSfIdDB X-Microsoft-Exchange-Diagnostics: 1; HE1PR0402MB2780; 6:9Ypa0Hl6dSHRyZTO31CQ2ubw/3Htrh2ZhyKdI6xpgzb0v7zmHYSMUrmstWifOXucNEsRUkNCdYil2SzRhCjwRA78H9YhK1jI6x9XrXD6STm3X+DvHc3qLwIusH7oLvAkPygLH9DO0p5Blam27jLPN4rbOb1sv9ysqz4WdtNGEQSCQXAkTHB4N1h3dZ1ekj96JQUwzbdLVcBLAlINvUEyYDxX9A2jwmcTo4UPU4IuxetdhIBUwYT1gRW3oojD7AcltT2SZCdqGCDs24O+ZXxrWLPvTqYzkL8+lwodyY/BSUgsF4Q4Br7PJJ4Fy1xNd5Eahq+/slk7vjhpKx8uNQlresZaCJfPC1IuPpLZ1vqPj/w=; 5:RBZDGsa//b8VsWPSd/hOqcoaShrlG6sL3zrraD35KxB0lUZS276IqVhaavpPUMkK51ZYvv9tLT2YxlcFX5Sn4Gs0zQDw0OCTAPGsnofMzUKia0ES9j7WTtiRhBaBQWS5brYOiEAZM4yy8jFqvsuVZs8u1P6K8HD/OrgNBg3Oejk=; 24:YU+9DpunhYc3kj1YVibWLZgqegfb+gVeULAq8AySjFOJ6BLL83OJaex7a+SPH0YBAWiYSbFiFRkJ+AgjWdm7Mqo7FS4Zzs2s3Ae6ccRK4zw=; 7:CZUlGAH0jGpcBgD/aSpm6xSuYQJFThMeQOBDgAvv/ncHJRVyUp8te/qc6WAFbl2ULDHUf4Tg3yGheSsm+D8VGbZMO18Oh7Ga/jpXOWwdo6NkDMEiU7cY0dm5LoO6J/tcW7YN9TYZdmsY0wdZh93o+VXo02KiaBlMU0miDCDgW/4oeetDGqaY3hreq0i+8Ecuq/OrFuFXzbGVrVIMlSQ2Isioi766/MBgyBr7bDjkB2Wq1rW0suSC1EqsPEk1XXRU SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Mar 2018 09:57:46.5715 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5cce0f99-c40c-421a-a678-08d58f123400 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0402MB2780 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180321_025804_738565_217717F4 X-CRM114-Status: GOOD ( 13.52 ) X-Spam-Score: 1.4 (+) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (1.4 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [104.47.0.41 listed in list.dnswl.org] -1.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [104.47.0.41 listed in wl.mailspike.net] 2.5 DATE_IN_FUTURE_12_24 Date: is 12 to 24 hours after Received: date -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 RCVD_IN_MSPIKE_WL Mailspike good senders 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: boris.brezillon@free-electrons.com, stable@vger.kernel.org, leoyang.li@nxp.com, oss@buserror.net, Prabhakar Kushwaha , Jagdish Gediya , computersforpeace@gmail.com Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org 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. Fixes: bccb06c353af ("mtd: nand: ifc: update bufnum mask for ver >= 2.0.0") Cc: stable@vger.kernel.org # 3.18+ Signed-off-by: Prabhakar Kushwaha Signed-off-by: Jagdish Gediya --- Changes for v2: Incorporated comments from Miquel Raynal and Boris Brezillon - Updated patch subject - Remove usage of eccstat array - Added Cc: stable@vger.kernel.org Changes for v3: Incorporated comments from Boris Brezillon - Added fixes tag Changes for v4: Incorporated comments from Boris Brezillon Changes for v5: Incorporated comments from Boris Brezillon drivers/mtd/nand/fsl_ifc_nand.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c index 4872a7b..f0b4ecd 100644 --- a/drivers/mtd/nand/fsl_ifc_nand.c +++ b/drivers/mtd/nand/fsl_ifc_nand.c @@ -173,14 +173,9 @@ static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob) /* 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; } /* @@ -193,7 +188,7 @@ static void fsl_ifc_run_command(struct mtd_info *mtd) struct fsl_ifc_ctrl *ctrl = priv->ctrl; struct fsl_ifc_nand_ctrl *nctrl = ifc_nand_ctrl; struct fsl_ifc_runtime __iomem *ifc = ctrl->rregs; - u32 eccstat[4]; + u32 eccstat; int i; /* set the chip select for NAND Transaction */ @@ -228,8 +223,8 @@ static void fsl_ifc_run_command(struct mtd_info *mtd) if (nctrl->eccread) { int errors; int bufnum = nctrl->page & priv->bufnum_mask; - int sector = bufnum * chip->ecc.steps; - int sector_end = sector + chip->ecc.steps - 1; + int sector_start = bufnum * chip->ecc.steps; + int sector_end = sector_start + chip->ecc.steps - 1; __be32 *eccstat_regs; if (ctrl->version >= FSL_IFC_VERSION_2_0_0) @@ -237,10 +232,12 @@ static void fsl_ifc_run_command(struct mtd_info *mtd) else eccstat_regs = ifc->ifc_nand.v1_nand_eccstat; - for (i = sector / 4; i <= sector_end / 4; i++) - eccstat[i] = ifc_in32(&eccstat_regs[i]); + 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) {