From patchwork Mon Sep 11 09:41:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812282 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="EtEcCTah"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="MKDW3nbg"; dkim-atps=neutral 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 3xrNDC42G2z9s81 for ; Mon, 11 Sep 2017 19:39:07 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=9n68d5EGeYYyhQ+gO/RpscGzjXwgk0mdvxpJW2w+zF8=; b=EtEcCTahYIbkKdxj6f03TblgnR c4N/b+svEPvCALsijYlIhouQ+KEN5DKqqjFlCZN+5n4DvyZ2OQsKBVr8tMAWyGIK0ZGDG12KzcIpL IDq5BTMBB50hFsCKAOMrxvK1NzCi0uwfVZhiv3oqQUqxRx4Zze7qjS1b9un25m1H85cDVqJtexLBu dpIF6CaYktSm0T9oHDhHZveCuu81YY2zMn82kCJ2k3IhsGz0UeeyiNzaenYe02kCI3JFVwngY/hcI k6TjM/LAdalWmYQ3iZK1c4xg0BrdpdtSGaYpmibcllQLhottlN+YB9Ry/mlSERITJVxsNQ4WNm3LI Q1FjiOwA==; 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 1drLBF-0006af-Uo; Mon, 11 Sep 2017 09:39:02 +0000 Received: from mail-it0-x241.google.com ([2607:f8b0:4001:c0b::241]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAH-00068R-M2 for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:04 +0000 Received: by mail-it0-x241.google.com with SMTP id d6so3842516itc.4 for ; Mon, 11 Sep 2017 02:37:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CuPjCifY1oOEOSDDLZvuGzbj2ZUNxXhHYuuGD1Vxqmo=; b=MKDW3nbgt0fsrtIiALL/xhwtVMbV33TGdPXTc2EuCxw3t47IE6It4zoHVXmJtF2GnQ 9ifKLjbztKkMQHVwR08OTK78kH0GQPsy3XZ3NaXrlXUFM+XH8BN9w/f0f1z6mBA1Igb9 CYyOn4ud/Sd4raUlgWKV3MnJyHxK86QJD4CJpPDp4lfOw1N8va/mQTP1/Hl2vBI6KxMu s9/BCfQi1WrXaxjp18fgCB+dVIwkzzT5aeXkt5En1cOu2oRpCtcwx96GtIgNwqHrBl6R I1bvQsNtUYgb6UCU9sBv3HriH5VokQ8KAIbrV2BBeGLzIzxKO+aWs6EENPNzPyEpOrnK 3xIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CuPjCifY1oOEOSDDLZvuGzbj2ZUNxXhHYuuGD1Vxqmo=; b=qenDDUw5yUPJKAYRmmjOgn+6/nNsPHZQBrxBxrz4Uq+Ns8JWqA1nSff5na7APKwysi rm8SgC5eOToBPWO6afcvTU3rgub6EAnXa79PCnmkPLo0HkBlt3vwbosQgPJcgmJTgBTR u52t80IjzD+IJasK7vferPzBVaVQEkBEwkc/QvbpXL3nfiabnVSgGwaAucIj28kbgFWe kRCr+6/eJb3Dzvc+56N5bma8caII4OsLlKYq0CtmRmXuVkep1odK3Hnq1PXhZ4Uv7Nb/ 6rmKJwxqlYrccSnpsb9cn7mOAO1TGlB/vdMDPqLrB5rv6GuEiTz+c1byXk6mOkVoWELy c0hA== X-Gm-Message-State: AHPjjUjPOaCwFL1vPs4/KkUKoZ79LR0BuVMKilJgb9vDd5CYuRZvmw5L boodVV7NOywf1uan X-Google-Smtp-Source: AOwi7QB4r/i3X+NZpmNjP9H7eFTeP3fKxD+D6JvaqhjFBXWAWHhbl4WTfUNPjk/Bi1M5t0KLmYw16Q== X-Received: by 10.36.218.194 with SMTP id z185mr13234088itg.60.1505122660732; Mon, 11 Sep 2017 02:37:40 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.38 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:39 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 01/10] spi-nor: intel-spi: Fix number of protected range registers for BYT/LPT Date: Mon, 11 Sep 2017 02:41:51 -0700 Message-Id: <1505122921-5534-2-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023801_910006_C4C7D779 X-CRM114-Status: GOOD ( 13.42 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2607:f8b0:4001:c0b:0:0:0:241 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The number of protected range registers is not the same on BYT/LPT/ BXT. GPR0 only exists on Apollo Lake and its offset is reserved on other platforms. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index 8a596bf..e5b52e8 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -67,8 +67,6 @@ #define PR_LIMIT_MASK (0x3fff << PR_LIMIT_SHIFT) #define PR_RPE BIT(15) #define PR_BASE_MASK 0x3fff -/* Last PR is GPR0 */ -#define PR_NUM (5 + 1) /* Offsets are from @ispi->sregs */ #define SSFSTS_CTL 0x00 @@ -96,14 +94,17 @@ #define BYT_BCR 0xfc #define BYT_BCR_WPD BIT(0) #define BYT_FREG_NUM 5 +#define BYT_PR_NUM 5 #define LPT_PR 0x74 #define LPT_SSFSTS_CTL 0x90 #define LPT_FREG_NUM 5 +#define LPT_PR_NUM 5 #define BXT_PR 0x84 #define BXT_SSFSTS_CTL 0xa0 #define BXT_FREG_NUM 12 +#define BXT_PR_NUM 6 #define INTEL_SPI_TIMEOUT 5000 /* ms */ #define INTEL_SPI_FIFO_SZ 64 @@ -117,6 +118,7 @@ * @pregs: Start of protection registers * @sregs: Start of software sequencer registers * @nregions: Maximum number of regions + * @pr_num: Maximum number of protected range registers * @writeable: Is the chip writeable * @swseq: Use SW sequencer in register reads/writes * @erase_64k: 64k erase supported @@ -132,6 +134,7 @@ struct intel_spi { void __iomem *pregs; void __iomem *sregs; size_t nregions; + size_t pr_num; bool writeable; bool swseq; bool erase_64k; @@ -167,7 +170,7 @@ static void intel_spi_dump_regs(struct intel_spi *ispi) for (i = 0; i < ispi->nregions; i++) dev_dbg(ispi->dev, "FREG(%d)=0x%08x\n", i, readl(ispi->base + FREG(i))); - for (i = 0; i < PR_NUM; i++) + for (i = 0; i < ispi->pr_num; i++) dev_dbg(ispi->dev, "PR(%d)=0x%08x\n", i, readl(ispi->pregs + PR(i))); @@ -182,7 +185,7 @@ static void intel_spi_dump_regs(struct intel_spi *ispi) dev_dbg(ispi->dev, "BCR=0x%08x\n", readl(ispi->base + BYT_BCR)); dev_dbg(ispi->dev, "Protected regions:\n"); - for (i = 0; i < PR_NUM; i++) { + for (i = 0; i < ispi->pr_num; i++) { u32 base, limit; value = readl(ispi->pregs + PR(i)); @@ -286,6 +289,7 @@ static int intel_spi_init(struct intel_spi *ispi) ispi->sregs = ispi->base + BYT_SSFSTS_CTL; ispi->pregs = ispi->base + BYT_PR; ispi->nregions = BYT_FREG_NUM; + ispi->pr_num = BYT_PR_NUM; if (writeable) { /* Disable write protection */ @@ -305,12 +309,14 @@ static int intel_spi_init(struct intel_spi *ispi) ispi->sregs = ispi->base + LPT_SSFSTS_CTL; ispi->pregs = ispi->base + LPT_PR; ispi->nregions = LPT_FREG_NUM; + ispi->pr_num = LPT_PR_NUM; break; case INTEL_SPI_BXT: ispi->sregs = ispi->base + BXT_SSFSTS_CTL; ispi->pregs = ispi->base + BXT_PR; ispi->nregions = BXT_FREG_NUM; + ispi->pr_num = BXT_PR_NUM; ispi->erase_64k = true; break; @@ -652,7 +658,7 @@ static bool intel_spi_is_protected(const struct intel_spi *ispi, { int i; - for (i = 0; i < PR_NUM; i++) { + for (i = 0; i < ispi->pr_num; i++) { u32 pr_base, pr_limit, pr_value; pr_value = readl(ispi->pregs + PR(i)); From patchwork Mon Sep 11 09:41:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812283 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="H74866iF"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="rfB814Nr"; dkim-atps=neutral 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 3xrNDh2ptNz9s7G for ; Mon, 11 Sep 2017 19:39:32 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=fOOG1sBQaEftHArQDuSSiE6VqUWgDCSwlk+MLoaARkg=; b=H74866iFUeHJow52Gckrc29593 E7xLaUlMuuwRVdnxPv78GacxrFJbesFp7aDFd6PXm1gHfY9RAftMloI4z2beTBt7ANi1e5nZGwpU0 FxznRXMFp4TvT9Khg8InSy6xpLZ/KxWoS9e2BKHtEut4HkgqB8VZSG0LGCrYyiGR7g0GWs10y/wxV Cn+a54YBxfljR1NrkvAWFHVKCLDceoZH8Ib+++pkKo10dmANOptmm2g9rcl8gB0TKXZ3rz+wXa948 ZHMKTtxHGgawU+0Jv3XtzhRB2CWZFHDPbdjGrToCvv9FFREgnOSztbo0FaH1bQ8wPcf9IpUBBB6xb F6tIaypA==; 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 1drLBc-00072U-5R; Mon, 11 Sep 2017 09:39:24 +0000 Received: from mail-it0-x242.google.com ([2607:f8b0:4001:c0b::242]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAJ-000692-Ih for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:05 +0000 Received: by mail-it0-x242.google.com with SMTP id b76so3843407itb.2 for ; Mon, 11 Sep 2017 02:37:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=p06Bbt8PWUBC5WuvFJvoEHCgJFg+vtYCcVHsjAWE5Xg=; b=rfB814NrrA/sG1Sd/zkHv30g0+R7FqcwzKZh9yBwvrFShyYTLbZQlnsvPKkfGj8OVh VkFGa5kZfDkoodntmwudDcalGZHpAHZNlUQ02D8s9tCSzXZUjotXqtaX9Ns0h2IUTRZs +32xfvhXyoqRH2ghUG4ADcZxysaOTYWIVcEmWJHxSTgZWYZKsNc0nG9/rt4bWOawQQDi Qb2SaVUR/vQHAL9jHjTbgeIdPwhe9GYJKtlv6yjb4bq7HAMXTLhhR0QsHs1T4Mdytx1l TrPou7gtxNu/UNk44g3lc5CibxzFDtMqDI48j/4FGGi01l9VYLS1Uq5tH+/2me7ChAAZ Ytmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=p06Bbt8PWUBC5WuvFJvoEHCgJFg+vtYCcVHsjAWE5Xg=; b=Zp78TJ2ETPZvT1DKc6sHNfQj5Gb5BDmiZLzY1a7HBOVGct0x2Eg0FdUHutfGpelZM8 NfAO8CS5nUaR4U0Vw3YQ22Bv0Etv59jPtJ2Rw3P5+whZClioj2AyhT/N2LnhYK0gc6DO 5eXl3ABjo6x49i3A9TbI6qvncXScoqavKlyJ8+LV2+EdxlbpyNzyrF6TT5CwQwqPE93F oIqeFwNvH3piMXIggWYoDsnGi/nQRJznv5nCxsyY95PS5HwgZLYGBNQ9mY32T/Rqg/V9 ZsodHryvGYpfUDu2cpCHgx+oZQIneIO4E6S6f37jOP3bMg3j1Z0jvakYHEAM/OW7YOYf DkoQ== X-Gm-Message-State: AHPjjUiSpCItcANDRzgH+4fTgMqfJup6vgb7rmFzVVgdPz0gjBNQX78Z NIhZh98SucSdsZMwTajTeqw= X-Google-Smtp-Source: AOwi7QDSmVVLAKcnMnDmFuNovizlO9GBoXbWgqNpPATSlVl+8gmv1K0iJ9s53SX0hJpH+vuGCRpIGQ== X-Received: by 10.36.172.6 with SMTP id s6mr3651506ite.113.1505122662666; Mon, 11 Sep 2017 02:37:42 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.40 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:41 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 02/10] spi-nor: intel-spi: Remove useless 'buf' parameter in the HW/SW cycle Date: Mon, 11 Sep 2017 02:41:52 -0700 Message-Id: <1505122921-5534-3-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023803_670172_2E41BF73 X-CRM114-Status: GOOD ( 10.13 ) X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2607:f8b0:4001:c0b:0:0:0:242 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org intel_spi_hw_cycle() and intel_spi_sw_cycle() don't use the parameter 'buf' at all. Remove it. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index e5b52e8..07626ca 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -377,8 +377,7 @@ static int intel_spi_opcode_index(struct intel_spi *ispi, u8 opcode) return -EINVAL; } -static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, u8 *buf, - int len) +static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, int len) { u32 val, status; int ret; @@ -418,8 +417,7 @@ static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, u8 *buf, return 0; } -static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, u8 *buf, - int len) +static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len) { u32 val, status; int ret; @@ -456,9 +454,9 @@ static int intel_spi_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) writel(0, ispi->base + FADDR); if (ispi->swseq) - ret = intel_spi_sw_cycle(ispi, opcode, buf, len); + ret = intel_spi_sw_cycle(ispi, opcode, len); else - ret = intel_spi_hw_cycle(ispi, opcode, buf, len); + ret = intel_spi_hw_cycle(ispi, opcode, len); if (ret) return ret; @@ -486,8 +484,8 @@ static int intel_spi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) return ret; if (ispi->swseq) - return intel_spi_sw_cycle(ispi, opcode, buf, len); - return intel_spi_hw_cycle(ispi, opcode, buf, len); + return intel_spi_sw_cycle(ispi, opcode, len); + return intel_spi_hw_cycle(ispi, opcode, len); } static ssize_t intel_spi_read(struct spi_nor *nor, loff_t from, size_t len, From patchwork Mon Sep 11 09:41:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812284 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="omrXy59R"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bxzpthM1"; dkim-atps=neutral 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 3xrNF82VmPz9s7G for ; Mon, 11 Sep 2017 19:39:56 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=RDq5NJVJoN0vCqdMcjguc6Aqz3WXpOTLhM+zuzcx9Ug=; b=omrXy59R0IeN/W9o56Df5Fv7t0 vJhINykVwVnzTAV4BTc2RXIx/9O6SAs2rLR3rkK02XvYVP5QQlOcOwko0mKaDFEmti4e2aOcMtodG BbS1l8yqfx39YVhJ7PFtJfuitXU5tQ4jaYd82kP0NVjgfv9+YBzEUBFHkc9UBaTZ6X0Wh+wQnL2Us e8YsSCBoRxnoQ0kGrCMdpIcZ5SsqhljBUW6tM4+XS3Tqn40u4FQkVVkQx3Vj7Yhs/tMG8hSSJutlG q+SSIzo3AwtzatKKKstIQIJtX+YRUz6v4dzBbN21kzbvfwCJO+y4L5t3sVA+vRFUoUrrsvehUF/Mv ykCoLViQ==; 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 1drLC2-0007RB-2f; Mon, 11 Sep 2017 09:39:50 +0000 Received: from mail-io0-x241.google.com ([2607:f8b0:4001:c06::241]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAL-00069Z-JR for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:07 +0000 Received: by mail-io0-x241.google.com with SMTP id y123so4998609iod.0 for ; Mon, 11 Sep 2017 02:37:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iM9NRgkk28SwtK12xFDquMC9QbAR7PFVd0GlynqhP9o=; b=bxzpthM1cofGxDS8BCnMSPLq6GjN05s+NPmWbephd7AI1CsR+MaAyUMjePWCsFInb+ MPfsM/1MLLPm5AmaPtdMVhwe6vrJ5GZackGHaEXC6UGwicYvjpV5iBHL2VxlKvxTj8Y+ EfBnbU4sqZJ85vlTTIH0wjSNstfpqget6Suy4sPDnL8/1kPMMgj2m4BaJ/6nwnIf3wso N94fgskCIIstQIazZWvf9CuYW8dxbkVDwWxO8pDr8L8XE7B9+lKni/EhLSPbxP3y02EM eTNaIJa3dEpMmiJbOZpg8FAj1VOWR8Iuztlj6+j4b3gAo4F52nJM8ASj0ZkIzq7MAlka PJZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=iM9NRgkk28SwtK12xFDquMC9QbAR7PFVd0GlynqhP9o=; b=nJ5tbnQXOk6s0P6akRGl3v0dI90k65jWYAUJEoxkmjVcPrpwicKKoEwXzoeyrsEdb2 3SsgP2NLDL3zXQdlkRIX31rCeQZoX9z82ljuu5+LN08GG3keZaPRr7yFsOVoPVeBmldb I0kwPKPPnjOvlPOsbVz1nxyu7KegpkGyTSCXq+1IUFDZ3uo4jwt6y9cv2JUliJiVfdSg RpGoVfSnJu7+kS2klTo7y/n5Cia+BDLqYCpvtePQSz4zKXz29ADHijnIklP41V7lEiTx YQleDDcZdwLWjMOQ6O8fyLkty3fu/RuXZcg+dZdRbJtbEJzUFROH0ihJVhBOIr9KoHll LLcA== X-Gm-Message-State: AHPjjUhY5JGLO+XXk77phT+BHZbX5IWcIyAEU6xnzWbOngbSBi3wBB5C blizMRQfj1FyiQ== X-Google-Smtp-Source: AOwi7QCqy4Rjsye4YP8H5GHn2sr0qvnGHjl58vXazSb2yL8q+fOAcqhECY23xcEsum8uIzpTaONJpQ== X-Received: by 10.107.151.73 with SMTP id z70mr15898849iod.171.1505122664588; Mon, 11 Sep 2017 02:37:44 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.42 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:43 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 03/10] spi-nor: intel-spi: Fix broken software sequencing codes Date: Mon, 11 Sep 2017 02:41:53 -0700 Message-Id: <1505122921-5534-4-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023805_805637_AA2370CF X-CRM114-Status: GOOD ( 11.44 ) X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2607:f8b0:4001:c06:0:0:0:241 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese , stable@vger.kernel.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org There are two bugs in current intel_spi_sw_cycle(): - The 'data byte count' field should be the number of bytes transferred minus 1 - SSFSTS_CTL is the offset from ispi->sregs, not ispi->base Signed-off-by: Bin Meng Cc: # v4.11+ Acked-by: Mika Westerberg --- Changes in v2: - Add stable kernel tags in the commit message drivers/mtd/spi-nor/intel-spi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index 07626ca..263c6ab 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -426,7 +426,7 @@ static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len) if (ret < 0) return ret; - val = (len << SSFSTS_CTL_DBC_SHIFT) | SSFSTS_CTL_DS; + val = ((len - 1) << SSFSTS_CTL_DBC_SHIFT) | SSFSTS_CTL_DS; val |= ret << SSFSTS_CTL_COP_SHIFT; val |= SSFSTS_CTL_FCERR | SSFSTS_CTL_FDONE; val |= SSFSTS_CTL_SCGO; @@ -436,7 +436,7 @@ static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len) if (ret) return ret; - status = readl(ispi->base + SSFSTS_CTL); + status = readl(ispi->sregs + SSFSTS_CTL); if (status & SSFSTS_CTL_FCERR) return -EIO; else if (status & SSFSTS_CTL_AEL) From patchwork Mon Sep 11 09:41:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812286 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="knkCdq51"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="mfsTEL4A"; dkim-atps=neutral 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 3xrNG54sjzz9s7G for ; Mon, 11 Sep 2017 19:40:45 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=yVv31ZWPL8MItnXFHWUUH4ilj1YDTLYZNLVZ5ApBtPI=; b=knkCdq51GLXxYx0eIjHEz0+5AG EIplpOdIxzcGZOuR0QNpfuiHheXwrrL4FiWT2SM2bv8Erw3zXYAkcKG+m9RAKDfjgtmRqC5yc+9Ob WcpfqBVwn7jn7lQIYaC2JlXiTrgmAKe8nefGOHcZ195zZdMiEKR9TP9Fan9cJZi071f24JdNQel1X fmqGIB7K88581ywBExzHQTKQ6t+XpKfnwFxSKR79Tbj+V1CwtcW/wfzDn0CYg9+KaB8Jyif4DasMc 4BrQnq/MilEeALytAZUbOtwubUirX9dxnKe4IQDNukOKTCAJBQfcMyp3aBxTmgCmuz4W+CY0hWDPs slEHr3nw==; 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 1drLCj-0000l2-19; Mon, 11 Sep 2017 09:40:33 +0000 Received: from mail-io0-x243.google.com ([2607:f8b0:4001:c06::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAN-0006A3-If for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:09 +0000 Received: by mail-io0-x243.google.com with SMTP id g32so2092146ioj.1 for ; Mon, 11 Sep 2017 02:37:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZXcXXsdG40P1p1fXtPF+q5K77rD5BsLDDHtz/A5pyvE=; b=mfsTEL4AWVgj5HdcfIZhWjJLgUTnmrwK3b0i14CwKL7giNyzEHwWtHC5jy9mQgaO8O U0DhexBWPBJWI1gbWrvAYXCIIwwuHcVjfUmhqV1HTV/KEw+NEotBN5NKgi/+CoL+nAe9 I4flOzIjZEAwKu0lfUIQoekBsYSNhiNZje0rRFZx/Q3lHINLengpMs5zONfOhsb6Ft5H JHZpbSlqi2RN9v4DrEL0mjBKzjjBAyWaccZj6TMwJwmfIlmPseIxSudjpsT+RP9jW+A4 Z7F96e2vx87E09vL+ZF8oPIpifQvIFrVGnlvluDj7r/UtKvz6IvVb3l1GG/f3y4+BoCo nJzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZXcXXsdG40P1p1fXtPF+q5K77rD5BsLDDHtz/A5pyvE=; b=hWwLkfdngF7UoqKdJmdGTYCqdEaYdsp7OCWn+C/jVRwIF/Pgw4rmevkZTXckD5FMq6 63dyD9tsmQOdb+TrbHvfK1oAfu/L58DTHot0a2fzUCLEWO2xCpNo7oDE4HCgGIcPOOoZ irxmfhtRxEqN5rILyh/6VDzCcsdJEZjmAeSKe+Be1eZW1Q/iWEZXgI+4XR/fuf0WB18h RpIK3Cp7KZ/2hv3sLQHnu4EiSziyPshDE0IlMHlqr3lA/DdLEztAytDuE3RU1PoZk8TO fcJ4p8BQs8hkhDf8dtv2xEDYmb6mrEt03L/otG7mO3pszNYNbV0uUZ0tl9uewQ1PQF5u o0Gw== X-Gm-Message-State: AHPjjUhh4LNIZzt/MPzUYSjeRkv71z2SruS8EjkUIopYidB8Uti7Awq6 uwB3BKnumT2a0Q== X-Google-Smtp-Source: AOwi7QAx35UePM7fnQATmyVdO5LyaUjRLg3e0D8QJmJFn11AsBXKqbp9+3n4SXZP6XqLpoumaXCOtA== X-Received: by 10.107.22.65 with SMTP id 62mr15410737iow.304.1505122666571; Mon, 11 Sep 2017 02:37:46 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.44 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:45 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 04/10] spi-nor: intel-spi: Check transfer length in the HW/SW cycle Date: Mon, 11 Sep 2017 02:41:54 -0700 Message-Id: <1505122921-5534-5-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023807_777170_5021F303 X-CRM114-Status: GOOD ( 13.07 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2607:f8b0:4001:c06:0:0:0:243 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Intel SPI controller only has a 64 bytes FIFO. This adds a sanity check before triggering any HW/SW sequencer work. Additionally for the SW sequencer, if given data length is zero, we should not mark the 'Data Cycle' bit. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index 263c6ab..c4a9de6 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -399,6 +399,9 @@ static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, int len) return -EINVAL; } + if (len > INTEL_SPI_FIFO_SZ) + return -EINVAL; + val |= (len - 1) << HSFSTS_CTL_FDBC_SHIFT; val |= HSFSTS_CTL_FCERR | HSFSTS_CTL_FDONE; val |= HSFSTS_CTL_FGO; @@ -419,14 +422,19 @@ static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, int len) static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len) { - u32 val, status; + u32 val = 0, status; int ret; ret = intel_spi_opcode_index(ispi, opcode); if (ret < 0) return ret; - val = ((len - 1) << SSFSTS_CTL_DBC_SHIFT) | SSFSTS_CTL_DS; + if (len > INTEL_SPI_FIFO_SZ) + return -EINVAL; + + /* Only mark 'Data Cycle' bit when there is data to be transferred */ + if (len > 0) + val = ((len - 1) << SSFSTS_CTL_DBC_SHIFT) | SSFSTS_CTL_DS; val |= ret << SSFSTS_CTL_COP_SHIFT; val |= SSFSTS_CTL_FCERR | SSFSTS_CTL_FDONE; val |= SSFSTS_CTL_SCGO; From patchwork Mon Sep 11 09:41:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812285 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SetDhNQE"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bpabCE72"; dkim-atps=neutral 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 3xrNFc3Smhz9s81 for ; Mon, 11 Sep 2017 19:40:20 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=HFqQPrrFVOOu+jZggmb4q2oeEz4jBsVvYRzYno9XR+I=; b=SetDhNQExO8Ygij50hkfzS+6IL lTvRy3CDAsbd8RT++T9IKJdf8Q3LUrIK2eiVfMADaY4GJwbzOko8nRE/IeQJMDlPomDU1T1msVWIX xUTkIb3nE4oHNVdBgIANmgba0Nj7J4gdOjKOAe5rf+Zz5Dz32Zoys7N498nlob20vYPCA9BTSM9Gf n+ALznN96fpZBOrSxUmUnbb4goSDqfBsMUvYXd30sfEpr+6wDk2jXZnYYq2OuyvHksZUcE5AyoQUR Mk+7hnd77ka2dw6kgF8ruCD/mdAFdV12RqeCfBCR1QhWnQMmgGPL8k3WwKCJAvZyXSTkkCG7IlXuN zMQUXwqw==; 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 1drLCO-0008Is-EU; Mon, 11 Sep 2017 09:40:12 +0000 Received: from mail-io0-x243.google.com ([2607:f8b0:4001:c06::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAN-0006AX-Ic for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:10 +0000 Received: by mail-io0-x243.google.com with SMTP id 93so3203455iol.4 for ; Mon, 11 Sep 2017 02:37:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pVs78xWWxckKcMBQ7fpcCNdONwWJO9PfCOixBd2+ykw=; b=bpabCE72uTkvocbFz9k6Q5kQ5F0hdNN9sFG+9zejwuYfobkKuASQJzx7VcfCo4EEN/ VAHivjB450r54SColz2thXQXVfrGy03cQNTWzPXP/72IXjsEuIJhRWfRyA4dlzQb83zA T6s+/7xyBE+W/oPRYEnoUi1YtB6c0LMQ+0KI22P4Dc6aGjPYNF0GD8lT3r/QJl0kdBWe TFqWf3Mf7tRjrhK2Mvh8a8fIdVVVAMexn2OZDOWqtFZ389/XnTy9YTULNGGYEbbsVU5N waA6876XM5mF3QHzVM9XWvRsqM+N2RobE+gZt/Rw5U+DM2+jRqUQIbOFqHQkCldsKSJJ UCBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pVs78xWWxckKcMBQ7fpcCNdONwWJO9PfCOixBd2+ykw=; b=UN+/ccECqFmua1p3kiPLYsSagIBVxzowMLjQIumxb/m0mNZZ6ttr31tgOphgbXFRdq +6kiSsRrkTOVW7bYC94Py659XzCSnhuWXcXK9fVvotnhYthmdcHzTok7gYaqc7knifwg u5ZIm6PoFA23wWVhTIzmvTqEJNvliWngZerUrWCkBZPPoDuNotDgVx6QGoJkAc+ZPHCR G5yZ2mqL5aJbRnMZNiHI2qKrHEpDmWrh4eCdftm1wnEYqZAt4itU4DpsWMszUpCEGZDP pMA+78exu8RPouMdCk5iLRsXcTdyZl5e46AH/t0GoxVLCbyzo0VwDwxK348MK5pYZFk6 QM8Q== X-Gm-Message-State: AHPjjUjWR49MmijF4qphFxLS5hVC5uTd41x1Zb+nGwqDo8snNN4yaknM OuwW4+zUV5r/zA== X-Google-Smtp-Source: AOwi7QAOsQDORoHIZHSU+RMYgLEiZ5omRpg1lSsouXwYJXvd8QJvg874Kk1iUyXoK5FqppqOeeDsEg== X-Received: by 10.107.30.137 with SMTP id e131mr15413023ioe.295.1505122668614; Mon, 11 Sep 2017 02:37:48 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.46 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:47 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 05/10] spi-nor: intel-spi: Use SW sequencer for BYT/LPT Date: Mon, 11 Sep 2017 02:41:55 -0700 Message-Id: <1505122921-5534-6-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023807_783743_07940329 X-CRM114-Status: GOOD ( 13.88 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2607:f8b0:4001:c06:0:0:0:243 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Baytrail/Lynx Point SPI controller's HW sequencer only supports basic operations. This is determined by the chipset design, however current codes try to use register values in OPMENU0/OPMENU1 to see whether SW sequencer should be used, which is wrong. In fact OPMENU0/OPMENU1 can remain unprogrammed by some bootloaders. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index c4a9de6..d0237fe 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -290,6 +290,7 @@ static int intel_spi_init(struct intel_spi *ispi) ispi->pregs = ispi->base + BYT_PR; ispi->nregions = BYT_FREG_NUM; ispi->pr_num = BYT_PR_NUM; + ispi->swseq = true; if (writeable) { /* Disable write protection */ @@ -310,6 +311,7 @@ static int intel_spi_init(struct intel_spi *ispi) ispi->pregs = ispi->base + LPT_PR; ispi->nregions = LPT_FREG_NUM; ispi->pr_num = LPT_PR_NUM; + ispi->swseq = true; break; case INTEL_SPI_BXT: @@ -324,12 +326,24 @@ static int intel_spi_init(struct intel_spi *ispi) return -EINVAL; } - /* Disable #SMI generation */ + /* Disable #SMI generation from HW sequencer */ val = readl(ispi->base + HSFSTS_CTL); val &= ~HSFSTS_CTL_FSMIE; writel(val, ispi->base + HSFSTS_CTL); /* + * Some controllers can only do basic operations using hardware + * sequencer. All other operations are supposed to be carried out + * using software sequencer. + */ + if (ispi->swseq) { + /* Disable #SMI generation from SW sequencer */ + val = readl(ispi->sregs + SSFSTS_CTL); + val &= ~SSFSTS_CTL_FSMIE; + writel(val, ispi->sregs + SSFSTS_CTL); + } + + /* * BIOS programs allowed opcodes and then locks down the register. * So read back what opcodes it decided to support. That's the set * we are going to support as well. @@ -337,13 +351,6 @@ static int intel_spi_init(struct intel_spi *ispi) opmenu0 = readl(ispi->sregs + OPMENU0); opmenu1 = readl(ispi->sregs + OPMENU1); - /* - * Some controllers can only do basic operations using hardware - * sequencer. All other operations are supposed to be carried out - * using software sequencer. If we find that BIOS has programmed - * opcodes for the software sequencer we use that over the hardware - * sequencer. - */ if (opmenu0 && opmenu1) { for (i = 0; i < ARRAY_SIZE(ispi->opcodes) / 2; i++) { ispi->opcodes[i] = opmenu0 >> i * 8; @@ -353,13 +360,6 @@ static int intel_spi_init(struct intel_spi *ispi) val = readl(ispi->sregs + PREOP_OPTYPE); ispi->preopcodes[0] = val; ispi->preopcodes[1] = val >> 8; - - /* Disable #SMI generation from SW sequencer */ - val = readl(ispi->sregs + SSFSTS_CTL); - val &= ~SSFSTS_CTL_FSMIE; - writel(val, ispi->sregs + SSFSTS_CTL); - - ispi->swseq = true; } intel_spi_dump_regs(ispi); From patchwork Mon Sep 11 09:41:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812287 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="rU+T6WZ4"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TBjMkYey"; dkim-atps=neutral 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 3xrNGJ52kQz9s7G for ; Mon, 11 Sep 2017 19:40:56 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=hiy7xRehqT2sLNutJRYVjcNCSso2JhgIjh0URnxMR3A=; b=rU+T6WZ45cgZMgZUe/A/jY7w0n CWgH9TZVWs+GMLSxPer0bedDOh2u8gPT3wHGCQ6DIPSnzv6y78d8p7uktTXy2WQooYStu5/+wsVcS Eat+Ok6czQ85kN/hfnlRCjWVg1kIUPvAEmHdiXdfJoY9LpwPwLkv/ZqKn8cNbFWjLnvNPtagis4xq 5qcOl7/Ed4JYkcrE04kUBGSZlKlFd6H+cLJh9dDyWllhux80YZ/iV84uEbnFRrYFRx2sBhyxTwW0r bdPu6meMJYeXQ9sn+GTI9jLh1EthBo2TsS69z4GF0eZcWUr96m/XNt9emwwa288DEgZIcNqrHpiSa QnMjEKyQ==; 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 1drLD2-00010z-IV; Mon, 11 Sep 2017 09:40:52 +0000 Received: from mail-it0-x242.google.com ([2607:f8b0:4001:c0b::242]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAO-0006BD-7x for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:10 +0000 Received: by mail-it0-x242.google.com with SMTP id z81so3846925itb.5 for ; Mon, 11 Sep 2017 02:37:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7BP8jfakeGIf8x9ytNPcJa3V/X72/ucBYjOjdIPEg0I=; b=TBjMkYeyV0XDDVi9/Z9A/qdDO9xSzHm/quio45/gO5oq83kdgatw2xQ0pfwixHdrlC N5OXut49vuLpS/2wlvAgDKQQw0MKvKGASkPFLAMaqQsDtGBVI37UD2hZ22bdqeu3nXMD VKyFr9x1yG5d6hgTO0aF3xAwGk5jl0rEpLHmZppYKLxBKqJjAgEzVlDRylo9m2wgoID1 3lxywekQeNEetE4avENeqFBq0XJdjoOU9Zd4l73G9SeFCsTZu3F5w8Y7NtwOD3XyALuK ZCDMfnGt+XchFvcHNJlK+iQDKHWqip3XuD6oB5BSAjnf9YW7f7yUsp3wkjbrrCyIsy7A voig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7BP8jfakeGIf8x9ytNPcJa3V/X72/ucBYjOjdIPEg0I=; b=iWS3G5uDFucMW6KEkpU9LtjWF3upm5bM0Ks5zQRfehD+vr+ZQaM2VgozmyxDhuP3EH hCwx4RpbWBnCTU9nGFXzbXq0g2cYcvANckS2c+fm+qVNYt0U2H3Ddp4SP1mOaBK0yjm5 lXjaxdOWBSH+qVyNHUgiJK+s4l1g93TmWuz4RUgm3hexYkSiPgBYR/y+whzdGJYyyUBk K9K9WjbBVOdJMjNY02W0vl3M/gGKM5SivdgXLd43kGXFrHGhWdQg3NKV6jr2d7AViz2D 4U9EJW5sXrr5TejISk9sXqjMDsfHrNvcyDBn7OACYRa0yaAzCowpy/lnk9Od5EZWKZtA HJxw== X-Gm-Message-State: AHPjjUimWOSbvPvh+el6h/IV5JGJHbBK2+o847jxhXm6n3GblmcpSD5U 26LJRBTO3LQy4A== X-Google-Smtp-Source: AOwi7QC8qhmMfGl4iuP5nv4AxyoqCux75wF0o38f9jSWxrM4k7z0oQeuGJ9xy2E1F23ATnhBSvPq9g== X-Received: by 10.36.131.9 with SMTP id d9mr4228920ite.14.1505122670614; Mon, 11 Sep 2017 02:37:50 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.48 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:49 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 06/10] spi-nor: intel-spi: Remove 'Atomic Cycle Sequence' in intel_spi_write() Date: Mon, 11 Sep 2017 02:41:56 -0700 Message-Id: <1505122921-5534-7-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023808_537728_335ECE08 X-CRM114-Status: UNSURE ( 8.63 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2607:f8b0:4001:c0b:0:0:0:242 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org So far intel_spi_write() uses the HW sequencer to do the write. But the HW sequencer register HSFSTS_CTL does not have such a field for 'Atomic Cycle Sequence', remove it. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index d0237fe..757b9f1 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -572,11 +572,6 @@ static ssize_t intel_spi_write(struct spi_nor *nor, loff_t to, size_t len, val |= HSFSTS_CTL_AEL | HSFSTS_CTL_FCERR | HSFSTS_CTL_FDONE; val |= (block_size - 1) << HSFSTS_CTL_FDBC_SHIFT; val |= HSFSTS_CTL_FCYCLE_WRITE; - - /* Write enable */ - if (ispi->preopcodes[1] == SPINOR_OP_WREN) - val |= SSFSTS_CTL_SPOP; - val |= SSFSTS_CTL_ACS; writel(val, ispi->base + HSFSTS_CTL); ret = intel_spi_write_block(ispi, write_buf, block_size); From patchwork Mon Sep 11 09:41:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812289 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="aaDOnQEc"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="sjJG76DG"; dkim-atps=neutral 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 3xrNHG5Xclz9s7G for ; Mon, 11 Sep 2017 19:41:46 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=DRJjX0E8fgdfX20IQE5bLqqdH1IifxrBVL/TXaVVgQw=; b=aaDOnQEcbGY57hkRNdz+eK/Xue bdB2EqnI6jnga/AqxJzkHio7loBJamfHqnGq1QTlFe3JhKaaXgkIBq0KzsN+1xqVh/dtOlSXWiP4M I4sEYywJhvc/Jj/0fOHHv21no3CDNqiKMFQHLiCDGqx2Yb5sbTfDtXTmTOJEXqC7L4kc1/ruJfoVk nhvh1HLOYGDkiwiSOl80XKGZzsEqWP1aFawnrtbLZwmcHUcJVkvt6RLPo8sO0getEPSl5RxFnccu+ BGRZXzHEDl9ttnWyDzgvNr1AdrrU9rbYG8CP6OhDuQ6Sur37JfL9h3hbDNzjw8xuNiV+X5JZ2/uHu 5EbYMb9g==; 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 1drLDm-0001du-MM; Mon, 11 Sep 2017 09:41:38 +0000 Received: from mail-io0-x243.google.com ([2607:f8b0:4001:c06::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAS-0006Bk-89 for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:18 +0000 Received: by mail-io0-x243.google.com with SMTP id n69so617328ioi.3 for ; Mon, 11 Sep 2017 02:37:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OiH+BrQpN8fio15KeKV2lkl5liGfOvN/oDUN5LQJL1c=; b=sjJG76DGLKjD+Mf6i2M2nSvqXPywo5JdJD9u03PTKcch5U0vXaOIXXhRbW6sxR2tn9 B/bQfq4BUeTrnuLsM9jrzZEbCylppLFjMvRoALT7x5fwSk/fmLLutcfsRMGrwP502iMQ mGeXS8EcnEFmSJ4fEGqd66l9yAhrE0riCs5ZVgYwcO6dLPvyBZzGkpACn9HZkDlpFUbp OZnfJkaMYekJraFFuTH4G14mKkp1zRZKzGPaeZCBGdVAX00UV6u8mXKNbtGczPBqDwcY ztbJOFECsTvJpNZSTRN5dyc/eKgh5nPC+YMbRyhomoltjA9rcIfRHHSW506FfpU0Kb9m sunQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OiH+BrQpN8fio15KeKV2lkl5liGfOvN/oDUN5LQJL1c=; b=Qf4sr/RUwfnT8t2Q9uc0kwjVGaEO8Z8oTR/fmpS2s2CB8uSoMARIc/AkMbBNL6BuxD yYOfL1ZVfFtkKCKFVeXVUrRGjDd+h/fIlIzfyY6sQYSW0yh6WvbE32sFp8iF5R4dq1z7 pmWNRW3R4GuIq8imn/Ld7CMKK6/gIoMHs7eL8a9UT6wI6AoZbnOcG2xZ5f4QBNbhpdsS EgUSPDF7hSdC1iMPzHNJ6/luXr2iiE8f03XYaMK6amY5SgRvKefLnqUxy404jPDQSaL+ t/jYlA2qOep95ZN247wgbEzK0yDn4oKMey3TszRxT6How27I7kOgLq0JZus20SJIAowo D2wQ== X-Gm-Message-State: AHPjjUhvsnjVfYExqbNc1461yjLkBP9RbiLLmc+CYkrKBSPR85Nmqmet 3XfR36V6vZQkJg== X-Google-Smtp-Source: AOwi7QBoEJlJx/EBj8TAcy3RwVDFPt3qvhbhv/jgk88RvzEthpuFfWSULD6pa5A0BwMAxWXSKg5qpg== X-Received: by 10.107.142.200 with SMTP id q191mr15149919iod.149.1505122672671; Mon, 11 Sep 2017 02:37:52 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.50 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:51 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 07/10] spi-nor: intel-spi: Don't assume OPMENU0/1 to be programmed by BIOS Date: Mon, 11 Sep 2017 02:41:57 -0700 Message-Id: <1505122921-5534-8-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023812_417950_897C272D X-CRM114-Status: GOOD ( 23.10 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2607:f8b0:4001:c06:0:0:0:243 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org At present the driver relies on valid OPMENU0/OPMENU1 register values that are programmed by BIOS to function correctly. However in a real world it's absolutely legitimate for a bootloader to leave these two registers untouched. Intel FSP for Baytrail exactly does like this. When we are booting from any Intel FSP based bootloaders like U-Boot, the driver refuses to work. We can of course program various flash opcodes in the OPMENU0/OPMENU1 registers, and such workaround can be added in either the bootloader codes, or the kernel driver itself. But a graceful solution would be to update the kernel driver to remove such limitation of OPMENU0/1 register dependency. The SPI controller settings are not locked under such configuration. So we can first check the controller locking status, and if it is not locked that means the driver job can be fulfilled by using a chosen OPMENU index to set up the flash opcode every time. While we are here, the missing 'Atomic Cycle Sequence' handling in the SW sequencer codes is also added. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 91 +++++++++++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 26 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index 757b9f1..07146ab 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -88,6 +88,11 @@ #define OPMENU0 0x08 #define OPMENU1 0x0c +#define OPTYPE_READ_NO_ADDR 0 +#define OPTYPE_WRITE_NO_ADDR 1 +#define OPTYPE_READ_WITH_ADDR 2 +#define OPTYPE_WRITE_WITH_ADDR 3 + /* CPU specifics */ #define BYT_PR 0x74 #define BYT_SSFSTS_CTL 0x90 @@ -120,6 +125,7 @@ * @nregions: Maximum number of regions * @pr_num: Maximum number of protected range registers * @writeable: Is the chip writeable + * @locked: Is SPI setting locked * @swseq: Use SW sequencer in register reads/writes * @erase_64k: 64k erase supported * @opcodes: Opcodes which are supported. This are programmed by BIOS @@ -136,6 +142,7 @@ struct intel_spi { size_t nregions; size_t pr_num; bool writeable; + bool locked; bool swseq; bool erase_64k; u8 opcodes[8]; @@ -343,23 +350,29 @@ static int intel_spi_init(struct intel_spi *ispi) writel(val, ispi->sregs + SSFSTS_CTL); } - /* - * BIOS programs allowed opcodes and then locks down the register. - * So read back what opcodes it decided to support. That's the set - * we are going to support as well. - */ - opmenu0 = readl(ispi->sregs + OPMENU0); - opmenu1 = readl(ispi->sregs + OPMENU1); + /* Check controller's lock status */ + val = readl(ispi->base + HSFSTS_CTL); + ispi->locked = !!(val & HSFSTS_CTL_FLOCKDN); - if (opmenu0 && opmenu1) { - for (i = 0; i < ARRAY_SIZE(ispi->opcodes) / 2; i++) { - ispi->opcodes[i] = opmenu0 >> i * 8; - ispi->opcodes[i + 4] = opmenu1 >> i * 8; - } + if (ispi->locked) { + /* + * BIOS programs allowed opcodes and then locks down the + * register. So read back what opcodes it decided to support. + * That's the set we are going to support as well. + */ + opmenu0 = readl(ispi->sregs + OPMENU0); + opmenu1 = readl(ispi->sregs + OPMENU1); - val = readl(ispi->sregs + PREOP_OPTYPE); - ispi->preopcodes[0] = val; - ispi->preopcodes[1] = val >> 8; + if (opmenu0 && opmenu1) { + for (i = 0; i < ARRAY_SIZE(ispi->opcodes) / 2; i++) { + ispi->opcodes[i] = opmenu0 >> i * 8; + ispi->opcodes[i + 4] = opmenu1 >> i * 8; + } + + val = readl(ispi->sregs + PREOP_OPTYPE); + ispi->preopcodes[0] = val; + ispi->preopcodes[1] = val >> 8; + } } intel_spi_dump_regs(ispi); @@ -367,14 +380,25 @@ static int intel_spi_init(struct intel_spi *ispi) return 0; } -static int intel_spi_opcode_index(struct intel_spi *ispi, u8 opcode) +static int intel_spi_opcode_index(struct intel_spi *ispi, u8 opcode, int optype) { int i; + int preop; - for (i = 0; i < ARRAY_SIZE(ispi->opcodes); i++) - if (ispi->opcodes[i] == opcode) - return i; - return -EINVAL; + if (ispi->locked) { + for (i = 0; i < ARRAY_SIZE(ispi->opcodes); i++) + if (ispi->opcodes[i] == opcode) + return i; + + return -EINVAL; + } + + /* The lock is off, so just use index 0 */ + writel(opcode, ispi->sregs + OPMENU0); + preop = readw(ispi->sregs + PREOP_OPTYPE); + writel(optype << 16 | preop, ispi->sregs + PREOP_OPTYPE); + + return 0; } static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, int len) @@ -420,12 +444,14 @@ static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, int len) return 0; } -static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len) +static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len, + int optype) { u32 val = 0, status; + u16 preop; int ret; - ret = intel_spi_opcode_index(ispi, opcode); + ret = intel_spi_opcode_index(ispi, opcode, optype); if (ret < 0) return ret; @@ -438,6 +464,12 @@ static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len) val |= ret << SSFSTS_CTL_COP_SHIFT; val |= SSFSTS_CTL_FCERR | SSFSTS_CTL_FDONE; val |= SSFSTS_CTL_SCGO; + preop = readw(ispi->sregs + PREOP_OPTYPE); + if (preop) { + val |= SSFSTS_CTL_ACS; + if (preop >> 8) + val |= SSFSTS_CTL_SPOP; + } writel(val, ispi->sregs + SSFSTS_CTL); ret = intel_spi_wait_sw_busy(ispi); @@ -462,7 +494,8 @@ static int intel_spi_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) writel(0, ispi->base + FADDR); if (ispi->swseq) - ret = intel_spi_sw_cycle(ispi, opcode, len); + ret = intel_spi_sw_cycle(ispi, opcode, len, + OPTYPE_READ_NO_ADDR); else ret = intel_spi_hw_cycle(ispi, opcode, len); @@ -479,10 +512,15 @@ static int intel_spi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) /* * This is handled with atomic operation and preop code in Intel - * controller so skip it here now. + * controller so skip it here now. If the controller is not locked, + * program the opcode to the PREOP register for later use. */ - if (opcode == SPINOR_OP_WREN) + if (opcode == SPINOR_OP_WREN) { + if (!ispi->locked) + writel(opcode, ispi->sregs + PREOP_OPTYPE); + return 0; + } writel(0, ispi->base + FADDR); @@ -492,7 +530,8 @@ static int intel_spi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) return ret; if (ispi->swseq) - return intel_spi_sw_cycle(ispi, opcode, len); + return intel_spi_sw_cycle(ispi, opcode, len, + OPTYPE_WRITE_NO_ADDR); return intel_spi_hw_cycle(ispi, opcode, len); } From patchwork Mon Sep 11 09:41:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812288 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YaNajHzq"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="que0Xu5M"; dkim-atps=neutral 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 3xrNGr1n32z9s7G for ; Mon, 11 Sep 2017 19:41:24 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=VPmaXaRXD47E5J8A/6asFz6DfjloSawkGP9mmVjFt34=; b=YaNajHzqnl1VRM935ZOu0PsnXo QPmLYvEhE5wl09WQa4rLLm4h/yGphjVXpVfIYNYtnFC+ajwZ36qL2b6l4tWWT3FWNSRajx7j4ZFaS AViN56zwUOj5Il8Pz+VCvzBqBsd1i/ew6gE5y8NOYBM/6xIg3DSTYzCeTsedNq8uoECh2rF3OAJEk KlJCpp6m8Bl1gIiNZ9h3e6HwyktXKpTxITKK3VkBpI3Q501AWhjojcxo1Hbt46wkmj+pbcIBbxHom j25Uf3ODlhwjO5Ju6KIyipQeb7+nIQ7XR273zhH8qy0e5wqU18eUZS9QslhgJdEHzJ0LweOwsGeO1 TZCFUhNA==; 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 1drLDU-0001Of-0Q; Mon, 11 Sep 2017 09:41:20 +0000 Received: from mail-it0-x243.google.com ([2607:f8b0:4001:c0b::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAV-0006CF-H1 for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:18 +0000 Received: by mail-it0-x243.google.com with SMTP id z81so3847006itb.5 for ; Mon, 11 Sep 2017 02:37:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=y0AEb1unnm+O6sNEjmj4Ph9LgEuSqsa07gLISdJZT8I=; b=que0Xu5MmPvsxZ7LIYRKTCkjE592ePnrhBEbh9ym5qQ6bOgvSfdEnoUL5dzUyZIM3t rBCdUNSFLOp0hv8hcY75ogRUUtbPWDDgRud9+osEJ/CoF4Y4Dw0POu//DLuZvSPXa/kr ubwXEe8BsQ7fH03T4qxG2W5bLyPBz+/zUtjv09km6F0RjWttzAzutXhH4OcZhVuEdT8x roLv17rRIpP87LR2PN36IYvQycMDuzZN42JJr69BwQ2/JRV++HOjuRlNeX97Cx+ve0+5 NekjAUMuXUUlHYXS8R/qvwI58jXKNqe3e+1o5EbuYi77tLTUmzKLkbAKPRBv3Dwq6OfD MDlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=y0AEb1unnm+O6sNEjmj4Ph9LgEuSqsa07gLISdJZT8I=; b=XVBKFjwj6JKZFYDb0TYSdQjj298S3CcisoGKop9y0RqjWCuYig74iODhw74sbsQCl5 YXcY++YNh+/w9lPFPT8Pv4sx8xSmvrmqgZ0BLJgbJ4o7obT46ZtLkjE7LEQs3ewgo04g 4Yq4HyJ+xeLqWr0ESw9xD6NRcRwM/rS9pL3ReqqZpzvpiqFMeQQGpw5V8Mx+WPToTMBF IZNScw4yr6G3Vu84xHUX3xmIi6HaC4BHQniS8HHODyo1rA9G74IhwOGH6JTPTfpOeK5z BeKv/PWJ1HqOYn8n8Aa7lcB13j/f3C8mmANNTmK1BYRf1J0t5Dq5ikYEZ3kHz2aZO1Nm hWmg== X-Gm-Message-State: AHPjjUh8+W4ZcvLKEFXymqSqv/XdbzvswGkSO2fwK6KvvzSFZOzggX3O 0nDC+AT+nFmIlQ== X-Google-Smtp-Source: ADKCNb4r7guKrTOUGtF06yciJaoL/yr6EjMVXjsFxFmCC/b8Wdm7OzvibZWdIAupS0WhvEyOj1zdqw== X-Received: by 10.36.194.196 with SMTP id i187mr13786807itg.103.1505122674614; Mon, 11 Sep 2017 02:37:54 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.52 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:53 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 08/10] spi-nor: intel-spi: Remove the unnecessary HSFSTS register RW Date: Mon, 11 Sep 2017 02:41:58 -0700 Message-Id: <1505122921-5534-9-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023815_744913_A6D253D3 X-CRM114-Status: GOOD ( 10.49 ) X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2607:f8b0:4001:c0b:0:0:0:243 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org There is no code that alters the HSFSTS register content in between in intel_spi_write(). Remove the unnecessary RW to save some cycles. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index 07146ab..91ceef7 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -611,7 +611,6 @@ static ssize_t intel_spi_write(struct spi_nor *nor, loff_t to, size_t len, val |= HSFSTS_CTL_AEL | HSFSTS_CTL_FCERR | HSFSTS_CTL_FDONE; val |= (block_size - 1) << HSFSTS_CTL_FDBC_SHIFT; val |= HSFSTS_CTL_FCYCLE_WRITE; - writel(val, ispi->base + HSFSTS_CTL); ret = intel_spi_write_block(ispi, write_buf, block_size); if (ret) { @@ -620,8 +619,8 @@ static ssize_t intel_spi_write(struct spi_nor *nor, loff_t to, size_t len, } /* Start the write now */ - val = readl(ispi->base + HSFSTS_CTL); - writel(val | HSFSTS_CTL_FGO, ispi->base + HSFSTS_CTL); + val |= HSFSTS_CTL_FGO; + writel(val, ispi->base + HSFSTS_CTL); ret = intel_spi_wait_hw_busy(ispi); if (ret) { From patchwork Mon Sep 11 09:41:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812291 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Z/VWuRj4"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Po4AcRN7"; dkim-atps=neutral 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 3xrNXB2q7gz9s7G for ; Mon, 11 Sep 2017 19:52:58 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=+UdE8Ab4e5yTgIWSQKSNECIX+ngYuBzbL0fptQvoHRQ=; b=Z/VWuRj4P9EgsmQuZA2nIVjdG7 V3UvxsHd1lE+lkeumSP8gHcJzWTyIfAlq9dc1vBgW6yT2D4XqQBJYLf09QMqJTW1Jq6bIilgy9jZ4 UojklI3MrNwFWd+iXuRtNclUL9EZa6N5hqRNJ8U8a0jsAMShQZ6PRMhw07pFcZH34Yh5KtTRg50HS pe7+gQ+fuzdOqK7x/MWHLBzCrS4/qlfyvv2T5yzqjMhNxLBjQj0LUGB8Ugjz2hjwkIqZDwxwdGiXo edji1yeXy0Gqizr7tScEBdVWrROxRdWpJIDhO9jK5Cmv3X3593gpzDivvRdUYFhNZx0Phy30PJhvV 83VUgNpg==; 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 1drLOb-0007p1-NG; Mon, 11 Sep 2017 09:52:49 +0000 Received: from mail-it0-x242.google.com ([2607:f8b0:4001:c0b::242]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAT-0006Cm-7h for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:16 +0000 Received: by mail-it0-x242.google.com with SMTP id o200so3845332itg.1 for ; Mon, 11 Sep 2017 02:37:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=opiqhPRazGUgAdVPbCe+4FTDYAW0jgLqZU0GT2IfPGs=; b=Po4AcRN7sSJna/TpUWa8sXLLWF+rIeAUqGI8CtIfiWei/oHdOWaqiOY3IPIi2GBi+z ia6Cy7jXakxkc8iV4DeHCJuOe4toJ/4H2oHLzVbA/Dt4Nj4V7JZZ6E04eOXC8Dokv8kw ydF7KuF8ut9EJm6c9lvZEvXcYu+/TGxvdtgYSjz0eZSvevPpYP2svfdOVdYpXtq5F7xs kSGSC4gZYt3o3kW8DxgOEhSVLA58P9SzytXm8TFdHBk7yFstfe2TJAL12pRvJsIHqxLG HWE1pYS/UOqP+VKTZcMJufp2bt8C1nTalMr5dNSEKYkrX/rENiO7z+Y5mD5R292hXrKT Y3Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=opiqhPRazGUgAdVPbCe+4FTDYAW0jgLqZU0GT2IfPGs=; b=AYuzAAY/h8z/wL67sEEZhtSQ0OzdF/tYxLM7MK+gKqeR9dEcCLNQ6mpbS0nMmNR6gz lJhzF5FOPJsV7SAKn5MLfnqwDiksRo+SgmdsRVunA4pKNDyo3uxSS3zatFcJ1LdnFN1X TRBSfY4UPlae6zn4FvFG0aXpUS8bcmaw6tR5aMitA1GwcUnbn3rfbqlj19Fu4dNT83oS mFzgM0STsi8tlfTW88FMnymXkQwmuHX9PZE08zgs6/9/p+w1ELhNTIBERrwCgTGa/NVH btrkz2FmDb8wgUmRpLluh5vkNc8Jebp2VpDiDQ5kTv3cMZd41ADfU0DO+MLpJGHYuq72 b2zQ== X-Gm-Message-State: AHPjjUjATbNEvtYNHFuQErKsHGdRR2dCXFGmmbt0dstw347ShIbXgWO8 27KkltPtvHKl5QQ44piD93E= X-Google-Smtp-Source: ADKCNb7kCplWnJ7kQfrVDR3DXPbQJsiU+Vhemq99EILBFrmyjbg+HbADk3/Y51Mpg6XsXSRwainFAQ== X-Received: by 10.36.7.19 with SMTP id f19mr13290637itf.111.1505122676732; Mon, 11 Sep 2017 02:37:56 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.54 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:55 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 09/10] spi-nor: intel-spi: Rename swseq to swseq_reg in 'struct intel_spi' Date: Mon, 11 Sep 2017 02:41:59 -0700 Message-Id: <1505122921-5534-10-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023813_519309_2F63AB7A X-CRM114-Status: GOOD ( 14.19 ) X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2607:f8b0:4001:c0b:0:0:0:242 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The ispi->swseq is used for register access. Let's rename it to swseq_reg to better describe its usage. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: None drivers/mtd/spi-nor/intel-spi.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index 91ceef7..5e7a389 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -126,7 +126,7 @@ * @pr_num: Maximum number of protected range registers * @writeable: Is the chip writeable * @locked: Is SPI setting locked - * @swseq: Use SW sequencer in register reads/writes + * @swseq_reg: Use SW sequencer in register reads/writes * @erase_64k: 64k erase supported * @opcodes: Opcodes which are supported. This are programmed by BIOS * before it locks down the controller. @@ -143,7 +143,7 @@ struct intel_spi { size_t pr_num; bool writeable; bool locked; - bool swseq; + bool swseq_reg; bool erase_64k; u8 opcodes[8]; u8 preopcodes[2]; @@ -224,7 +224,7 @@ static void intel_spi_dump_regs(struct intel_spi *ispi) } dev_dbg(ispi->dev, "Using %cW sequencer for register access\n", - ispi->swseq ? 'S' : 'H'); + ispi->swseq_reg ? 'S' : 'H'); } /* Reads max INTEL_SPI_FIFO_SZ bytes from the device fifo */ @@ -297,7 +297,7 @@ static int intel_spi_init(struct intel_spi *ispi) ispi->pregs = ispi->base + BYT_PR; ispi->nregions = BYT_FREG_NUM; ispi->pr_num = BYT_PR_NUM; - ispi->swseq = true; + ispi->swseq_reg = true; if (writeable) { /* Disable write protection */ @@ -318,7 +318,7 @@ static int intel_spi_init(struct intel_spi *ispi) ispi->pregs = ispi->base + LPT_PR; ispi->nregions = LPT_FREG_NUM; ispi->pr_num = LPT_PR_NUM; - ispi->swseq = true; + ispi->swseq_reg = true; break; case INTEL_SPI_BXT: @@ -343,7 +343,7 @@ static int intel_spi_init(struct intel_spi *ispi) * sequencer. All other operations are supposed to be carried out * using software sequencer. */ - if (ispi->swseq) { + if (ispi->swseq_reg) { /* Disable #SMI generation from SW sequencer */ val = readl(ispi->sregs + SSFSTS_CTL); val &= ~SSFSTS_CTL_FSMIE; @@ -493,7 +493,7 @@ static int intel_spi_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) /* Address of the first chip */ writel(0, ispi->base + FADDR); - if (ispi->swseq) + if (ispi->swseq_reg) ret = intel_spi_sw_cycle(ispi, opcode, len, OPTYPE_READ_NO_ADDR); else @@ -529,7 +529,7 @@ static int intel_spi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) if (ret) return ret; - if (ispi->swseq) + if (ispi->swseq_reg) return intel_spi_sw_cycle(ispi, opcode, len, OPTYPE_WRITE_NO_ADDR); return intel_spi_hw_cycle(ispi, opcode, len); From patchwork Mon Sep 11 09:42:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 812292 X-Patchwork-Delegate: cyrille.pitchen@atmel.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=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="lxz6NT4x"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BW5MI5pt"; dkim-atps=neutral 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 3xrNXR3bKrz9s7G for ; Mon, 11 Sep 2017 19:53:11 +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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=mam5s1pkyCwRzV1jQX+7ZtDKfVtBfa0ylEokwM1ROJk=; b=lxz6NT4xT+JQOdlpbDuWEeZcUO igXuvahYDY/CpyiQIPYSUNGv5+rdTX9RJr+psuRRxV7dsv7fMxJiCe/osqNr5MMeHKzw2q/owDqaR Pp49xwXHv2SatYx3+feiU/uGQGi/p7CCJILUPJSN57BpVBZnulqSuF+G8/TzRXDiHkLaUD8RKoLcm jhiyPDR19WNXHN3d1lovCefBqZaAkSG2TMW+VxABN/dfUX01OFFxpyqpjxnp83I28qANUNXuBTjtb tNkuI9YVliesoxGkyGlE27lhuT1wGuSLZ2/THiLXjnNrPfKiIc5I8CvtqV5RRu6Ml+Hw5q7ibqD0A fWq51Z+g==; 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 1drLOs-000840-AR; Mon, 11 Sep 2017 09:53:06 +0000 Received: from mail-io0-x243.google.com ([2607:f8b0:4001:c06::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1drLAX-0006DN-6u for linux-mtd@lists.infradead.org; Mon, 11 Sep 2017 09:38:19 +0000 Received: by mail-io0-x243.google.com with SMTP id j141so4119570ioj.5 for ; Mon, 11 Sep 2017 02:37:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nO7tkNSnE4kDX2xNGYFdszsbJOrKUMxzGoXfU0C2iwQ=; b=BW5MI5ptNVZz9iBeeGmuT3p7WstCYN5NDrcwLDdI+tLGwUSmutnx1Z+YEp3nDcDhHt /8pLYWfOrKG8CVKssGzNGbyRQrEYIMjlu8B65QCR/oYydn55PcFqCu4RKW2wU4s2gYUk z/Rej+38UKsvUmai6ujpuVcEHqqUe4vbvrnmjkduwJDEzquJkKXdrv19JMJ5CysZLNIl XT+imJa/zp5gSGg2SNgdTTHOtjoUTLPDPGcIMd2Bt+IyFJeq6Yv0x7mLNy62ngovEu88 /SikzFIADhMeCF9gFfDf+6+EsMtEKQFW57mcXvkmLJ/4wr2RwV/E3K3vl4ZN8tBTXe2A dI7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nO7tkNSnE4kDX2xNGYFdszsbJOrKUMxzGoXfU0C2iwQ=; b=RoPFe7BiBEUa+ebUvyyeyE2E399cLJD6JU/4UkYq4qQONUsH+Nx/Prgf906Y5SbEaG iIB0eY6vFHPfwWn7zB4DjQzHt5lM0e/+9g0gFDHrfq6W0YsAprXUZa9dXIBCxowj71xU lcGUJQNCuuYpFPZPL1lsFKWJLD9fUizQ5vNOgJhb/jiqiPijazs752gi0YLOtuDGiiwS u0Rml6o2DsQrxIWRj/Z7z5KjNDQb8C1Nq2PzqG58qa0s21tOO8Ba7LLGHD63B61K1V9Z miypQ29+nqCHE4iB2ZVSAzwmgZ/fdLWinRP6JN4SZ/1fwvhCKA0GuVCd4eOJ/yV6Hyhb HWpA== X-Gm-Message-State: AHPjjUjEcQY2EIcqcF9parQWucFQ+1DheN3mQgF8GbXJd1007Zr0spne rQaUKQpqAYluCA== X-Google-Smtp-Source: AOwi7QAU+kDZHyhuAycUhYA2iua+PKPdFkBg0qSMNEctubwy82XwHuYUuxHNR121692L2k7TtbvA1g== X-Received: by 10.107.154.71 with SMTP id c68mr15252768ioe.95.1505122678578; Mon, 11 Sep 2017 02:37:58 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id s2sm4121069ioa.2.2017.09.11.02.37.56 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Sep 2017 02:37:57 -0700 (PDT) From: Bin Meng To: Mika Westerberg , Cyrille Pitchen , Marek Vasut , Boris Brezillon , Brian Norris , Richard Weinberger , David Woodhouse , linux-mtd , linux-kernel Subject: [PATCH v2 10/10] spi-nor: intel-spi: Fall back to use SW sequencer to erase Date: Mon, 11 Sep 2017 02:42:00 -0700 Message-Id: <1505122921-5534-11-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> References: <1505122921-5534-1-git-send-email-bmeng.cn@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170911_023817_403544_F1DC0528 X-CRM114-Status: GOOD ( 18.00 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2607:f8b0:4001:c06:0:0:0:243 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (bmeng.cn[at]gmail.com) -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.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: Stefan Roese MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org According to the datasheet, the HW sequencer has a predefined list of opcodes, with only the erase opcode being programmable in LVSCC and UVSCC registers. If these registers don't contain a valid erase opcode (eg: BIOS does not program it), erase cannot be done using the HW sequencer, even though the erase operation does not report any error, the flash remains not erased. If such register setting is detected, let's fall back to use the SW sequencer to erase instead. Signed-off-by: Bin Meng Acked-by: Mika Westerberg --- Changes in v2: - Fix typo of 'operatoin' drivers/mtd/spi-nor/intel-spi.c | 50 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c index 5e7a389..ef034d8 100644 --- a/drivers/mtd/spi-nor/intel-spi.c +++ b/drivers/mtd/spi-nor/intel-spi.c @@ -111,6 +111,13 @@ #define BXT_FREG_NUM 12 #define BXT_PR_NUM 6 +#define LVSCC 0xc4 +#define UVSCC 0xc8 +#define ERASE_OPCODE_SHIFT 8 +#define ERASE_OPCODE_MASK (0xff << ERASE_OPCODE_SHIFT) +#define ERASE_64K_OPCODE_SHIFT 16 +#define ERASE_64K_OPCODE_MASK (0xff << ERASE_OPCODE_SHIFT) + #define INTEL_SPI_TIMEOUT 5000 /* ms */ #define INTEL_SPI_FIFO_SZ 64 @@ -127,6 +134,7 @@ * @writeable: Is the chip writeable * @locked: Is SPI setting locked * @swseq_reg: Use SW sequencer in register reads/writes + * @swseq_erase: Use SW sequencer in erase operation * @erase_64k: 64k erase supported * @opcodes: Opcodes which are supported. This are programmed by BIOS * before it locks down the controller. @@ -144,6 +152,7 @@ struct intel_spi { bool writeable; bool locked; bool swseq_reg; + bool swseq_erase; bool erase_64k; u8 opcodes[8]; u8 preopcodes[2]; @@ -191,6 +200,9 @@ static void intel_spi_dump_regs(struct intel_spi *ispi) if (ispi->info->type == INTEL_SPI_BYT) dev_dbg(ispi->dev, "BCR=0x%08x\n", readl(ispi->base + BYT_BCR)); + dev_dbg(ispi->dev, "LVSCC=0x%08x\n", readl(ispi->base + LVSCC)); + dev_dbg(ispi->dev, "UVSCC=0x%08x\n", readl(ispi->base + UVSCC)); + dev_dbg(ispi->dev, "Protected regions:\n"); for (i = 0; i < ispi->pr_num; i++) { u32 base, limit; @@ -225,6 +237,8 @@ static void intel_spi_dump_regs(struct intel_spi *ispi) dev_dbg(ispi->dev, "Using %cW sequencer for register access\n", ispi->swseq_reg ? 'S' : 'H'); + dev_dbg(ispi->dev, "Using %cW sequencer for erase operation\n", + ispi->swseq_erase ? 'S' : 'H'); } /* Reads max INTEL_SPI_FIFO_SZ bytes from the device fifo */ @@ -288,7 +302,7 @@ static int intel_spi_wait_sw_busy(struct intel_spi *ispi) static int intel_spi_init(struct intel_spi *ispi) { - u32 opmenu0, opmenu1, val; + u32 opmenu0, opmenu1, lvscc, uvscc, val; int i; switch (ispi->info->type) { @@ -339,6 +353,24 @@ static int intel_spi_init(struct intel_spi *ispi) writel(val, ispi->base + HSFSTS_CTL); /* + * Determine whether erase operation should use HW or SW sequencer. + * + * The HW sequencer has a predefined list of opcodes, with only the + * erase opcode being programmable in LVSCC and UVSCC registers. + * If these registers don't contain a valid erase opcode, erase + * cannot be done using HW sequencer. + */ + lvscc = readl(ispi->base + LVSCC); + uvscc = readl(ispi->base + UVSCC); + if (!(lvscc & ERASE_OPCODE_MASK) || !(uvscc & ERASE_OPCODE_MASK)) + ispi->swseq_erase = true; + /* SPI controller on Intel BXT supports 64K erase opcode */ + if (ispi->info->type == INTEL_SPI_BXT && !ispi->swseq_erase) + if (!(lvscc & ERASE_64K_OPCODE_MASK) || + !(uvscc & ERASE_64K_OPCODE_MASK)) + ispi->erase_64k = false; + + /* * Some controllers can only do basic operations using hardware * sequencer. All other operations are supposed to be carried out * using software sequencer. @@ -665,6 +697,22 @@ static int intel_spi_erase(struct spi_nor *nor, loff_t offs) erase_size = SZ_4K; } + if (ispi->swseq_erase) { + while (len > 0) { + writel(offs, ispi->base + FADDR); + + ret = intel_spi_sw_cycle(ispi, nor->erase_opcode, + 0, OPTYPE_WRITE_WITH_ADDR); + if (ret) + return ret; + + offs += erase_size; + len -= erase_size; + } + + return 0; + } + while (len > 0) { writel(offs, ispi->base + FADDR);