From patchwork Wed Apr 4 12:42:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abhishek Sahu X-Patchwork-Id: 10322551 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3379260318 for ; Wed, 4 Apr 2018 12:44:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2384528D54 for ; Wed, 4 Apr 2018 12:44:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1475E28E76; Wed, 4 Apr 2018 12:44:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9D4BA28D54 for ; Wed, 4 Apr 2018 12:44:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751406AbeDDMnD (ORCPT ); Wed, 4 Apr 2018 08:43:03 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:40728 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751038AbeDDMnA (ORCPT ); Wed, 4 Apr 2018 08:43:00 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id E2C7B60F61; Wed, 4 Apr 2018 12:42:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1522845779; bh=ACgRFF6QWKAoA1zRrrJQDD9PGF9Hn3Apee+BE0bwC/g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ek/qcME5o/+X7pjYfpLVVGoxIBleSx7RgbsbX++d9DSiAfsgUEzHch0Ie3lr4SQx+ Ak2Xgpm9uF8QLcqMp/AVBg8d9ehNS44HWzKxDxRq5wZuDR960TM4x20BpY2yirYkdr kdo99eJkqhZTK6FyHXVDTbdh54i1WIdlC4hM5Qn4= Received: from absahu-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: absahu@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 6C89160C66; Wed, 4 Apr 2018 12:42:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1522845778; bh=ACgRFF6QWKAoA1zRrrJQDD9PGF9Hn3Apee+BE0bwC/g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MlvIrGN7DdoEOx2DhI++o0c9Ebk0nhCuPrpKo4+3qX8yP1HSmVuXafVEQ4+wCuDCy uhwo+a4mbaL6jaQc6IW116ziCe1wC2IPaLrW1uQBxTZpqnTGc6R6xh4qEBnoP4Qx9p PfcH00PpHG8z5ECCfgBsyiyTNNZC7r2uriguhs6c= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 6C89160C66 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=absahu@codeaurora.org From: Abhishek Sahu To: Boris Brezillon Cc: David Woodhouse , Brian Norris , Marek Vasut , Richard Weinberger , Cyrille Pitchen , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Andy Gross , Archit Taneja , Abhishek Sahu Subject: [PATCH 3/9] mtd: nand: qcom: erased page detection for uncorrectable errors only Date: Wed, 4 Apr 2018 18:12:19 +0530 Message-Id: <1522845745-6624-4-git-send-email-absahu@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1522845745-6624-1-git-send-email-absahu@codeaurora.org> References: <1522845745-6624-1-git-send-email-absahu@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The NAND flash controller generates ECC uncorrectable error first in case of completely erased page. Currently driver applies the erased page detection logic for other operation errors also so fix this and return EIO for other operational errors. Signed-off-by: Abhishek Sahu --- drivers/mtd/nand/qcom_nandc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/qcom_nandc.c b/drivers/mtd/nand/qcom_nandc.c index 17321fc..57c16a6 100644 --- a/drivers/mtd/nand/qcom_nandc.c +++ b/drivers/mtd/nand/qcom_nandc.c @@ -1578,6 +1578,7 @@ static int parse_read_errors(struct qcom_nand_host *host, u8 *data_buf, struct nand_ecc_ctrl *ecc = &chip->ecc; unsigned int max_bitflips = 0; struct read_stats *buf; + bool flash_op_err = false; int i; buf = (struct read_stats *)nandc->reg_read_buf; @@ -1599,7 +1600,7 @@ static int parse_read_errors(struct qcom_nand_host *host, u8 *data_buf, buffer = le32_to_cpu(buf->buffer); erased_cw = le32_to_cpu(buf->erased_cw); - if (flash & (FS_OP_ERR | FS_MPU_ERR)) { + if ((flash & FS_OP_ERR) && (buffer & BS_UNCORRECTABLE_BIT)) { bool erased; /* ignore erased codeword errors */ @@ -1641,6 +1642,8 @@ static int parse_read_errors(struct qcom_nand_host *host, u8 *data_buf, max_t(unsigned int, max_bitflips, ret); } } + } else if (flash & (FS_OP_ERR | FS_MPU_ERR)) { + flash_op_err = true; } else { unsigned int stat; @@ -1654,6 +1657,9 @@ static int parse_read_errors(struct qcom_nand_host *host, u8 *data_buf, oob_buf += oob_len + ecc->bytes; } + if (flash_op_err) + return -EIO; + return max_bitflips; }