From patchwork Sat Nov 26 18:06:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 84273 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp541717qgi; Sat, 26 Nov 2016 10:09:01 -0800 (PST) X-Received: by 10.84.143.68 with SMTP id 62mr16306055ply.63.1480183741011; Sat, 26 Nov 2016 10:09:01 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 3si20817079plh.307.2016.11.26.10.09.00; Sat, 26 Nov 2016 10:09:01 -0800 (PST) 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=@nifty.com; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753352AbcKZSIx (ORCPT + 25 others); Sat, 26 Nov 2016 13:08:53 -0500 Received: from conuserg-11.nifty.com ([210.131.2.78]:48030 "EHLO conuserg-11.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753156AbcKZSIQ (ORCPT ); Sat, 26 Nov 2016 13:08:16 -0500 Received: from grover.sesame (FL1-111-169-71-157.osk.mesh.ad.jp [111.169.71.157]) (authenticated) by conuserg-11.nifty.com with ESMTP id uAQI6Uep018512; Sun, 27 Nov 2016 03:06:48 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-11.nifty.com uAQI6Uep018512 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1480183608; bh=a8Qatavtd36G26FNEtme+0OUA+fQLewD3ZJKYGVLSxw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NCPG2jj6tl62OWLMeB2gUZxosq0lEz+InWIFoI4p77tUbQddWDap3oATx3ID5IlZN oD51PUwDYWFAmJvHfB+xbehYZkzr885awlDdxhusmMjfqGI5unpCzSEjBnbqdp4H+4 8Ot8XVxpWAlY/yaB9gJvIwsrcXNn/pkFBWhl+K/T9CoVVfrUqa4i+t2W4T/43CEKWW 5dgaaiEVxRyCAuT1sDsD7pAXqJhxjLkFulUZUUtOgAOcFImVLie8kCBn4a6dD08ss9 SSdokYPNDBJfVsGkD4PKzcKfuJR+dE7ZIkGY/lmCwdSSrhwkbkMDhplAFpQhWA9kBW e+y3F0qf3HfUA== X-Nifty-SrcIP: [111.169.71.157] From: Masahiro Yamada To: linux-mtd@lists.infradead.org Cc: Masahiro Yamada , linux-kernel@vger.kernel.org, Boris Brezillon , Marek Vasut , Brian Norris , Richard Weinberger , David Woodhouse , Cyrille Pitchen Subject: [PATCH 19/39] mtd: nand: denali: perform erased check against raw transferred page Date: Sun, 27 Nov 2016 03:06:05 +0900 Message-Id: <1480183585-592-20-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1480183585-592-1-git-send-email-yamada.masahiro@socionext.com> References: <1480183585-592-1-git-send-email-yamada.masahiro@socionext.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The erased page check must be done against the raw transferred data. The current first call of is_erase() is against the data after ECC correction. I saw cases where not all of the data in the page are 0xFF after they are manipulated by the ECC correction engine. Signed-off-by: Masahiro Yamada --- drivers/mtd/nand/denali.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c index f035dac..ae44c01 100644 --- a/drivers/mtd/nand/denali.c +++ b/drivers/mtd/nand/denali.c @@ -1168,6 +1168,7 @@ static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip, INTR_STATUS__DMA_CMD_COMP | INTR_STATUS__ECC_UNCOR_ERR : INTR_STATUS__ECC_TRANSACTION_DONE | INTR_STATUS__ECC_ERR; bool check_erased_page = false; + int ret; if (page != denali->page) { dev_err(denali->dev, @@ -1206,7 +1207,9 @@ static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip, * error. */ - read_oob_data(mtd, chip->oob_poi, denali->page); + ret = denali_read_page_raw(mtd, chip, buf, 1, denali->page); + if (ret < 0) + return ret; /* check ECC failures that may have occurred on erased pages */ if (!is_erased(buf, mtd->writesize) ||