Received: by 10.223.164.202 with SMTP id h10csp1689032wrb; Sat, 11 Nov 2017 12:51:18 -0800 (PST) X-Google-Smtp-Source: AGs4zMYGIIylWsGPHRGgE4bzw12kLVIklSI3uvQkDhEsuvxCn2/TWqeFgBOTSeEHj+z1jXyxVPNh X-Received: by 10.98.234.9 with SMTP id t9mr4810923pfh.92.1510433478726; Sat, 11 Nov 2017 12:51:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510433478; cv=none; d=google.com; s=arc-20160816; b=Ku7NawNpl/MqYXf7m36yfPHiBOzvNtSc3HO2KJmS+Uacjrv2pFfZpCsnTC0fPXGwSz zU+oXiSv/mfqy4OklPaI1rn3nPw5CGQq2LlDe46BkpETMN3y8ZcRVdg1SuNdLG6RWkhj 3Fw32tAjvgEaAzKT/ccJPVv4xrdQkEfSuLnuxjlAoOqF2YbdKpdcIGEzBjCpVntQaO6f McbnbrgLqWHilTRDPEoGzmQoduXBxpAREvQCi2SxIc09dM5h/OD0w7cfCeBETsTQ9Zfn zq1dyGSae6yFGBzWfWuRVwK9NInstqObkVQB9HqbyUbhgx4m359tiRYSUIgGjvh2X3lS +/jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:message-id:date:thread-index :thread-topic:subject:cc:to:from:arc-authentication-results; bh=l4GNZh2zSv4UvtnFVOeH/EEvkC9v8vE2GWlifUKNnmQ=; b=tA6niOjx0bPKQAiX/QtEyJEGrYFw6qaV4ztVvggGnc2lcTwX+Je97xI1z+DppDzMf+ k1iIxpoNKoVy9cBhmPURbIEo6RGN+9kPWvK5u/cN7c+iE5mX9/NRt7CHeX/rfvM+6eYd 4Z8bn01QBL5T/XajnFRqhTDea+325PfOMNvIqEQG6By4UQSXtmyYI4fC7ZpDvUOdRBXI 3HqbtDn1UK48KcOEwjtC8sbVjOVBVH4WKyQdsJ0XBf3zqiAayzup4r8UbCtQVxbqEKYR Q3jdBVDzbyNqWjAMWafegXtV3FoDQrZavchCA/uVC4OhQUg2GzAuYVy6yYRCP+yzkQsm dZ2A== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k3si11169218pld.688.2017.11.11.12.51.07; Sat, 11 Nov 2017 12:51:18 -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; 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 S1752157AbdKKUu3 convert rfc822-to-8bit (ORCPT + 84 others); Sat, 11 Nov 2017 15:50:29 -0500 Received: from mailout.micron.com ([137.201.242.129]:50310 "EHLO mailout.micron.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752047AbdKKUu1 (ORCPT ); Sat, 11 Nov 2017 15:50:27 -0500 Received: from mail.micron.com (bowex36h.micron.com [137.201.84.179]) by mailout.micron.com (8.14.4/8.14.6) with ESMTP id vABKnT2J030624; Sat, 11 Nov 2017 13:49:29 -0700 Received: from SIWEX4H.sing.micron.com (10.160.29.19) by BOWEX36H.micron.com (137.201.84.179) with Microsoft SMTP Server (TLS) id 15.0.1293.2; Sat, 11 Nov 2017 13:49:29 -0700 Received: from SIWEX5A.sing.micron.com (10.160.29.59) by SIWEX4H.sing.micron.com (10.160.29.19) with Microsoft SMTP Server (TLS) id 15.0.1293.2; Sun, 12 Nov 2017 04:49:26 +0800 Received: from SIWEX5A.sing.micron.com ([fe80::390a:b1cc:42e9:d13e]) by SIWEX5A.sing.micron.com ([fe80::390a:b1cc:42e9:d13e%25]) with mapi id 15.00.1293.002; Sun, 12 Nov 2017 04:49:26 +0800 From: "Bean Huo (beanhuo)" To: "cyrille.pitchen@wedev4u.fr" , "marek.vasut@gmail.com" CC: "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH V1] drivers:mtd:spi-nor:checkup FSR error bits Thread-Topic: [PATCH V1] drivers:mtd:spi-nor:checkup FSR error bits Thread-Index: AdNbLnANiN9w/sqbSQ2ul0T8cA7X8w== Date: Sat, 11 Nov 2017 20:49:26 +0000 Message-ID: <825c7a1bb1034369b9d592a7b358030c@SIWEX5A.sing.micron.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [137.201.84.23] X-TM-AS-Product-Ver: SMEX-12.0.0.1464-8.100.1062-23458.004 X-TM-AS-Result: No--6.938900-0.000000-31 X-TM-AS-MatchedID: 703788-702942-703543-701177-708712-705861-706719-704318-7 02039-707027-704980-700648-862883-188019-706290-706592-711109-700398-863596 -700324-707788-703454-863828-704713-708804-710375-148004-148050-148980-4200 0-42003-29961-63 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No x-mt-checkinternalsenderrule: True Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 137.201.130.65 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For the Micron SPI NOR, when the erase/program operation fails, especially, for the failure results from intending to modify protected space, spi-nor upper layers still get the return which shows the operation succeeds. this because spi_nor_fsr_ready() only uses bit.7 to device whether ready. For the most cases, even the error of erase/program occurs, SPI NOR device is still ready. The device ready and the error are two different cases. This patch is to fixup this issue and adding FSR (flag status register) error bits checkup. The FSR(flag status register) is a powerful tool to investigate the staus of device,checking information regarding what is actually doing the memory and detecting possible error conditions. Signed-off-by: beanhuo --- drivers/mtd/spi-nor/spi-nor.c | 19 +++++++++++++++++-- include/linux/mtd/spi-nor.h | 6 +++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index bc266f7..200e814 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -330,8 +330,23 @@ static inline int spi_nor_fsr_ready(struct spi_nor *nor) int fsr = read_fsr(nor); if (fsr < 0) return fsr; - else - return fsr & FSR_READY; + + if (fsr & (FSR_E_ERR | FSR_P_ERR)) { + if (fsr & FSR_E_ERR) + dev_err(nor->dev, "Erase operation failed.\n"); + else + dev_err(nor->dev, "Program operation failed.\n"); + + if (fsr & FSR_PT_ERR) + dev_err(nor->dev, + "The operation has attempted to modify the protected" + "sector or the locked OPT space.\n"); + + nor->write_reg(nor, SPINOR_OP_CLFSR, NULL, 0); + return -EIO; + } + + return fsr & FSR_READY; } static int spi_nor_ready(struct spi_nor *nor) diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index d0c66a0..46b5608 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -61,6 +61,7 @@ #define SPINOR_OP_RDSFDP 0x5a /* Read SFDP */ #define SPINOR_OP_RDCR 0x35 /* Read configuration register */ #define SPINOR_OP_RDFSR 0x70 /* Read flag status register */ +#define SPINOR_OP_CLFSR 0x50 /* Clear flag status register */ /* 4-byte address opcodes - used on Spansion and some Macronix flashes. */ #define SPINOR_OP_READ_4B 0x13 /* Read data bytes (low frequency) */ @@ -130,7 +131,10 @@ #define EVCR_QUAD_EN_MICRON BIT(7) /* Micron Quad I/O */ /* Flag Status Register bits */ -#define FSR_READY BIT(7) +#define FSR_READY BIT(7) /* Device status, 0 = Busy,1 = Ready */ +#define FSR_E_ERR BIT(5) /* Erase operation status */ +#define FSR_P_ERR BIT(4) /* Program operation status */ +#define FSR_PT_ERR BIT(1) /* Protection error bit */ /* Configuration Register bits. */ #define CR_QUAD_EN_SPAN BIT(1) /* Spansion Quad I/O */ -- 2.7.4 From 1584125086673434730@xxx Wed Nov 15 09:50:09 +0000 2017 X-GM-THRID: 1583968678491780879 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread