From patchwork Sat Jul 13 14:59:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jungseung Lee X-Patchwork-Id: 1140391 X-Patchwork-Delegate: tudor.ambarus@gmail.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=samsung.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="VCuzX7Yo"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="ozy4BI17"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45zmfL6s6lz9sBF for ; Thu, 1 Aug 2019 20:26:02 +1000 (AEST) 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:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:Message-Id:Date: Subject:To:From:Reply-To:Cc:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: List-Owner; bh=QKFDlZB5ogTBe2Kj6XV7a7XU+qc5A2nRIIysZy9jWyg=; b=VCuzX7Yo1N0Vvt q2IlVNOldvIaqnHOgSAycp20gNTw68YdNS07VAdv4rPe92n2vCYPhlNM6hjb+WCh2U9NtklngkzXQ 6Zsu5XU+7tesOMY76Mnbeto7QJ6LqbTLF+6aJ3bfkl0kZb3FisH1b0TTWWvMYPflgJvTEQP25+3HR OzR8OAr6NNKX059mDW675KaMiWwJ6RkTJo1TT7E5Y7rlfqST36O/rWIk2qMlJhSLJG+Gqfg4Bb3eL Pod1yf7+yH5/DnzKhkG1Ct4y+7yHp1IhmU2+XqzJ/wjKBJdQWIaM1FIAfFRtCALIgC/IcGaWPrKit 1impcgDqFjcEt0/8zHGA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1ht8HZ-0001ca-0O; Thu, 01 Aug 2019 10:26:01 +0000 Received: from mailout3.samsung.com ([203.254.224.33]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1ht8HP-0001Sn-Sx for linux-mtd@lists.infradead.org; Thu, 01 Aug 2019 10:25:53 +0000 Received: from epcas1p2.samsung.com (unknown [182.195.41.46]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20190801102547epoutp03309e589f96748b90b9599f1a5888c07e~2xZEd5fpD1104611046epoutp03F for ; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20190801102547epoutp03309e589f96748b90b9599f1a5888c07e~2xZEd5fpD1104611046epoutp03F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1564655147; bh=nWm4g8f5rzF6BS1rIC/0wjXRERJwRwtqRkRbpQmoRn4=; h=From:To:Subject:Date:References:From; b=ozy4BI172Pnlc7dSsDNhrUzPm8M1cGBn0Pd0aBWVJ5bryS6GZ1BL20towhiCodp3r ilrB8IiAIfXybuPsJaW0R/We33mS2O6oFqL+fPN314woB8ck3il9wGdD6F9/U0Dy9q fxnbx8O2hEdxCgFDoG3XS1RClQn7a7W168k0eS70= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas1p4.samsung.com (KnoxPortal) with ESMTP id 20190801102547epcas1p4c46badf52918e7ea205bd0a6b984f093~2xZD6hFx_2675026750epcas1p4_; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) Received: from epsmges1p5.samsung.com (unknown [182.195.40.162]) by epsnrtp3.localdomain (Postfix) with ESMTP id 45zmf20j57zMqYkV; Thu, 1 Aug 2019 10:25:46 +0000 (GMT) Received: from epcas1p3.samsung.com ( [182.195.41.47]) by epsmges1p5.samsung.com (Symantec Messaging Gateway) with SMTP id E3.66.04085.A2EB24D5; Thu, 1 Aug 2019 19:25:46 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas1p4.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epcas1p4e40553b44ec941ffa82c0f9bc6943c2c~2xZChtsAf0933609336epcas1p4k; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20190801102545epsmtrp191b0b063502f3e374c78ed2293aa7dc5~2xZCeP0Y72006620066epsmtrp1z; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) X-AuditID: b6c32a39-d03ff70000000ff5-8a-5d42be2a3b15 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id B4.0B.03706.92EB24D5; Thu, 1 Aug 2019 19:25:45 +0900 (KST) Received: from localhost.localdomain (unknown [10.88.100.192]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epsmtip17bc76c97ef1b587d87be47e174097d1b~2xZCU4csu2161821618epsmtip1p; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) From: Jungseung Lee To: Marek Vasut , Tudor Ambarus , David Woodhouse , Brian Norris , Boris Brezillon , Richard Weinberger , u.kleine-koenig@pengutronix.de, linux-mtd@lists.infradead.org, js07.lee@gmail.com, js07.lee@samsung.com Subject: [PATCH v4 1/5] mtd: spi-nor: rename SR_TB to indicate the bit used Date: Sat, 13 Jul 2019 23:59:34 +0900 Message-Id: <20190713145938.19203-1-js07.lee@samsung.com> X-Mailer: git-send-email 2.17.1 X-Brightmail-Tracker: H4sIAAAAAAAAA02SbUhTURjHO7u7282aXW5WJyu0C0IOzV3n7CpZVhYXlFj6oSiWXfSySXtr d4r2joikNXX4obQsy2ltItVmsZlaWakUhVGSYabUl8o5yl4whtTmVerb7zz//3P+h+c8GEL4 0WisyGjlLEZWT0oixHcfxSclynu3axQPvQjdXnEe0I+HOhDa7qxH6NlLARH94W0Qpe+Vt0np J93vEbre5wf0N0cmPWqvB5kRjK9xTMp4bsgZt6tKwngcp5h3M62AeXv5CFM7q2BqOl1Aje3X b9ZxbCFnieWMBabCIqM2g8zOy9+Rr0pVUIlUGr2JjDWyBi6DzMpRJ+4q0oceSMaWsPriUEnN 8jyZtGWzxVRs5WJ1Jt6aQXLmQr2ZUpg38qyBLzZqNxaYDOmUQpGsCjkP6XXlP/+IzLNEaU/f HfQ0qFxWDRZjEE+BdYHn4jATuBdAnz++GkSEeBrAiVtvpILwC8DeX+qFhnePnYhg6gGwpWFQ LBy+A/hjMjDXIcHlcCToRsNCFP5JBKd6L6JhYTmeDUdmhkVhFuNxsLLcOZctw9Ogu2oSESJi YPutB3MREHdIoP+KRyQIWfCG1zvPy+GXgU6pwNHwc23lPPPQ57RLheYKAD9cd8wLShiY6gjd imEIHg9vdiUJ5fXQF2wCYUbwSBj4eQ4NWyAug2cqCcFCQv9EhVhgCIc+2lCBGWgfODs/Ow3s ftmE1oG1jf8CmgFwgZWcmTdoOZ4yq/7/GTeY2zR5mhf0v8jpAzgGyKWywaptGgJlS/gyQx+A GEJGyVpWbdUQskK27ChnMeVbivUc3wdUoenZkegVBabQ3hqt+ZQqWalU0impm1JVSnKV7OoM rSFwLWvlDnOcmbMs9ImwxdGnwcH+PdSZzrxjw+1lB07lPN2yYV/ksxOjrf6Yhmlb/4XXU1mf nyUQznsfq09K7iszK7650n+PL7HtXLQ1RVdmKk8zxL3a3errWt02fgczxKhcG554uJrrXWMd ubejWtJzJ5yjk3u/KmRrUpUN59b4Eq7Zho6XqmzBdU5Pbo+m+egXCSnmdSwlRyw8+xcYNzr0 fwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFLMWRmVeSWpSXmKPExsWy7bCSnK7mPqdYgw/tUharW6YzWhy5sJbZ YuLKycwWf+e8Y7J4dPM3q8XupmXsFkf33GO2mLzzDaPFxyUOFrcnTmZ04PLYOesuu8fmFVoe m1Z1snlsXlLvcefHUkaPm/MKPfr/Gnj0bVnFGMARxWWTkpqTWZZapG+XwJXR9PU/U8FfoYq9 h7ayNjC28XcxcnJICJhI3DmykrmLkYtDSGA3o0Tvj18sEAkJiUc7vwDZHEC2sMThw8UQNR8Z Jd5Pn8QIUsMmoCVx4/cmVpCEiMAHJonLk06BNQsLeEvc+HGVCcRmEVCVaGtaCRbnFbCU2NT5 mhligbzE6g0HmCcwci9gZFjFKJlaUJybnltsWGCYl1quV5yYW1yal66XnJ+7iREcYlqaOxgv L4k/xCjAwajEw6vQ4xgrxJpYVlyZe4hRgoNZSYR3sbh9rBBvSmJlVWpRfnxRaU5q8SFGaQ4W JXHep3nHIoUE0hNLUrNTUwtSi2CyTBycUg2MnrsDWX4sPcn0Y2l2pJH+R727/+Y9rN+8Mdeh 4OCDqucNx1g0jhivlt345R6PQ7xS299Iq5J/Sqec9j5W3nkxokX1RdORF1NduhL28a+KCLx9 QO318qxi9s0qZz5OOM4d1qviuObiElWPvnV7X+28emXj6WN/dp1qMZzw5/s9YblbZsnHrVjz riqxFGckGmoxFxUnAgAJqXcFLQIAAA== X-CMS-MailID: 20190801102545epcas1p4e40553b44ec941ffa82c0f9bc6943c2c X-Msg-Generator: CA X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20190801102545epcas1p4e40553b44ec941ffa82c0f9bc6943c2c References: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190801_032552_280998_E555A756 X-CRM114-Status: GOOD ( 18.26 ) X-Spam-Score: -3.1 (---) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-3.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [203.254.224.33 listed in list.dnswl.org] 2.1 DATE_IN_PAST_96_XX Date: is 96 hours or more before Received: date -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -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_EF Message has a valid DKIM or DK signature from envelope-from domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Each vendor uses a different bits for SR_TB of flash. To avoid ambiguity, rename SR_TB to indicate the bit used. Signed-off-by: Jungseung Lee --- drivers/mtd/spi-nor/spi-nor.c | 10 +++++----- include/linux/mtd/spi-nor.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index c4f58944b482..612a6f0a87c3 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -1099,7 +1099,7 @@ static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs, } else { pow = ((sr & mask) ^ mask) >> shift; *len = mtd->size >> pow; - if (nor->flags & SNOR_F_HAS_SR_TB && sr & SR_TB) + if (nor->flags & SNOR_F_HAS_SR_TB && sr & SR_TB_BIT5) *ofs = 0; else *ofs = mtd->size - *len; @@ -1229,13 +1229,13 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) if (!(val & mask)) return -EINVAL; - status_new = (status_old & ~mask & ~SR_TB) | val; + status_new = (status_old & ~mask & ~SR_TB_BIT5) | val; /* Disallow further writes if WP pin is asserted */ status_new |= SR_SRWD; if (!use_top) - status_new |= SR_TB; + status_new |= SR_TB_BIT5; /* Don't bother if they're the same */ if (status_new == status_old) @@ -1311,14 +1311,14 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) return -EINVAL; } - status_new = (status_old & ~mask & ~SR_TB) | val; + status_new = (status_old & ~mask & ~SR_TB_BIT5) | val; /* Don't protect status register if we're fully unlocked */ if (lock_len == 0) status_new &= ~SR_SRWD; if (!use_top) - status_new |= SR_TB; + status_new |= SR_TB_BIT5; /* Don't bother if they're the same */ if (status_new == status_old) diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index 9f57cdfcc93d..06de3e6e8d4e 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -126,7 +126,7 @@ #define SR_BP0 BIT(2) /* Block protect 0 */ #define SR_BP1 BIT(3) /* Block protect 1 */ #define SR_BP2 BIT(4) /* Block protect 2 */ -#define SR_TB BIT(5) /* Top/Bottom protect */ +#define SR_TB_BIT5 BIT(5) /* Top/Bottom protect */ #define SR_SRWD BIT(7) /* SR write protect */ /* Spansion/Cypress specific status bits */ #define SR_E_ERR BIT(5) From patchwork Sat Jul 13 14:59:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jungseung Lee X-Patchwork-Id: 1140393 X-Patchwork-Delegate: tudor.ambarus@gmail.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=samsung.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YraYwh71"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="sNkM9vVS"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45zmfy4d2xz9sBF for ; Thu, 1 Aug 2019 20:26:34 +1000 (AEST) 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:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ON4YXYADjH1jcUyLang8t7D8jQqG0QFlnDfLi4LgH0M=; b=YraYwh71+1JzvS qIMCsBCuspqMOO8i0s8WN7ghJGHKy5h/I8plguYrL1CaeQZKQSGkFDMmS7l3VdQKfMQ9sRcfobFkC Y7XmJbGcoR7J8DLHrszkm4H1tL9M1wNynSIyWQ2jugGsWaWU6errAfi7qf7HMsj8rdrCnCjvdgsyC n0c6LTzXPy1v4RHWTMEl1GD85xG8eiO3lxrRcAIcYwkFJk7fW7cxc7DrVozq8HGVvGrlw2pKwzVS7 Ll/fLlBU62wPjHIN25kx6FDCMkQkarqI+b0HZevGUeq+ea3y6whNh/lUnE+x/6cWg4rhv6Yod8LaZ Aeklyo3rDlR4aWfb5h8Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1ht8Hr-00025V-PV; Thu, 01 Aug 2019 10:26:19 +0000 Received: from mailout3.samsung.com ([203.254.224.33]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1ht8HP-0001Ss-Sx for linux-mtd@lists.infradead.org; Thu, 01 Aug 2019 10:25:55 +0000 Received: from epcas1p4.samsung.com (unknown [182.195.41.48]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20190801102547epoutp0399d91cc452655f7992900edbcc73f747~2xZEzNsD31104611046epoutp03I for ; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20190801102547epoutp0399d91cc452655f7992900edbcc73f747~2xZEzNsD31104611046epoutp03I DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1564655148; bh=Xe2m1YInrUWcJZYMMyKJYFH5VXZps0ZOUivfgx0KLXQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=sNkM9vVSsD11TAORqTOLVG/X/mT8/Vma2y/pPOtRcNln4wLGUHckKulZ4gNeFPqfR kfuu7NZBiHcOR287d6Gz0x6+xlMt4q+E2RBPKbzs3Pi4ZhjArB9COihEQDlHhN9vCt IvsoLlJA/aaQ5Z/ZwDC0Hj9Gko43SMNfS0mo2lkw= Received: from epsnrtp5.localdomain (unknown [182.195.42.166]) by epcas1p2.samsung.com (KnoxPortal) with ESMTP id 20190801102547epcas1p20414bf966e704c018249de37746cad7b~2xZEdDqAQ0744707447epcas1p2C; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) Received: from epsmges1p3.samsung.com (unknown [182.195.40.165]) by epsnrtp5.localdomain (Postfix) with ESMTP id 45zmf22FnczMqYkc; Thu, 1 Aug 2019 10:25:46 +0000 (GMT) Received: from epcas1p1.samsung.com ( [182.195.41.45]) by epsmges1p3.samsung.com (Symantec Messaging Gateway) with SMTP id E9.18.04066.A2EB24D5; Thu, 1 Aug 2019 19:25:46 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas1p3.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epcas1p30a36729bcb5b727177a9bf395f09cc77~2xZCjLPmO0924409244epcas1p3y; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) Received: from epsmgms1p2new.samsung.com (unknown [182.195.42.42]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20190801102545epsmtrp131b0e14291d4e959dd8defb3676eb1d2~2xZCia4Qa2006620066epsmtrp10; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) X-AuditID: b6c32a37-e3fff70000000fe2-1f-5d42be2a8ae2 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2new.samsung.com (Symantec Messaging Gateway) with SMTP id CE.9D.03638.92EB24D5; Thu, 1 Aug 2019 19:25:45 +0900 (KST) Received: from localhost.localdomain (unknown [10.88.100.192]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epsmtip1925fb3ea532985fe534d0d88fb907560~2xZCYdPvm1882918829epsmtip1Q; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) From: Jungseung Lee To: Marek Vasut , Tudor Ambarus , David Woodhouse , Brian Norris , Boris Brezillon , Richard Weinberger , u.kleine-koenig@pengutronix.de, linux-mtd@lists.infradead.org, js07.lee@gmail.com, js07.lee@samsung.com Subject: [PATCH v4 2/5] mtd: spi-nor: Fix wrong TB selection on winbond/gigadevice flashes Date: Sat, 13 Jul 2019 23:59:35 +0900 Message-Id: <20190713145938.19203-2-js07.lee@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190713145938.19203-1-js07.lee@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA01Se0hTcRTmt7s7r+bqtqyOQrQuCTVY7rqmN3Fq9vBSRkL/SWNd3MUN92p3 9vqjdEzJkToRemgPzVk+imxKqZWUFSqIWREUWYRFZQ8l7YkkbbtG/fedc75zvu93fofAFD/w BMJid/MuO2elZDHSa3fXqtWqvmyDZnhsMdPuPYGYe6OXMaamtRZjfp+elDDjz2Zx5obnQhRz /+ZLjKnt+YSYL4Es5nlNLcqKYXvqXkSxnS0qNthWIWM7A0fYsZ/NiH12di9b/VvDVnW1oTwi 35pu5jkT71Ly9gKHyWIv1FPbdxk3GXUpGlpNb2BSKaWds/F6anNunnqrxRoySCn3cdbiUCqP EwQqKSPd5Sh280qzQ3DrKd5psjppjXOdwNmEYnvhugKHLY3WaJJ1IeYeq/nhxFXMOaU88PXq JVkJ+hXvQ9EEkOvhtHdE4kMxhILsRnCi14OLwTSCicabmBh8R1A33IJ8iIi0TA7mi/lbCIIj pyThUQpyBoH3rDmMZaQKns4GI5PiyPcS+NxXj4cLS8jdMP52RhrGUjIRmr++Q2EsJzfAY/93 XPS0Eto7bmNhsWgyDfyjyvAcILtlcGewUyZyNkPrTKlUxEvgw0BXlIgTYKK6fB4L0NNaEyU2 exGMXwzMF7Qw+flyRAAj18KV3iQxvQp6Zs9E/GDkQpj8dgwXHyyHo+UKkULBp1feeVmA0deV 85ZZuNE6h8Q9VCII+Gk/WlH3T6ABoTa0jHcKtkJeoJ3a/z8piCJHp0rtRh0juf2IJBAVKx+s 2GhQ4Nw+4aCtHwGBUXHypuWZBoXcxB08xLscRlexlRf6kS60yBosYWmBI3TCdreR1iVrtVpm fUpqik5LLZc3/mQMCrKQc/NFPO/kXX/7JER0QgnSLcgJDpEGXDY9m0l7Puo3DSuPt2z7tfS6 vrKozVSV2GQZelD2cIfHV5d2fqAjZ9EH/OS0Z6Ih2b+a7Z170h5LVh7ufZOYXJpdlvNCqM+4 w06rmx/RvpTzfc2rGo5bclc8UsGWxrKX/VPp56pdayTa/Ull1+KNgfr6pp0Zq7dPUVLBzNEq zCVwfwBF7eY3igMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPLMWRmVeSWpSXmKPExsWy7bCSnK7mPqdYg7unZS1Wt0xntDhyYS2z xcSVk5kt/s55x2Tx6OZvVovdTcvYLY7uucdsMXnnG0aLj0scLG5PnMzowOWxc9Zddo/NK7Q8 Nq3qZPPYvKTe486PpYweN+cVevT/NfDo27KKMYAjissmJTUnsyy1SN8ugSvj4suNzAXvFSq+ bFzD1sD4U7KLkYNDQsBE4t2JqC5GLg4hgd2MEveOnGfsYuQEiktIPNr5hQWiRlji8OFiiJqP jBJPj01nA6lhE9CSuPF7EytIQkTgA5PE5UmnwBqEBaIk2vvyQWpYBFQlln55DjaTV8BS4vKE b6wQ8+UlVm84wAxSzilgJTHhggJIWAioZMPhH8wTGHkXMDKsYpRMLSjOTc8tNiwwykst1ytO zC0uzUvXS87P3cQIDkYtrR2MJ07EH2IU4GBU4uE90ekYK8SaWFZcmXuIUYKDWUmEd7G4fawQ b0piZVVqUX58UWlOavEhRmkOFiVxXvn8Y5FCAumJJanZqakFqUUwWSYOTqkGxuDpXdKVx55E ONyuCVf1aynao704+XzmmfSDs2zvvyk78dM0kp05lKs38alB0suEP5flnVbU8QsumbT58/8N 6jwzDVjmlt59z5P0jFmlWuScmvPJpbOYUgPXxSqxRBxMuf1TIu2FslfYxsjT/yzC09NMgpJU 7TIncjCqTJbnUk8unKyuekhViaU4I9FQi7moOBEAs18msUICAAA= X-CMS-MailID: 20190801102545epcas1p30a36729bcb5b727177a9bf395f09cc77 X-Msg-Generator: CA X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20190801102545epcas1p30a36729bcb5b727177a9bf395f09cc77 References: <20190713145938.19203-1-js07.lee@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190801_032552_276036_B386FFBB X-CRM114-Status: GOOD ( 20.08 ) X-Spam-Score: -3.1 (---) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-3.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [203.254.224.33 listed in list.dnswl.org] 2.1 DATE_IN_PAST_96_XX Date: is 96 hours or more before Received: date -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -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_EF Message has a valid DKIM or DK signature from envelope-from domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org For winbond and gigadevice flashes, wrong bit for top/bottom selection are being used. Fix it to use appropriate value. Signed-off-by: Jungseung Lee --- drivers/mtd/spi-nor/spi-nor.c | 24 +++++++++++++++++++----- include/linux/mtd/spi-nor.h | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index 612a6f0a87c3..f522201d22a5 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -1089,9 +1089,14 @@ static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs, { struct mtd_info *mtd = &nor->mtd; u8 mask = SR_BP2 | SR_BP1 | SR_BP0; + u8 mask_tb = SR_TB_BIT5; int shift = ffs(mask) - 1; int pow; + if (JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND || + JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) + mask_tb = SR_TB_BIT6; + if (!(sr & mask)) { /* No protection */ *ofs = 0; @@ -1099,7 +1104,7 @@ static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs, } else { pow = ((sr & mask) ^ mask) >> shift; *len = mtd->size >> pow; - if (nor->flags & SNOR_F_HAS_SR_TB && sr & SR_TB_BIT5) + if (nor->flags & SNOR_F_HAS_SR_TB && sr & mask_tb) *ofs = 0; else *ofs = mtd->size - *len; @@ -1178,6 +1183,7 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) struct mtd_info *mtd = &nor->mtd; int status_old, status_new; u8 mask = SR_BP2 | SR_BP1 | SR_BP0; + u8 mask_tb = SR_TB_BIT5; u8 shift = ffs(mask) - 1, pow, val; loff_t lock_len; bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB; @@ -1212,6 +1218,10 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) else lock_len = ofs + len; + if (JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND || + JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) + mask_tb = SR_TB_BIT6; + /* * Need smallest pow such that: * @@ -1229,13 +1239,13 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) if (!(val & mask)) return -EINVAL; - status_new = (status_old & ~mask & ~SR_TB_BIT5) | val; + status_new = (status_old & ~mask & ~mask_tb) | val; /* Disallow further writes if WP pin is asserted */ status_new |= SR_SRWD; if (!use_top) - status_new |= SR_TB_BIT5; + status_new |= mask_tb; /* Don't bother if they're the same */ if (status_new == status_old) @@ -1258,6 +1268,7 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) struct mtd_info *mtd = &nor->mtd; int status_old, status_new; u8 mask = SR_BP2 | SR_BP1 | SR_BP0; + u8 mask_tb = SR_TB_BIT5; u8 shift = ffs(mask) - 1, pow, val; loff_t lock_len; bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB; @@ -1292,6 +1303,9 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) else lock_len = ofs; + if (JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND || + JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) + mask_tb = SR_TB_BIT6; /* * Need largest pow such that: * @@ -1311,14 +1325,14 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) return -EINVAL; } - status_new = (status_old & ~mask & ~SR_TB_BIT5) | val; + status_new = (status_old & ~mask & ~mask_tb) | val; /* Don't protect status register if we're fully unlocked */ if (lock_len == 0) status_new &= ~SR_SRWD; if (!use_top) - status_new |= SR_TB_BIT5; + status_new |= mask_tb; /* Don't bother if they're the same */ if (status_new == status_old) diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index 06de3e6e8d4e..67cdbed6611a 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -127,6 +127,7 @@ #define SR_BP1 BIT(3) /* Block protect 1 */ #define SR_BP2 BIT(4) /* Block protect 2 */ #define SR_TB_BIT5 BIT(5) /* Top/Bottom protect */ +#define SR_TB_BIT6 BIT(6) /* Top/Bottom protect (on Winbond/GigaDevice) */ #define SR_SRWD BIT(7) /* SR write protect */ /* Spansion/Cypress specific status bits */ #define SR_E_ERR BIT(5) From patchwork Sat Jul 13 14:59:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jungseung Lee X-Patchwork-Id: 1140390 X-Patchwork-Delegate: tudor.ambarus@gmail.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=samsung.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="d3jRsepm"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="hQETgKnH"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45zmfH0rthz9sBF for ; Thu, 1 Aug 2019 20:25:59 +1000 (AEST) 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:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=acDfXQ/MNvu5nCPTye6xliaZuhYMHT/ulKEI7C4xyVI=; b=d3jRsepmOyNL55 tQAyLNfvwsknkhCLOiqTDXsh9O52IoOD/YHEYr4sNJYdWK2QqCYW1XvKQUTbNqs42ecI5S7Xbk6op 3DQ0F7c8RdIayQPQ03ombjEsxPXMZ9dl4mhIqAFbtJ7Iheay7zOF2BmRATLHm6PfbVJVdzdEBVWkF xfPC9vOs5jZGCn+YCbBWzpi+26VvlrIQCTWa/16ZufwsUGeMuNGEMOd0ud8SW6cytz4/dyF5w8KKK /fHC+lXlcL2FtWVo41AZ7qL6NPyMQgCdVrhNtyvvdrViJPLjYEfsUxkucvwLwFIQWXygh3ciE+dSp OLBBZ/8WBtSx1IFPmjVw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1ht8HT-0001UT-ES; Thu, 01 Aug 2019 10:25:55 +0000 Received: from mailout1.samsung.com ([203.254.224.24]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1ht8HP-0001Sp-SQ for linux-mtd@lists.infradead.org; Thu, 01 Aug 2019 10:25:53 +0000 Received: from epcas1p2.samsung.com (unknown [182.195.41.46]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20190801102547epoutp01c039b8bd7349a054009adeb33e76b4cd~2xZEkvrNW0962809628epoutp01d for ; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20190801102547epoutp01c039b8bd7349a054009adeb33e76b4cd~2xZEkvrNW0962809628epoutp01d DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1564655147; bh=7qLvwHE7UnvxrYc5272kEgqlJrT5/RKMD02NxNNAH5M=; h=From:To:Subject:Date:In-Reply-To:References:From; b=hQETgKnHgxKOBcxhAEhAonMOrkic6EKIjaktymX1j6YN2NDrBDfMnj8uqrecmfTJ2 NwHb+29EH4HxacHYkYV+GvoGQOFKqHCxFHyti7Sa3VsvKcQoqLNyYUgmgpcTEWtZIe rJclg+NRfbesGrCQMHfLr0oUCZE+1kjMLynWjgFw= Received: from epsnrtp5.localdomain (unknown [182.195.42.166]) by epcas1p4.samsung.com (KnoxPortal) with ESMTP id 20190801102547epcas1p411d4bb58d8d5ba2099af0b5c00b5713c~2xZELDdWC0933609336epcas1p4n; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) Received: from epsmges1p2.samsung.com (unknown [182.195.40.159]) by epsnrtp5.localdomain (Postfix) with ESMTP id 45zmf22D4wzMqYkb; Thu, 1 Aug 2019 10:25:46 +0000 (GMT) Received: from epcas1p1.samsung.com ( [182.195.41.45]) by epsmges1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 9A.62.04075.A2EB24D5; Thu, 1 Aug 2019 19:25:46 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas1p2.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epcas1p2966140195425fef491d607e3c183f22a~2xZCnlAdg0958009580epcas1p26; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20190801102545epsmtrp196164ed86056e3ad3031663ebba917d0~2xZCmvQC52006620066epsmtrp11; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) X-AuditID: b6c32a36-b61ff70000000feb-b7-5d42be2af094 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 65.0B.03706.92EB24D5; Thu, 1 Aug 2019 19:25:45 +0900 (KST) Received: from localhost.localdomain (unknown [10.88.100.192]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epsmtip16721dc41d2bd66ea18ff17b8a7c3e32a~2xZCccY_w2329723297epsmtip1J; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) From: Jungseung Lee To: Marek Vasut , Tudor Ambarus , David Woodhouse , Brian Norris , Boris Brezillon , Richard Weinberger , u.kleine-koenig@pengutronix.de, linux-mtd@lists.infradead.org, js07.lee@gmail.com, js07.lee@samsung.com Subject: [PATCH v4 3/5] mtd: spi-nor: introduce SR_BP_SHIFT define Date: Sat, 13 Jul 2019 23:59:36 +0900 Message-Id: <20190713145938.19203-3-js07.lee@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190713145938.19203-1-js07.lee@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA01Se0hTYRzt293jKk1u0/LXIloXwpqpm2vzGq6HSVw0QrCHiMMuetHV3aPd KT2gJMxUshIDQXtnD2elLQvN1DIjMyqpCKWysgcVKr1braxtd1L/ne/8zvnOx/l+OKbwSJS4 2epkHVaGI6Wh4kvX58XEqDuTTZrhF1OoxpIaRPX0n8WoqoZqjPp9YExEDQ96JVT7jpMy6saV IYyqbhtB1Mf6JdTjqmq0JJRuq30qoy+cVtNuV7mUvlC/nX7iOYHowUMb6b2/NfSeFhdKx7O4 pAKWyWMdKtaaa8szW/ONZFpGzrIcvUGjjdEmUgmkyspYWCOZsiI9ZrmZ8z2QVBUxXKGPSmd4 noxblOSwFTpZVYGNdxpJ1p7H2bUaeyzPWPhCa35srs2yUKvRxOt9ynVcQX3pLZl9JHLT2M5O WTH6oKhAITgQC+DBYY/YjxVEK4L9u7IqUKgPf0LwqrJOKhy+ITg9eE8y4bj4cI9MGHQgcLm6 gqrPCM57y0R+lZRQw4DXLfEPIoi3IhjtrAvYw4lkuF/XFwgUE3Pg14e+AC8nEuFJx0NMiJgF jc1XfRjHQ4iFsK9f5b8HiFYpuK6dEfl5IFJgqCZRkIfD+5stMgEr4d3e0iDmoa2hSiZ4SxAM n6oPDnQwNno2cD9GzIOmy3ECPRvavAeRH2NEGIx93S0RouRQVhqsi4SR5yViAQP0v6wMlkLD wJtxidBDJYL23l2SfWhm7b+EIwi50DTWzlvyWV5rj///l9wosHVqQys6dndFNyJwRE6W95Yv NSkkTBG/2dKNAMfICPnxyMUmhTyP2byFddhyHIUcy3cjva/IKkw5Ndfm22GrM0erj9fpdNQC Q4JBryMj5Uc9lElB5DNOdgPL2lnHhE+EhyiLUUJ6lPXn7VVp2duMqV3nin41PNho+tE8nOpu t3iTo0InRxt7+rgUavxE5suV5te6iCazu2JNHb5jvPaxaGj9Mw2z+/MkT2bE+cy1Hao76E+x 8ee00uLFkVxIb9ijpcrRA1vnq/tXO77zURmWOEv0XMO5GWe+jE7/fvcUkXYre0AlJsV8AaNV Yw6e+Qv2/aBeiwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrALMWRmVeSWpSXmKPExsWy7bCSnK7mPqdYg9kbFC1Wt0xntDhyYS2z xcSVk5kt/s55x2Tx6OZvVovdTcvYLY7uucdsMXnnG0aLj0scLG5PnMzowOWxc9Zddo/NK7Q8 Nq3qZPPYvKTe486PpYweN+cVevT/NfDo27KKMYAjissmJTUnsyy1SN8ugStjSdtJ9oI34hXv WvexNzB+EOpi5OSQEDCR2Hqlj72LkYtDSGA3o8TuWasZIRISEo92fmHpYuQAsoUlDh8uBgkL CXxklNh+WwDEZhPQkrjxexMrSK+IwAcmicuTTrGAJIQFnCQuzYawWQRUJf58OMUKYvMKWErc 2XuFGWK+vMTqDQeYQeZzClhJTLigADHfUmLD4R/MExh5FzAyrGKUTC0ozk3PLTYsMMxLLdcr TswtLs1L10vOz93ECA5HLc0djJeXxB9iFOBgVOLhVehxjBViTSwrrsw9xCjBwawkwrtY3D5W iDclsbIqtSg/vqg0J7X4EKM0B4uSOO/TvGORQgLpiSWp2ampBalFMFkmDk6pBkbBrHBOm9v3 M7tXnM9tYv49XyxcVK6oMn2zXmVRy7vGziarxrNrL7pJT59SapS55V/seYEn/VPz+ysPWJWJ 5X1hLOtYXvhoi/7ZveG9O6ZttNa0Ouo/d9ss3gN2OQfzLXfOWPMgw7NHTbhgtobiz2U99unv n6zTZEvysH9gMytgo/SDP1Kpf5VYijMSDbWYi4oTAcAs2JhDAgAA X-CMS-MailID: 20190801102545epcas1p2966140195425fef491d607e3c183f22a X-Msg-Generator: CA X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20190801102545epcas1p2966140195425fef491d607e3c183f22a References: <20190713145938.19203-1-js07.lee@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190801_032552_161276_59025622 X-CRM114-Status: GOOD ( 22.24 ) X-Spam-Score: -3.1 (---) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-3.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [203.254.224.24 listed in list.dnswl.org] 2.1 DATE_IN_PAST_96_XX Date: is 96 hours or more before Received: date -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -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_EF Message has a valid DKIM or DK signature from envelope-from domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The shift variable of SR_BP is conclusive because the first bit of SR_BP is fixed on known flash. Introduce SR_BP_SHIFT define, and let them used by stm_* functions to replace ffs operation to get shift value. Signed-off-by: Jungseung Lee --- drivers/mtd/spi-nor/spi-nor.c | 11 +++++------ include/linux/mtd/spi-nor.h | 2 ++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index f522201d22a5..6d9c63ab6e51 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -1090,7 +1090,6 @@ static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs, struct mtd_info *mtd = &nor->mtd; u8 mask = SR_BP2 | SR_BP1 | SR_BP0; u8 mask_tb = SR_TB_BIT5; - int shift = ffs(mask) - 1; int pow; if (JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND || @@ -1102,7 +1101,7 @@ static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs, *ofs = 0; *len = 0; } else { - pow = ((sr & mask) ^ mask) >> shift; + pow = ((sr & mask) ^ mask) >> SR_BP_SHIFT; *len = mtd->size >> pow; if (nor->flags & SNOR_F_HAS_SR_TB && sr & mask_tb) *ofs = 0; @@ -1184,7 +1183,7 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) int status_old, status_new; u8 mask = SR_BP2 | SR_BP1 | SR_BP0; u8 mask_tb = SR_TB_BIT5; - u8 shift = ffs(mask) - 1, pow, val; + u8 pow, val; loff_t lock_len; bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB; bool use_top; @@ -1232,7 +1231,7 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) * pow = ceil(log2(size / len)) = log2(size) - floor(log2(len)) */ pow = ilog2(mtd->size) - ilog2(lock_len); - val = mask - (pow << shift); + val = mask - (pow << SR_BP_SHIFT); if (val & ~mask) return -EINVAL; /* Don't "lock" with no region! */ @@ -1269,7 +1268,7 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) int status_old, status_new; u8 mask = SR_BP2 | SR_BP1 | SR_BP0; u8 mask_tb = SR_TB_BIT5; - u8 shift = ffs(mask) - 1, pow, val; + u8 pow, val; loff_t lock_len; bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB; bool use_top; @@ -1319,7 +1318,7 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) if (lock_len == 0) { val = 0; /* fully unlocked */ } else { - val = mask - (pow << shift); + val = mask - (pow << SR_BP_SHIFT); /* Some power-of-two sizes are not supported */ if (val & ~mask) return -EINVAL; diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index 67cdbed6611a..97f0c3a05f86 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -135,6 +135,8 @@ #define SR_QUAD_EN_MX BIT(6) /* Macronix Quad I/O */ +#define SR_BP_SHIFT 2 + /* Enhanced Volatile Configuration Register bits */ #define EVCR_QUAD_EN_MICRON BIT(7) /* Micron Quad I/O */ From patchwork Sat Jul 13 14:59:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jungseung Lee X-Patchwork-Id: 1140394 X-Patchwork-Delegate: tudor.ambarus@gmail.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=samsung.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pOUR/WEi"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="JF11AH83"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45zmgJ3Fcrz9sBF for ; Thu, 1 Aug 2019 20:26:52 +1000 (AEST) 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:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=szwXG8ag1hoPYBBJexVEeriQ8nDWy/5KQ9t2wClE/28=; b=pOUR/WEiXcXjXJ J7KhgLCchOUwua7QYxhtIp3m1k6YYcBBOOGku2bwVdG/PsmU+Wu76gBqd8gnXYYpwJbwdxI52IVCl VqV9V/K8OmLrXDZhTE7fisIci7ZRZOmHoo/520CAADg1Pi754LPInE/Zoe/xDmETVRiq9elYYezaX AI3QedKeXfWjtBRjzFfbMQKFMBPoIgr//q1n7GMcSdTlDc/owGpUcnGHUn87UZPPpJIA8XL7w1WE+ QVY4aaY5gV+H7FkbxkGzIDX8zm93XX56EL2CF3f8RujgVFoehfOQvKnwgAWX20+UP8rmOx12ZRl+E y6RyVuBMol+id83LVwug==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1ht8I4-0002Kg-W6; Thu, 01 Aug 2019 10:26:33 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1ht8HQ-0001Sr-0d for linux-mtd@lists.infradead.org; Thu, 01 Aug 2019 10:25:55 +0000 Received: from epcas1p4.samsung.com (unknown [182.195.41.48]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20190801102547epoutp0202eb90c035d143492dc0eaa00ed6950a~2xZEue9ao3035730357epoutp022 for ; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20190801102547epoutp0202eb90c035d143492dc0eaa00ed6950a~2xZEue9ao3035730357epoutp022 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1564655147; bh=0V2IeG0UIO9bcl/ljE7dNyMG66rht3EyWxSt6MvVN0g=; h=From:To:Subject:Date:In-Reply-To:References:From; b=JF11AH83JAk/F7TE90wC+knVtGidZQ889XYeykTb52eWA09OtJ2FkRIFB9YUYa8bG mbJmbIjmfXzn/FPLi80QVaxwKjnmywUVF6xCfynBDLSCo7s8AENTihR6u3Dbw2shiW 2kH8M9cwkOKDSm3DAfUCB/+wp5UK2bXWkBBK7Tfw= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas1p1.samsung.com (KnoxPortal) with ESMTP id 20190801102547epcas1p10c97788c3f024e3c974299228e2bbc8c~2xZEOgfQg1158211582epcas1p1J; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) Received: from epsmges1p3.samsung.com (unknown [182.195.40.165]) by epsnrtp4.localdomain (Postfix) with ESMTP id 45zmf22pFGzMqYkb; Thu, 1 Aug 2019 10:25:46 +0000 (GMT) Received: from epcas1p1.samsung.com ( [182.195.41.45]) by epsmges1p3.samsung.com (Symantec Messaging Gateway) with SMTP id 0A.18.04066.A2EB24D5; Thu, 1 Aug 2019 19:25:46 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas1p2.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epcas1p2ea4a29c514a6c54813f379cc7b7110dd~2xZCtliaN0958009580epcas1p27; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20190801102545epsmtrp188d73eb6fc1810989c24d84aef12b802~2xZCqUVQJ2006620066epsmtrp12; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) X-AuditID: b6c32a37-e27ff70000000fe2-20-5d42be2a3a97 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 75.0B.03706.92EB24D5; Thu, 1 Aug 2019 19:25:45 +0900 (KST) Received: from localhost.localdomain (unknown [10.88.100.192]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epsmtip17b3230841693ad79d2926aaf4c33cae5~2xZCf-oc_2162121621epsmtip1j; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) From: Jungseung Lee To: Marek Vasut , Tudor Ambarus , David Woodhouse , Brian Norris , Boris Brezillon , Richard Weinberger , u.kleine-koenig@pengutronix.de, linux-mtd@lists.infradead.org, js07.lee@gmail.com, js07.lee@samsung.com Subject: [PATCH v4 4/5] mtd: spi-nor: add 4bit block protection support Date: Sat, 13 Jul 2019 23:59:37 +0900 Message-Id: <20190713145938.19203-4-js07.lee@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190713145938.19203-1-js07.lee@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA02Se0hTcRTH+3nddpVWl1l6EKJ16YGj2a5zeg1nZlY3MrIHBdWaF71Naa92 t8qIsrAoS+cSksonWqkhiYppmYkVRolKiGVlpEEPdfaiB9mizbuo/z7nfL+/cw7nd3BM9l0U jmeZ7ZzNzBpJcXBgy90IpVLRkaRTvSgIoa/lFiP6Xn89RrtqizDaUzIZQI8OTYnoW8evSOj7 7S8xuqhtAtGfqhPp564ilBjMtF0cljBNNQqmse60mGmqPsq8+HEZMUNl+xinR8UUNNehVHyH MT6TYzM4m5wzp1sysswGLbl+i36VXhOjopRUHB1Lys2sidOSySmpyjVZRu+ApHw/a3R4U6ks z5PLEuJtFoedk2daeLuW5KwZRiulskbyrIl3mA2R6RbTckqlitJ4nWnGzGFPmDU/+WDZZbck B5Vo8lAQDkQ0VNQ8Rj6WEa0I6m/uy0PBXv6M4H1nMRKCbwjymjzivy/KR76KBeE2gp/OqgAh +ILgxrk+zOcSEwp4OtUo8glziHcB4O64JPIJIcRaKGp1SnwcSCyCvu6P082lRBz0PHnkbzEf rjV0egvheBCxHAr75UK6XQzd7UjgZBisueDnEBjrbpYIHA7vnSf9zENbrUvimwGIXASjV6v9 ghom3fXT9TEiAq7fXCakF0DbVOl0TYyYBZNfz4p8FiCkcOqkTLCQMPEqN1BggP7X+SKBGSir bfZvKx9By/gvrBDNu/ivQwVCdSiUs/ImA8dTVvX/n9SIpo9OEduKGnpTuhCBI3Km9MHplTqZ iN3PZ5u6EOAYOUdaFbZCJ5NmsNmHOJtFb3MYOb4LabyLdGHhc9Mt3hM22/WUJkqtVtPRMbEx GjUZJq38QetkhIG1c3s5zsrZ/r4LwIPCc5B+eNOR+s2aLfMqWyODta+TPsdrlSuXPJysGN/5 SpswaMhJYCY8DndB70hoQnRP34yopc51ZUNPfs127DqcuF28cPG2jm63a8MYT91T/P6QWP5h 4G1PUuPq9dlnTpy3kJ5C+s2e+8cOlDoG8BTKNJJ2Z3xUtXXX7q6kcynPFh3beFVHBvKZLKXA bDz7Bw7GsPGKAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrALMWRmVeSWpSXmKPExsWy7bCSnK7mPqdYg3tnVC1Wt0xntDhyYS2z xcSVk5kt/s55x2Tx6OZvVovdTcvYLY7uucdsMXnnG0aLj0scLG5PnMzowOWxc9Zddo/NK7Q8 Nq3qZPPYvKTe486PpYweN+cVevT/NfDo27KKMYAjissmJTUnsyy1SN8ugSvj7l/xgl6XinlL 37I3MM4x7WLk5JAQMJGY//ArWxcjF4eQwG5GieU/z7FDJCQkHu38wtLFyAFkC0scPlwMUfOR UaL/4gWwGjYBLYkbvzexgiREBD4wSVyedIoFJCEs4C4xeUc/WBGLgKrE+eMfGEFsXgFLiTPX T7NBLJCXWL3hADPIAk4BK4kJFxRAwkJAJRsO/2CewMi7gJFhFaNkakFxbnpusWGBYV5quV5x Ym5xaV66XnJ+7iZGcDhqae5gvLwk/hCjAAejEg+vQo9jrBBrYllxZe4hRgkOZiUR3sXi9rFC vCmJlVWpRfnxRaU5qcWHGKU5WJTEeZ/mHYsUEkhPLEnNTk0tSC2CyTJxcEo1MAqG3S+ofh97 13/Li81fS8pu+jg4Fq+JeP8m7klyedyOPboukX47Tz7Yc175yPngDKlb4m0Zx3j+znm/3CJ8 Hp/yrSMtTKyLtnyao3vtZnrEpX2FT7rqvm3NreXgXXdjTWqG8fPMAkFz4deWC56d+dd0aNbT tNJn0q0b+7/8rt/4LnzGynRXpfNKLMUZiYZazEXFiQBOt59hQwIAAA== X-CMS-MailID: 20190801102545epcas1p2ea4a29c514a6c54813f379cc7b7110dd X-Msg-Generator: CA X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20190801102545epcas1p2ea4a29c514a6c54813f379cc7b7110dd References: <20190713145938.19203-1-js07.lee@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190801_032552_400425_A755CB8B X-CRM114-Status: GOOD ( 25.55 ) X-Spam-Score: -3.1 (---) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-3.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [203.254.224.25 listed in list.dnswl.org] 2.1 DATE_IN_PAST_96_XX Date: is 96 hours or more before Received: date -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -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_EF Message has a valid DKIM or DK signature from envelope-from domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Currently, we are supporting block protection only for flash chips with 3 block protection bits in the SR register. This patch enables block protection support for some flash with 4 block protection bits(bp0-3). Because this feature is not universal to all flash that support lock/unlock, control it via a new flag. Signed-off-by: Jungseung Lee --- drivers/mtd/spi-nor/spi-nor.c | 107 ++++++++++++++++++++++++++-------- include/linux/mtd/spi-nor.h | 5 ++ 2 files changed, 88 insertions(+), 24 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index 6d9c63ab6e51..0fee22068d94 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -96,6 +96,7 @@ enum spi_nor_pp_command_index { struct spi_nor_flash_parameter { u64 size; u32 page_size; + u16 n_sectors; struct spi_nor_hwcaps hwcaps; struct spi_nor_read_command reads[SNOR_CMD_READ_MAX]; @@ -250,7 +251,7 @@ struct flash_info { u16 page_size; u16 addr_width; - u16 flags; + u32 flags; #define SECT_4K BIT(0) /* SPINOR_OP_BE_4K works uniformly */ #define SPI_NOR_NO_ERASE BIT(1) /* No erase command needed */ #define SST_WRITE BIT(2) /* use SST byte programming */ @@ -279,6 +280,7 @@ struct flash_info { #define SPI_NOR_SKIP_SFDP BIT(13) /* Skip parsing of SFDP tables */ #define USE_CLSR BIT(14) /* use CLSR command */ #define SPI_NOR_OCTAL_READ BIT(15) /* Flash supports Octal Read */ +#define SPI_NOR_HAS_BP3 BIT(16) /* use 4 bits filed for block protect */ /* Part specific fixup hooks. */ const struct spi_nor_fixups *fixups; @@ -1088,26 +1090,49 @@ static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs, uint64_t *len) { struct mtd_info *mtd = &nor->mtd; - u8 mask = SR_BP2 | SR_BP1 | SR_BP0; - u8 mask_tb = SR_TB_BIT5; - int pow; + u8 mask_tb = SR_TB_BIT5, mask_bp3 = SR_BP3_BIT6; + u8 sr_masked, mask, tmp; + int pow = 0; if (JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND || - JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) + JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) { mask_tb = SR_TB_BIT6; + mask_bp3 = SR_BP3_BIT5; + } + + if (nor->flags & SNOR_F_HAS_SR_BP3) + mask = mask_bp3 | SR_BP2 | SR_BP1 | SR_BP0; + else + mask = SR_BP2 | SR_BP1 | SR_BP0; + + sr_masked = sr & mask; - if (!(sr & mask)) { + if (!sr_masked) { /* No protection */ *ofs = 0; *len = 0; - } else { - pow = ((sr & mask) ^ mask) >> SR_BP_SHIFT; - *len = mtd->size >> pow; - if (nor->flags & SNOR_F_HAS_SR_TB && sr & mask_tb) - *ofs = 0; + return; + } + + if (nor->flags & SNOR_F_HAS_SR_BP3) { + if (sr_masked & mask_bp3 && mask_bp3 == SR_BP3_BIT6) + tmp = (sr_masked & ~SR_BP3_BIT6) | BIT(5); else - *ofs = mtd->size - *len; + tmp = sr_masked; + + tmp >>= SR_BP_SHIFT; + + if (ilog2(nor->n_sectors) >= tmp) + pow = ilog2(nor->n_sectors) - tmp + 1; + } else { + pow = (sr_masked ^ mask) >> SR_BP_SHIFT; } + + *len = mtd->size >> pow; + if (nor->flags & SNOR_F_HAS_SR_TB && sr & mask_tb) + *ofs = 0; + else + *ofs = mtd->size - *len; } /* @@ -1181,9 +1206,8 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) { struct mtd_info *mtd = &nor->mtd; int status_old, status_new; - u8 mask = SR_BP2 | SR_BP1 | SR_BP0; - u8 mask_tb = SR_TB_BIT5; - u8 pow, val; + u8 mask_tb = SR_TB_BIT5, mask_bp3 = SR_BP3_BIT6; + u8 mask, pow, val; loff_t lock_len; bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB; bool use_top; @@ -1218,8 +1242,15 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) lock_len = ofs + len; if (JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND || - JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) + JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) { mask_tb = SR_TB_BIT6; + mask_bp3 = SR_BP3_BIT5; + } + + if (nor->flags & SNOR_F_HAS_SR_BP3) + mask = mask_bp3 | SR_BP2 | SR_BP1 | SR_BP0; + else + mask = SR_BP2 | SR_BP1 | SR_BP0; /* * Need smallest pow such that: @@ -1231,7 +1262,17 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len) * pow = ceil(log2(size / len)) = log2(size) - floor(log2(len)) */ pow = ilog2(mtd->size) - ilog2(lock_len); - val = mask - (pow << SR_BP_SHIFT); + + if (nor->flags & SNOR_F_HAS_SR_BP3) { + val = ilog2(nor->n_sectors) - pow + 1; + val = val << SR_BP_SHIFT; + + if (val & BIT(5) && mask_bp3 == SR_BP3_BIT6) + val = (val & ~BIT(5)) | SR_BP3_BIT6; + } else { + val = mask - (pow << SR_BP_SHIFT); + } + if (val & ~mask) return -EINVAL; /* Don't "lock" with no region! */ @@ -1266,9 +1307,8 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) { struct mtd_info *mtd = &nor->mtd; int status_old, status_new; - u8 mask = SR_BP2 | SR_BP1 | SR_BP0; - u8 mask_tb = SR_TB_BIT5; - u8 pow, val; + u8 mask_tb = SR_TB_BIT5, mask_bp3 = SR_BP3_BIT6; + u8 mask, pow, val; loff_t lock_len; bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB; bool use_top; @@ -1303,8 +1343,16 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) lock_len = ofs; if (JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND || - JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) + JEDEC_MFR(nor->info) == SNOR_MFR_GIGADEVICE) { mask_tb = SR_TB_BIT6; + mask_bp3 = SR_BP3_BIT5; + } + + if (nor->flags & SNOR_F_HAS_SR_BP3) + mask = mask_bp3 | SR_BP2 | SR_BP1 | SR_BP0; + else + mask = SR_BP2 | SR_BP1 | SR_BP0; + /* * Need largest pow such that: * @@ -1317,13 +1365,20 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len) pow = ilog2(mtd->size) - order_base_2(lock_len); if (lock_len == 0) { val = 0; /* fully unlocked */ + } else if (nor->flags & SNOR_F_HAS_SR_BP3) { + val = ilog2(nor->n_sectors) - pow + 1; + val = val << SR_BP_SHIFT; + + if (val & BIT(5) && mask_bp3 == SR_BP3_BIT6) + val = (val & ~BIT(5)) | SR_BP3_BIT6; } else { val = mask - (pow << SR_BP_SHIFT); - /* Some power-of-two sizes are not supported */ - if (val & ~mask) - return -EINVAL; } + /* Some power-of-two sizes are not supported */ + if (val & ~mask) + return -EINVAL; + status_new = (status_old & ~mask & ~mask_tb) | val; /* Don't protect status register if we're fully unlocked */ @@ -3714,6 +3769,7 @@ static int spi_nor_init_params(struct spi_nor *nor, memset(params, 0, sizeof(*params)); /* Set SPI NOR sizes. */ + params->n_sectors = info->n_sectors; params->size = (u64)info->sector_size * info->n_sectors; params->page_size = info->page_size; @@ -4233,12 +4289,15 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, nor->flags |= SNOR_F_NO_OP_CHIP_ERASE; if (info->flags & USE_CLSR) nor->flags |= SNOR_F_USE_CLSR; + if (info->flags & SPI_NOR_HAS_BP3) + nor->flags |= SNOR_F_HAS_SR_BP3; if (info->flags & SPI_NOR_NO_ERASE) mtd->flags |= MTD_NO_ERASE; mtd->dev.parent = dev; nor->page_size = params.page_size; + nor->n_sectors = params.n_sectors; mtd->writebufsize = nor->page_size; if (np) { diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index 97f0c3a05f86..243c522dbaa2 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -127,7 +127,9 @@ #define SR_BP1 BIT(3) /* Block protect 1 */ #define SR_BP2 BIT(4) /* Block protect 2 */ #define SR_TB_BIT5 BIT(5) /* Top/Bottom protect */ +#define SR_BP3_BIT5 BIT(5) /* Block protect 3 (on Winbond/GigaDevice)*/ #define SR_TB_BIT6 BIT(6) /* Top/Bottom protect (on Winbond/GigaDevice) */ +#define SR_BP3_BIT6 BIT(6) /* Block protect 3 */ #define SR_SRWD BIT(7) /* SR write protect */ /* Spansion/Cypress specific status bits */ #define SR_E_ERR BIT(5) @@ -246,6 +248,7 @@ enum spi_nor_option_flags { SNOR_F_BROKEN_RESET = BIT(6), SNOR_F_4B_OPCODES = BIT(7), SNOR_F_HAS_4BAIT = BIT(8), + SNOR_F_HAS_SR_BP3 = BIT(9), }; /** @@ -349,6 +352,7 @@ struct flash_info; * @dev: point to a spi device, or a spi nor controller device. * @info: spi-nor part JDEC MFR id and other info * @page_size: the page size of the SPI NOR + * @n_sectors: number of sector * @addr_width: number of address bytes * @erase_opcode: the opcode for erasing a sector * @read_opcode: the read opcode @@ -387,6 +391,7 @@ struct spi_nor { struct device *dev; const struct flash_info *info; u32 page_size; + u16 n_sectors; u8 addr_width; u8 erase_opcode; u8 read_opcode; From patchwork Sat Jul 13 14:59:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jungseung Lee X-Patchwork-Id: 1140392 X-Patchwork-Delegate: tudor.ambarus@gmail.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=samsung.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Syj/vMaM"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="UMoaZXt/"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45zmfl0P84z9sBF for ; Thu, 1 Aug 2019 20:26:23 +1000 (AEST) 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:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8h6XVfNOVIap8wdABCDvm2Kte4fbSNs2kSciQOMtViE=; b=Syj/vMaMQSS0Xg wBnezIqocrj0C2iHAFwIrAH/S8Xs/keU0LkSXgY/OUHC9A/VMZtDt/zr13nUO6spoLmprBYmrV6vS XhYJCZdBeQrlq01dmhi/cEnaTJb7X9Sh1M7bdUCvKnpfHRms0VhygJ45C3B3Mp9qUnYNmCmnKvCQW PQvauCY4KZqKaUyZegyOFMtqkeMIxwvcotBlrI9BTBcf6IHPoDK+KpruFuAUBUaomh2AG6hM3JFDA gkTX0zQ+AonqC0UYKkyDO71KUTHKrui0jSlT8wq1EGuztJ0wM33QhaQsbP08yp0ucRN/HiD8/DH4A VRNP3MsOcRc3tr9dwedA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1ht8Hh-0001qW-6S; Thu, 01 Aug 2019 10:26:09 +0000 Received: from mailout3.samsung.com ([203.254.224.33]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1ht8HP-0001Sy-Sx for linux-mtd@lists.infradead.org; Thu, 01 Aug 2019 10:25:54 +0000 Received: from epcas1p3.samsung.com (unknown [182.195.41.47]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20190801102549epoutp033c57e1da7182e33f7a8cef541668d92c~2xZF1JVia1112411124epoutp03C for ; Thu, 1 Aug 2019 10:25:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20190801102549epoutp033c57e1da7182e33f7a8cef541668d92c~2xZF1JVia1112411124epoutp03C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1564655149; bh=IrM+QBTPhBBdOCPiKyE/k+WdBKhp/99OPoV4v/DlOac=; h=From:To:Subject:Date:In-Reply-To:References:From; b=UMoaZXt/lqIHGv/ZWrYcb1VifuHYvMvJhzietlejXKWGx4Hz5nOL0LX9gRdy3F73e xLECLMFehTuezIPR+CKFf7EtKvXBgPqXeMM1eCcOUSeSiVitTithDmioP77Eu1N/F1 DyQX1H7ox981f0fObnqWd1T9rw0rZ47xrL90m9+8= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas1p4.samsung.com (KnoxPortal) with ESMTP id 20190801102547epcas1p409f180ba7821c59b4d3d73b4fcab51df~2xZEjenOx0933609336epcas1p4p; Thu, 1 Aug 2019 10:25:47 +0000 (GMT) Received: from epsmges1p1.samsung.com (unknown [182.195.40.162]) by epsnrtp4.localdomain (Postfix) with ESMTP id 45zmf2392DzMqYkZ; Thu, 1 Aug 2019 10:25:46 +0000 (GMT) Received: from epcas1p1.samsung.com ( [182.195.41.45]) by epsmges1p1.samsung.com (Symantec Messaging Gateway) with SMTP id 78.CC.04088.A2EB24D5; Thu, 1 Aug 2019 19:25:46 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas1p4.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epcas1p46bf16362a9a2dbf39e2caff85813807c~2xZCxHwJs2675026750epcas1p47; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190801102545epsmtrp2604bde5650db7506b0ec445bc71ee8fa~2xZCwb6Ao0916509165epsmtrp2I; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) X-AuditID: b6c32a35-845ff70000000ff8-a5-5d42be2a6144 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 26.0B.03706.92EB24D5; Thu, 1 Aug 2019 19:25:45 +0900 (KST) Received: from localhost.localdomain (unknown [10.88.100.192]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190801102545epsmtip1ad8a0e31b6400572e4b55fd6544dd729~2xZCj3-Vh2329623296epsmtip1N; Thu, 1 Aug 2019 10:25:45 +0000 (GMT) From: Jungseung Lee To: Marek Vasut , Tudor Ambarus , David Woodhouse , Brian Norris , Boris Brezillon , Richard Weinberger , u.kleine-koenig@pengutronix.de, linux-mtd@lists.infradead.org, js07.lee@gmail.com, js07.lee@samsung.com Subject: [PATCH v4 5/5] mtd: spi-nor: support lock/unlock for a few Micron chips Date: Sat, 13 Jul 2019 23:59:38 +0900 Message-Id: <20190713145938.19203-5-js07.lee@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190713145938.19203-1-js07.lee@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA01Sa0hTYRjm29nZjpfJYWp+DKp1qB8u1B3n7BSti0UequWwoChlHfSwibu1 s1VGV5tdVpbDojQvhZq5JYmKaV6zQgkK/1VoIdaPEl22UVkqtHmM+vd87/O87/Pwfi+GSH+h MqzA4mDtFsZEiCKFHc8Sk5IUfRm5ypHL8ZTPdQtQz0eaEcrTVI5QC1V+ATXxbg6luovvi6kX PR8QqrxrClDf6rdQo55ysCWS7qp8L6bbHijoVu9lEd1Wf4Yem20A9LuaI/T1BSV9rd0LdNhB 00Yjy+SzdjlrybPmF1gMGmLXXv02vTpdSSaR66l1hNzCmFkNsX23LmlHgSkUkJAfZUzOUEnH cByRsmmj3ep0sHKjlXNoCNaWb7KRSlsyx5g5p8WQnGc1byCVylR1SHnYZHRPlYtsQcnxnq93 RGeBN8oNIjCIp8HzU00iN4jEpHgngBXBV0iYkOIBACffJPPEDwCHvjwU/u14HwwIeaIXwJsd bsA/ggDWNnwRh1UiXAHfzrWiYSIO/yyA03130DARi2eHRt0GYSzE18DAzPziWAm+Hj6t6Bbw Fiuhr2UglAPDIvANsGxEHp4D8U4RfDz0cinGdthS+3sJx8LJoXYxj2Uw6O8V8ZiDXU0eMd/s AnCisX5JpIL+6eZFAwRPhI+epPDlVbBrrnoxG4LHQP/3q2hYAnEJvHRByksIODXuWrKFcORj KcpjGs43Fov5RZQC2OkOoGVgeeU/h7sAeMEy1saZDSxH2sj/v6kVLJ6dQt0JbrzePQhwDBDR EvnVrblSlDnKFZkHAcQQIk5Sl7A5VyrJZ4pOsHar3u40sdwgUIc26UFk8XnW0BFbHHpSnapS qai09HXpahWRILk3S+VKcQPjYAtZ1sba//YJsAjZWSCzDCsWXvcw83FAl/k9q6bk1OypEwvZ rtvFmv7VM2V6T8On6jHf2j0DO4/HpHqP1eAFyKXJzZmna3MyqmoHV5xfmWVwFWm1GaUC7dbp Eid6sbAk+pxf4zuwry7rVuU4eSHKWDg+Gpj0VFtPSgyH6tjP0RXXNv3M67+yX3tlOKeQEHJG hlQgdo75A/mYJFKMAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrILMWRmVeSWpSXmKPExsWy7bCSnK7mPqdYgzO7NC1Wt0xntDhyYS2z xcSVk5kt/s55x2Tx6OZvVovdTcvYLY7uucdsMXnnG0aLj0scLG5PnMzowOWxc9Zddo/NK7Q8 Nq3qZPPYvKTe486PpYweN+cVevT/NfDo27KKMYAjissmJTUnsyy1SN8ugSuj681ktoLPvBV7 3s9ma2Bcxd3FyMkhIWAicffzJ5YuRi4OIYHdjBIfj35igkhISDza+QUowQFkC0scPlwMUfOR UeJfbx87SA2bgJbEjd+bWEESIgIfmCQuTzrFApIQFgiQmNTQAjaIRUBV4tOHP2BxXgFLiYMz d0MtkJdYveEAM8gCTgEriQkXFEDCQkAlGw7/YJ7AyLuAkWEVo2RqQXFuem6xYYFhXmq5XnFi bnFpXrpecn7uJkZwQGpp7mC8vCT+EKMAB6MSD69Cj2OsEGtiWXFl7iFGCQ5mJRHexeL2sUK8 KYmVValF+fFFpTmpxYcYpTlYlMR5n+YdixQSSE8sSc1OTS1ILYLJMnFwSjUwFpWXTN8RfHVZ /sJ3yjNtLkuku0e+9ilomhZc89iwyZTNp8VjPwfzxv3i0w2eCr4P4jhmbObhx7s//8UsheX2 K2qlPBvSKtsyuUTvr1OsZAo5lR7AaudioCvrdLxx44o/KW4XLj2UN5Zadm/d1i0/VZ6Yz+/q +1H8e/6qD1oebDYnpdPlPyYosRRnJBpqMRcVJwIAwv4KnkQCAAA= X-CMS-MailID: 20190801102545epcas1p46bf16362a9a2dbf39e2caff85813807c X-Msg-Generator: CA X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20190801102545epcas1p46bf16362a9a2dbf39e2caff85813807c References: <20190713145938.19203-1-js07.lee@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190801_032552_288208_A712BC5F X-CRM114-Status: GOOD ( 15.94 ) X-Spam-Score: -3.1 (---) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-3.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [203.254.224.33 listed in list.dnswl.org] 2.1 DATE_IN_PAST_96_XX Date: is 96 hours or more before Received: date -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -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_EF Message has a valid DKIM or DK signature from envelope-from domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Some Micron models are known to have lock/unlock support, and that also support 4bit block protection bit (bp0-3). This patch support lock/unlock feature on the flash. Tested on w25q512ax3. The Other is modified following the datasheet. Signed-off-by: Jungseung Lee --- drivers/mtd/spi-nor/spi-nor.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index 0fee22068d94..f7d6aad4281e 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -2056,8 +2056,16 @@ static const struct flash_info spi_nor_ids[] = { { "n25q128a13", INFO(0x20ba18, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_QUAD_READ) }, { "n25q256a", INFO(0x20ba19, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, { "n25q256ax1", INFO(0x20bb19, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_QUAD_READ) }, - { "n25q512a", INFO(0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) }, - { "n25q512ax3", INFO(0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) }, + { + "n25q512a", INFO(0x20bb20, 0, 64 * 1024, 1024, + SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | + SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_HAS_BP3) + }, + { + "n25q512ax3", INFO(0x20ba20, 0, 64 * 1024, 1024, + SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | + SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_HAS_BP3) + }, { "n25q00", INFO(0x20ba21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) }, { "n25q00a", INFO(0x20bb21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) }, { "mt25ql02g", INFO(0x20ba22, 0, 64 * 1024, 4096,