From patchwork Mon Jun 12 15:01:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander A Sverdlin X-Patchwork-Id: 774680 X-Patchwork-Delegate: cyrille.pitchen@atmel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.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 3wmbjc6PHxz9s65 for ; Tue, 13 Jun 2017 01:02:44 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="g8BN5gZd"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nokia.onmicrosoft.com header.i=@nokia.onmicrosoft.com header.b="AmuZfppX"; dkim-atps=neutral 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=EqmorYBO+jZ/L+VjWQ84eVBsfYk5+2O2x2La10lp1/Q=; b=g8BN5gZdJx9ezp MC2DMVK8tu+xVNSccsS/BxdHeFU3a9g0fPkpwK6jY/tYAma3q0GBaj2qKV7bj/8QcT2lwlJ7BPCQ/ A8h5m8awXSpP6MLj5KZbztiGMYA+QIG3m2++uq9IuHF1juN9p0Sp00ztUcf3gb1sEQzws4BjS+cvf ROhu2cW4xxyTVSBTOax8a+z24Jk90o+fcm4qPUxshiQJHi6V2gU2ownnFFTmr1lwYVM527ePuEMY9 6wjOSoK+ys1WwW87SvzuCpQNc1713QW/w7BhF86ukJ0JqZ11UlZG656+aPyOIYpJHytKVe3J41Wzp k2X7SKyW8R2pELvoOdWw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dKQrV-0006va-6I; Mon, 12 Jun 2017 15:02:37 +0000 Received: from mail-ve1eur01on0102.outbound.protection.outlook.com ([104.47.1.102] helo=EUR01-VE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dKQrR-0006sz-Bs for linux-mtd@lists.infradead.org; Mon, 12 Jun 2017 15:02:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nokia.onmicrosoft.com; s=selector1-nokia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=FECR6XJLJIgkTfMA8oTdRjMr2sSxmjzaiGnuR79E+gM=; b=AmuZfppXRJUmGwOglwwxfReHHhNLwC3gx2FPxUeqru6vwwibEoJegKlGIA8UYH1CA6dLIF6YZ15f630wmRKTqxlwc9GsoMhm0i7QDh0hbmXbrpL85F0L53AL76SfXezisS9caKYCSSF7ZkvootUGNXxKNHrG4IothKy2liDeiUM= Authentication-Results: lists.infradead.org; dkim=none (message not signed) header.d=none; lists.infradead.org; dmarc=none action=none header.from=nokia.com; Received: from ulegcpsvdell.emea.nsn-net.net (131.228.2.20) by AM4PR07MB1313.eurprd07.prod.outlook.com (2a01:111:e400:59ec::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.5; Mon, 12 Jun 2017 15:01:56 +0000 From: Alexander Sverdlin To: linux-mtd@lists.infradead.org Subject: [PATCH] mtd: spi-nor: Recover from Spansion/Cypress errors Date: Mon, 12 Jun 2017 17:01:40 +0200 Message-Id: <20170612150140.11278-1-alexander.sverdlin@nokia.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 X-Originating-IP: [131.228.2.20] X-ClientProxiedBy: VI1P190CA0002.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::15) To AM4PR07MB1313.eurprd07.prod.outlook.com (2a01:111:e400:59ec::11) X-MS-Office365-Filtering-Correlation-Id: c2518b0c-9d48-413a-91b7-08d4b1a3f8bf X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423075)(201703031133081); SRVR:AM4PR07MB1313; X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1313; 3:ZsTqi8Py3dHEFU489bc4ng6RiDFbCnWWI+lkCkajM099R10h7s+b3IrwZSxQxUTJYNZ5lHtEOhgL0Z5/XnChmc4uLGrHGkCYiSe1rc5FUQ8C456BMH9DzmJi3RBExjcbtBEB9+hIkw0uEOXadX5Ligv1Kw0XnSQdaW/DyakxMkMxTbHbBj4kxjO3FoL5cZ5Z7MWqsct+MW2x+Tg3D2ErKndLRHxhluA1z4DfLsiRaI3hXgqa4KHz9bsfjcLpXE476OtekUc/NWE/1WzMaOk1cr4aNI9Wa771IRxuzXXImZShb9BKL+B5frOjEdUEXHYI29/OgrNlMjKO8M0DlazH0Mj0RGbFrw+U+/kmpt7dfm8=; 25:mZ4KfWERWhK9k4WvA+m/pw9x/T+rQjRB01fBVXeR6skt6gTNhbHmGeDSsadBvSkQS/Qldrj11qCaC5NfY7Vu8M5slccoOacOXY6AOr8fdMsrzoFs2Guuok46xLrXlr1NBcTFaTSQ9e+xxoUBq8/q9Qer7jMZi5uZi+Iljiiz5LSq3/6OOmJTqDwMHXUKGNd6gChpsNFteYyv/euUNCJY2uSQUen1y4fcif+PQELv/0gD/vulh8PTTLg8udf+hIwOHxZqrQCHtmj6qM52908t2X4lbRufB4nGwO7pmF8PidfyOuhzOPaJWirbQr01a/VnQr2ftvSzxAgMt/Vj7boK6bVCzzlXDGCbjMlzy/q+Qj1FclJx9InCci/kIp912LL7haZU0DP/UJYnE+TgXyWMw0udLnzkxApIgRkWpaFcsOLK+ND9gCAOggXZJGLn3KLIr7WfTFcDRYpBJvieWrBWfsIQyDgcKHvQ0M4RDX29XrI= X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM4PR07MB1313: X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1313; 31:kROEmLYo7bennaIi2TjyvG7NkRMBpLGjSZWXMEESO2488N9SNqp64vzlV+cbD9u6FjyuwG8rnyosqFuvLcW4qR1NjmgJYOUYmA6JITNpWvO61/R8cLVlnfXOQfL2hukBxOPont8ZUoC5HA4v6HV5bjeaiKTj2W5PlCRUiHua2XujYL3UpDZWa8/9VQ7Nd8RcMxZ9rNXZCHZIkdIMNftv2XejJwb04JdqmNWnqhzLlXI=; 20:/3MVgxA9D367oj27Iss3AkmjOG5c4D79LtepDwKYONU2CRJUTn/298CErfsE/i+didNdatUf6Lk1OKfhUFJ9ABE3uysZWfVBLNL+FtFWnJpb4bFNNQj0q04bpzTqZz6jvWmaKjum6p/Spk1Tdy1J2QV35isk7FFKxTILY1HH4cc8nLHquQGMHDChuMafRnVZ+sakAmmNCFgZ9fRFLlmdDeN69WrnC/NRoeacqVWmMlUItGFOOCcc2brP8jrv/rhySljaTrZN7ysLNLHGQ53HG1tpyBd9JRzf+QroIDF06x8g8qBdiYLMjoZBi3I4eXSki3OFn5DzpRatJML6b0K7QVUx2pGte8KOBlv8DhkKAPdD9jppdHHucublg8q87PtXSAqSQvrsBfuXZh9fXKFLl5711MCHPzskFzEEwSp4QQOByOYv/weYMNHMrIIJej/L8ttwOEmBNkdEYKhFAK6h/TiG47ZNrU5bEZV4CsNOyz6lpCqUjASPk+mYwfcWr80Yatzcj2WwWIk5VUdY6P7vHVVrsdnm2qzUn2/LYv2Di9AXn5LNR9YZrmoi/wUvYR0hEGKOMRDjO9lo+41kKA7BBYobhVvww9QNkHNNOja/lOo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(3002001)(6055026)(6041248)(20161123555025)(20161123558100)(20161123564025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM4PR07MB1313; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM4PR07MB1313; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM4PR07MB1313; 4:zuVY3ScbMfVk1ElItZRucHVwu5b4IdCU+qLP96+RWR?= =?us-ascii?Q?7FipjgpStx9FXcKKFcHPwnwxb6M8yXWiHwhjQDC94AgqbQivNT7WM945YtBW?= =?us-ascii?Q?s1v7pmUH9feqjYZQIGIe0MjM3O5uFQN0ehafLAwSSua22+seGRm0uxEGX6nn?= =?us-ascii?Q?7NsP8wTknieQ05Jvu/vs1GiPHFsC5h3bU23AR1H2ceJ5UsLsYF+bc62vIi7F?= =?us-ascii?Q?uzYYPCaldvIQa6IwK747qh8LeKPbTZYrikXqrPeC0q74FFrEpwUPp/rsAMNd?= =?us-ascii?Q?DqnH4xxf5TyUFw7LnoPVk077IaTD4TOQaJKkvwV7ZMdo86LXQ76xLXLynLyb?= =?us-ascii?Q?W7ZK7fftoOAgZmQnFUqOLX4/TtDsSubHq1CahT+l4agtrn607aKD+7IzAOna?= =?us-ascii?Q?OXF50VSPUWSbkDTJJWmMKei6zCQf1TduK43x5Pkz//UFWFP495G3jtHek1VC?= =?us-ascii?Q?EOwdx5aNt5DFqYqom2CHCaIg6w0F9Xa1RWdHcjF4dhckSjZg8WEFQTwk/iC4?= =?us-ascii?Q?MzHvTm8ZukcN2dFwB/W4x6xTWeBxZ8Igalpxvv5URLGw+E1RQQ3VwoaL1+Uc?= =?us-ascii?Q?Dl/mhdiIM/D81hyPyxn+Gxo7Y54nAYzslE6uA0sewGDAJ4ICU9hAnyhXGnGL?= =?us-ascii?Q?yUhmczDOIV0xajJ8EP8OHOAQ5kaxK82yz4/2Vh3mS0gpcEQWOmryzgtLlRGR?= =?us-ascii?Q?iCJWIqtzqw33MF+fpohLhU92fh16HihNAhMm30L5zTSJ6U2JAVQhRYn4G+0I?= =?us-ascii?Q?Cmbg5qeizxh2eg+q8fkUyGMvcPqDkSwX3dKiHemRWcnXZo8BudIjAbyRSlIR?= =?us-ascii?Q?ysCyTxztUaCmBPXr30YhTdpikCkH0SiitRCSTyXM99xpbxiK9Z18b6ZjkmqY?= =?us-ascii?Q?6UrSRhRnKF7Sr7x4JXOzWS1XyjuyOyvJMhYTMo0lCM1tU6Pi9Ibs6JKCMZW2?= =?us-ascii?Q?kBCD2i/Gb90RL0TxxYuFV6Jg1lwt+iXLMWnb25XPWaUaoGTISSuaXMsfIuH5?= =?us-ascii?Q?8qIVXqt5qNF/u64X/SzIRt/633KgDRReqq31ZRbhg6EbHqMMdYFsmQ3eMFOQ?= =?us-ascii?Q?sdoLFI2Xi2qVCGh8AG65EiDIuDQh8G9+oWO/dtO44GCcK/mCmrHK7IYHntmv?= =?us-ascii?Q?dc6xUUqIkiaMwW6v++ux0msFTYrMZJMo8XF5QBNk0PKbfDFdPw/WDgWeDx4d?= =?us-ascii?Q?K/jaQkwbRQTI8zER2U0gwHdH/XzJyUtrg3?= X-Forefront-PRVS: 03361FCC43 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39410400002)(39860400002)(39850400002)(39450400003)(39400400002)(39840400002)(42186005)(2361001)(33646002)(2351001)(4326008)(25786009)(86362001)(478600001)(2906002)(50986999)(36756003)(66066001)(47776003)(1076002)(3846002)(8676002)(6916009)(5003940100001)(50226002)(38730400002)(110136004)(6666003)(48376002)(6486002)(189998001)(54906002)(6512007)(53936002)(81166006)(6506006)(7736002)(305945005)(5660300001); DIR:OUT; SFP:1102; SCL:1; SRVR:AM4PR07MB1313; H:ulegcpsvdell.emea.nsn-net.net; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM4PR07MB1313; 23:LUNNFArnFeA1K/VHbXEWBoiCsEOllJJE5VSWjIsnW?= =?us-ascii?Q?THd6eWcvvQePbdIQBlL+IQk1xKDNfAKC7Gy3FwD3WqOofyZVx3kF54a/Xyym?= =?us-ascii?Q?BxT8WUNaEjkK7obJCexNlnmKl5JoCkQI396iwHQQdpHRFea2m3EGn14/iDOT?= =?us-ascii?Q?ozqv1T4t8dt2tTeBNRmogr9sCV451VeawVV9k3b0vidFwxPfeeH9B8hypv/7?= =?us-ascii?Q?TfALNU15sGn/46O1Wz7WAi0vjo9W6n9O5xTBWrh2Ci/APDJLcUN+cFdflkGO?= =?us-ascii?Q?2vP5c8UwTkvpTHQUnuSNSBRi2JUhv5IShW46QwPfeW5fxtqZzOIT8t7Hn3O3?= =?us-ascii?Q?hutifm8FgWi/p+3pXHrWu2r//SA6sgFWg5fF9sZXcyKQe8Hp7rrvdSYrFoSZ?= =?us-ascii?Q?phIujDD5iu01z+j3zfdvaLjMVvIdDlxWizFf1WBTp1otppPZBD9P+MFYu4uU?= =?us-ascii?Q?cKkLAUMo0gxCDTztsxPYikvcLFVRnVQosSczjM5kAOXao4qvsoIpNGCkZGkT?= =?us-ascii?Q?Sy/DTbVWKLPujPBwHkELlTndET1XlIo/RPHYK8qYjVN1knUjPiY9rjVU5M1b?= =?us-ascii?Q?JIv3VT6LeEIksi2zF5AOwQRGL3xXGyL1S12k4kyTBwqzMNNiaY+7ugiT1PrI?= =?us-ascii?Q?ce6bEG84GFd/URUmyjZavTd+fMBuiExc9GINIgJ5NA2gpCh/k/wT91wtOEbx?= =?us-ascii?Q?hSFl57Cw6pdCEyDM/Dq9ulLm+cfnHV9zPTKlMZJbt/LtAlAyZ1/Y4HjAD9K4?= =?us-ascii?Q?fdG53GdsoMGz+xvWdYV209b9bO3EBKsD5iyIYyvT8x1M+JLA2uYAbwGuCPuL?= =?us-ascii?Q?WP+z8mlS8Q1SdDmvdoGJejU1VkIAfZV1v39bjdgGzKIQMzsuJUDGiDSOA9vJ?= =?us-ascii?Q?VAQgIB+PskRp5rdnJqL4H9VL1yZN0nZMprxU4pi4Xfs00o3Y67aPWJEsaWMN?= =?us-ascii?Q?y9HwFBwRLxqFgGa5OgY0fbSTVF9WbyDzOQSFXr/nbSi3ccwzm/n6uqBecXg5?= =?us-ascii?Q?6HVgtt7U6OO5xjUc1Liqnwr+j/FZ0woHkcE+qXa0atkAoAr92bR9aGj0iP8y?= =?us-ascii?Q?4Ulbgc=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1313; 6:bBoKRwRebbE7y/TQi3fLWzqTwx/+y26DEEHf/WQCKtnDh3yQtRggxrm66ve0jwnpKDPgLmAdVZv0wiywpt2mzKi6Bi1AahmuihcB/ImgodHc2pofnQgPOIQm/ILcTFWPEikiqKYZ9WON13VNIcQsdMJKI8zMdv3OOf8NniizU2xfQT1LuWsYJkmwSfT/jZcK9QYxPQbHXRPDcjbkvF4yPZwIrwfCbG+i9tfQX8tZQzOuNdtBVUMw4zKziDFQGoeS25CTTTpH7uSvTqiWypWes9Bwry5Pvw+ij7t+hDe1+Fg8NUQTdnS7x7WJTHoNRC4R9BnlUeoDId+S0vAgWzgum+9+W0D9/fWRJpnNZuhNZHUirat+joI2ljrkj2kL5RMyPmvyifM4FGF7wiEytB+A4kxlWLC6O1Xg9Kel7gUewvIl/6i9k8E35t8bNQlZOUwbHSH4Qe0NgzAFcFZxTZvXRoBzqy4SXmJWinRaMk9W9e5E7Kd9STEstnHKaw9CQ0Lc0L3463424eqmFLiCzK2FQHVBQFJT62WFaDpvQOgafXo= X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1313; 5:LXjx3Hc1OCmEQ7llrnodZ7cFK6nI8ZAIvNFn/dpCs5zwbtixgroYX38HyeZNIdzYEgvSUxmxDCqmq8WMjNwRRdkUaziEZTwPe6ihLGhLeXXtVyigQi9NZIRCmvNpSnA3K02P2qAWBImPAkqRu8tJVo9QSxhVg/JrgJpeckyyD0/F3IRGyzMtJf49+z2JHTLEFZrTm4aVMTVRKpNDNHabj9Pn+SDJF1U8zDSkFidW963UyaIniyDLxS44VpE0lPtugGzTXbA+QOMdieXwO7dbOW9TWvrvKL9WqI9hmyJX2Hx+nvA8ce0HssSW+Aw9ka3+kb/aPahn+W0g/KjrheZGezf0jYlxhfhUkbkrkpH29MJK5SiU3tUHhtv4NrKoK8oUj1uZQ/dHTiw9AWJL3T4XMiLAd6Fq3edaJNalkIc8PTaIkUmQ1GESGfDuMkg81y+ms8CbnI2raTloUzo3mJQcn5EpA5WOzmAgQrTDzT4dJDBBmycuvIc1BwwjvB8+YCVH; 24:dCL+9BCSOiNzpf11PK7e7+3/hy8xMTpm0xxYax7Vgt2Tk7ISx0fwtXvsCFS83wQd86WFrh1Rqrv5vWNvWpKMmdQlmxpTh3NqHGhvbgfLh70= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM4PR07MB1313; 7:mi24jDCDYSsFLEaslqrnDtJNuTH0wqeqn7xwnQoWfaNGf+OrtTxlHAowAUVkltF59BHyRw7hyDHJ46LhH3ecpHmfOjhjPLot3zFlI5NfQezOl05lmHhyCo6bjv/wpElp+wWVY97PsKq1n6aDJ3SJr+cd1pJ+IbsyvHTeKWhQ9Uii3xYKFzCztT4Xq1Ftu4vG21zOj+oharLy2Q37P4LBAAUJq1kWs4aCrqIb24x+Lbv+DbG0egHG916/8LOeuX/BlC33EOXFmpVii/5LR1Y5SOZoBZkM/TIHf7nZAcz8Qt9lkNKRiTz9P894Z1LtJkfl7I5UK1HMBla80nuJi0wO4Q== X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2017 15:01:56.7328 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR07MB1313 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170612_080233_866194_57CE8D48 X-CRM114-Status: GOOD ( 11.53 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [104.47.1.102 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [104.47.1.102 listed in wl.mailspike.net] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -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.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 , Richard Weinberger , Marek Vasut , Alexander Sverdlin , Cyrille Pitchen , Brian Norris , David Woodhouse Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org S25FL{128|256|512}S datasheets say: "When P_ERR or E_ERR bits are set to one, the WIP bit will remain set to one indicating the device remains busy and unable to receive new operation commands. A Clear Status Register (CLSR) command must be received to return the device to standby mode." Current spi-nor code works until first error occurs, but write/erase errors are not just rare hardware failures, they also occur if user tries to flash write-protected areas. After such attempt no SPI command can be executed any more and even read fails. This patch adds support for P_ERR and E_ERR bits in Status Register 1 (so that operation fails immediately and not after a long timeout) and proper recovery from the error condition. Tested on Spansion S25FS128S, which is supported by S25FL129P entry. Signed-off-by: Alexander Sverdlin --- drivers/mtd/spi-nor/spi-nor.c | 29 +++++++++++++++++++++-------- include/linux/mtd/spi-nor.h | 5 +++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index dea8c9c..efb3519 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -86,6 +86,7 @@ struct flash_info { * to support memory size above 128Mib. */ #define NO_CHIP_ERASE BIT(12) /* Chip does not support chip erase */ +#define USE_CLSR BIT(13) /* use CLSR command */ }; #define JEDEC_MFR(info) ((info)->id[0]) @@ -320,8 +321,18 @@ static inline int spi_nor_sr_ready(struct spi_nor *nor) int sr = read_sr(nor); if (sr < 0) return sr; - else - return !(sr & SR_WIP); + + if (nor->flags & SNOR_F_USE_CLSR && sr & (SR_E_ERR | SR_P_ERR)) { + if (sr & SR_E_ERR) + dev_err(nor->dev, "Erase Error occurred\n"); + else + dev_err(nor->dev, "Programming Error occurred\n"); + + nor->write_reg(nor, SPINOR_OP_CLSR, NULL, 0); + return -EIO; + } + + return !(sr & SR_WIP); } static inline int spi_nor_fsr_ready(struct spi_nor *nor) @@ -1053,15 +1064,15 @@ static const struct flash_info spi_nor_ids[] = { */ { "s25sl032p", INFO(0x010215, 0x4d00, 64 * 1024, 64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, { "s25sl064p", INFO(0x010216, 0x4d00, 64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, - { "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) }, - { "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, - { "s25fl512s", INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, USE_CLSR) }, + { "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, + { "s25fl512s", INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, { "s70fl01gs", INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) }, { "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024, 64, 0) }, { "s25sl12801", INFO(0x012018, 0x0301, 64 * 1024, 256, 0) }, - { "s25fl128s", INFO6(0x012018, 0x4d0180, 64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, - { "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024, 64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, - { "s25fl129p1", INFO(0x012018, 0x4d01, 64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { "s25fl128s", INFO6(0x012018, 0x4d0180, 64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, + { "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024, 64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, + { "s25fl129p1", INFO(0x012018, 0x4d01, 64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, { "s25sl004a", INFO(0x010212, 0, 64 * 1024, 8, 0) }, { "s25sl008a", INFO(0x010213, 0, 64 * 1024, 16, 0) }, { "s25sl016a", INFO(0x010214, 0, 64 * 1024, 32, 0) }, @@ -1641,6 +1652,8 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode) nor->flags |= SNOR_F_HAS_SR_TB; if (info->flags & NO_CHIP_ERASE) nor->flags |= SNOR_F_NO_OP_CHIP_ERASE; + if (info->flags & USE_CLSR) + nor->flags |= SNOR_F_USE_CLSR; #ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS /* prefer "small sector" erase if possible */ diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index f2a7180..0dc6c34 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -93,6 +93,7 @@ /* Used for Spansion flashes only. */ #define SPINOR_OP_BRWR 0x17 /* Bank register write */ +#define SPINOR_OP_CLSR 0x30 /* Clear status register 1 */ /* Used for Micron flashes only. */ #define SPINOR_OP_RD_EVCR 0x65 /* Read EVCR register */ @@ -107,6 +108,9 @@ #define SR_BP2 BIT(4) /* Block protect 2 */ #define SR_TB BIT(5) /* Top/Bottom protect */ #define SR_SRWD BIT(7) /* SR write protect */ +/* Spansion/Cypress specific status bits */ +#define SR_E_ERR BIT(5) +#define SR_P_ERR BIT(6) #define SR_QUAD_EN_MX BIT(6) /* Macronix Quad I/O */ @@ -141,6 +145,7 @@ enum spi_nor_option_flags { SNOR_F_NO_OP_CHIP_ERASE = BIT(2), SNOR_F_S3AN_ADDR_DEFAULT = BIT(3), SNOR_F_READY_XSR_RDY = BIT(4), + SNOR_F_USE_CLSR = BIT(5), }; /**