From patchwork Fri Sep 8 15:35:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811656 X-Patchwork-Delegate: boris.brezillon@free-electrons.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="Da3gyj6z"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="SYkaLzzz"; 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 3xphPr0jN3z9t5q for ; Sat, 9 Sep 2017 01:41:36 +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=mb9niXxDvucXZK6J4fMkQbtGPzphSIX8W7Ss9xzNEmY=; b=Da3gyj6z7IAP+yKi4PrFQdOzHd UQch3P6IyCxATeSVPeDbs6apfSNCUrNGJRA4s5MyS6s4VwHlquHR5Uttvxo5kcmWXbaugaBL4tetL ZC0ApULUa+bG5q8ImIAq04mOCBs8ljpT+fw03ufDe9ULzkV8g+BNfluG36qL0Qv1A+VPOj8N1WwGu Py/CIIJrpJzs8niBRW/GZ70IjzWTa8P87RyKHn0ZNX15iXmuIyzk0zcnyX7AkUHR+lrlZzuETLOFd iAAEIB9L+DXNNQhc+edzTzetNrIIVR30fv3v/g3OQxo4sKdz1OSfK6tfzzNnabQkwlvsCBVPBmXVk MZYzaUVQ==; 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 1dqLPN-00028G-4H; Fri, 08 Sep 2017 15:41:29 +0000 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dqLKl-00067a-FH; Fri, 08 Sep 2017 15:36:53 +0000 Received: by mail-wm0-x243.google.com with SMTP id p17so1980852wmd.3; Fri, 08 Sep 2017 08:36:21 -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=owFYxnK787Ud9TRMMs531N3In48svKrtFKwYj7nv/wc=; b=SYkaLzzzj42t5HwnrN5eSgC16ZyBITDEfWmxnYfpJYXZSyoBcKaZ5d34/7pCC4hkVz +dvB8S4lUzjTvaUjo28oZBqpr5A3Xg8hjojPadq+qaP/XcVYYkGxQzd8gHnLhXy2muId Sks6k6SyOTRP/kQKKcc8y2E8Si+F7QFjfB6Klr3knUG/jahcCY4wD6CBX9Di1kjihyxD OaKBH0rfAQmbyp+JJS4PJ4nq0ZyGj/rJxBZn8PWWiZJ3LNnIIJI/djy0YXofMCg+K8oE QF/4ez+ia9TwrFgPpkAE4EBE7GO1U/xH1BqMaAWiAqcc1UP/7geQ+AyTa+cRoWGGjsFC wvrw== 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=owFYxnK787Ud9TRMMs531N3In48svKrtFKwYj7nv/wc=; b=eUZTnwW24eHtNQ2i+7bZwI4Vjl572AJYh3FBn8klQdw6RJimuTk9gI3fy+naNrNtWZ K8W7GATb6bB0TlvkVe2iChdbf7WcqQBSSqXVinWFIYKjeNM8xYLjWEh1gHXamOWbOEd+ Ljd7rciSARWp3DAyXT9OUvho4h3rLaOYmM76rMBDMzGIgpgTDhx/66gnpVrD+ON877JA GqDMXVpJUoLjQsQCVRTwxD6WVwxbfuGerGu4NPGqaJlDGLxcSR0e9wKlqD3BHPBOwTfR /1LpPWPWi7CYldRF/Zj5NMDscKMAMaSGADaLgGjH8QWwiO6XiR8CYt2FJ3npXg+2PNzz TPiQ== X-Gm-Message-State: AHPjjUhlhUp/aSDAGfxRxnKh0nSBYEiCKhZqmRtBa7vjQFH9hMUI5iQ6 xbH/yBjDjS6HUQ== X-Google-Smtp-Source: AOwi7QCmB90PGajvrxgyno2VImub4kajbKyF2GWBVPatSuwFadgLbD+aw60VWHb+Sa34/c73B1k9+g== X-Received: by 10.28.136.11 with SMTP id k11mr97555wmd.133.1504884980591; Fri, 08 Sep 2017 08:36:20 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:20 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Subject: [PATCH v1 04/10] mtd: nand: atmel: Avoid ECC errors when leaving backup mode Date: Fri, 8 Sep 2017 17:35:58 +0200 Message-Id: <20170908153604.28383-5-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170908_083644_282884_092D017F X-CRM114-Status: GOOD ( 14.30 ) 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 [2a00:1450:400c:c09: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 (romain.izard.pro[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: linux-pwm@vger.kernel.org, linux-iio@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-serial@vger.kernel.org, Romain Izard , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org During backup mode, the contents of all registers will be cleared as the SoC will be completely powered down. For a product that boots on NAND Flash memory, the bootloader will obviously use the related controller to read the Flash and correct any detected error in the memory, before handling back control to the kernel's resuming entry point. In normal devices, it is up to the driver's suspend/resume code to restore the registers in a valid state. But the PMECC is not a regular device in the driver model when used with the legacy device tree binding for the Atmel NAND controller, and suspend/resume code is not called. As in my case the bootloader leaves the PMECC controller in a programmed state, and the controller is only reset at boot or after a NAND access, the first NAND Flash access with the Atmel controller will report uncorrectable ECC errors. To avoid this, systematically reset the PMECC controller before using it. Signed-off-by: Romain Izard --- drivers/mtd/nand/atmel/pmecc.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/nand/atmel/pmecc.c b/drivers/mtd/nand/atmel/pmecc.c index 8c210a5776bc..8d1208f38025 100644 --- a/drivers/mtd/nand/atmel/pmecc.c +++ b/drivers/mtd/nand/atmel/pmecc.c @@ -777,6 +777,9 @@ int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op) mutex_lock(&user->pmecc->lock); + writel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL); + writel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); + cfg = user->cache.cfg; if (op == NAND_ECC_WRITE) cfg |= PMECC_CFG_WRITE_OP; @@ -797,10 +800,6 @@ EXPORT_SYMBOL_GPL(atmel_pmecc_enable); void atmel_pmecc_disable(struct atmel_pmecc_user *user) { - struct atmel_pmecc *pmecc = user->pmecc; - - writel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL); - writel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); mutex_unlock(&user->pmecc->lock); } EXPORT_SYMBOL_GPL(atmel_pmecc_disable); @@ -856,10 +855,6 @@ static struct atmel_pmecc *atmel_pmecc_create(struct platform_device *pdev, /* Disable all interrupts before registering the PMECC handler. */ writel(0xffffffff, pmecc->regs.base + ATMEL_PMECC_IDR); - /* Reset the ECC engine */ - writel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL); - writel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); - return pmecc; }