[{"id":1780333,"web_url":"http://patchwork.ozlabs.org/comment/1780333/","msgid":"<20171005092249.103518f8@bbrezillon>","list_archive_url":null,"date":"2017-10-05T07:22:49","subject":"Re: [PATCH v4 4/8] mtd: nand: atmel: Avoid ECC errors when leaving\n\tbackup mode","submitter":{"id":63120,"url":"http://patchwork.ozlabs.org/api/people/63120/","name":"Boris Brezillon","email":"boris.brezillon@free-electrons.com"},"content":"On Thu, 28 Sep 2017 11:46:23 +0200\nRomain Izard <romain.izard.pro@gmail.com> wrote:\n\n> During backup mode, the contents of all registers will be cleared as the\n> SoC will be completely powered down. For a product that boots on NAND\n> Flash memory, the bootloader will obviously use the related controller\n> to read the Flash and correct any detected error in the memory, before\n> handling back control to the kernel's resuming entry point.\n> \n> But it does not clean the NAND controller registers after use and on its\n> side the kernel driver expects the error locator to be powered down and\n> in a clean state. Add a resume hook for the PMECC error locator, and\n> reset its registers.\n> \n> Signed-off-by: Romain Izard <romain.izard.pro@gmail.com>\n\nApplied.\n\nThanks,\n\nBoris\n\n> ---\n> Changes in v3:\n> * keep the PMECC disabled when not in use, and use atmel_pmecc_resume to\n>   reset the controller after the bootloader has left it enabled.\n> \n> Changes in v4:\n> * export atmel_pmecc_reset instead of atmel_pmecc_resume\n> * use the correct pointer in atmel_nand_controller_resume\n> \n>  drivers/mtd/nand/atmel/nand-controller.c |  3 +++\n>  drivers/mtd/nand/atmel/pmecc.c           | 17 +++++++++--------\n>  drivers/mtd/nand/atmel/pmecc.h           |  1 +\n>  3 files changed, 13 insertions(+), 8 deletions(-)\n> \n> diff --git a/drivers/mtd/nand/atmel/nand-controller.c b/drivers/mtd/nand/atmel/nand-controller.c\n> index f25eca79f4e5..8afcff9a66ea 100644\n> --- a/drivers/mtd/nand/atmel/nand-controller.c\n> +++ b/drivers/mtd/nand/atmel/nand-controller.c\n> @@ -2530,6 +2530,9 @@ static __maybe_unused int atmel_nand_controller_resume(struct device *dev)\n>  \tstruct atmel_nand_controller *nc = dev_get_drvdata(dev);\n>  \tstruct atmel_nand *nand;\n>  \n> +\tif (nc->pmecc)\n> +\t\tatmel_pmecc_reset(nc->pmecc);\n> +\n>  \tlist_for_each_entry(nand, &nc->chips, node) {\n>  \t\tint i;\n>  \n> diff --git a/drivers/mtd/nand/atmel/pmecc.c b/drivers/mtd/nand/atmel/pmecc.c\n> index 146af8218314..0a3f12141c45 100644\n> --- a/drivers/mtd/nand/atmel/pmecc.c\n> +++ b/drivers/mtd/nand/atmel/pmecc.c\n> @@ -765,6 +765,13 @@ void atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user,\n>  }\n>  EXPORT_SYMBOL_GPL(atmel_pmecc_get_generated_eccbytes);\n>  \n> +void atmel_pmecc_reset(struct atmel_pmecc *pmecc)\n> +{\n> +\twritel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL);\n> +\twritel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL);\n> +}\n> +EXPORT_SYMBOL_GPL(atmel_pmecc_reset);\n> +\n>  int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op)\n>  {\n>  \tstruct atmel_pmecc *pmecc = user->pmecc;\n> @@ -797,10 +804,7 @@ EXPORT_SYMBOL_GPL(atmel_pmecc_enable);\n>  \n>  void atmel_pmecc_disable(struct atmel_pmecc_user *user)\n>  {\n> -\tstruct atmel_pmecc *pmecc = user->pmecc;\n> -\n> -\twritel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL);\n> -\twritel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL);\n> +\tatmel_pmecc_reset(user->pmecc);\n>  \tmutex_unlock(&user->pmecc->lock);\n>  }\n>  EXPORT_SYMBOL_GPL(atmel_pmecc_disable);\n> @@ -855,10 +859,7 @@ static struct atmel_pmecc *atmel_pmecc_create(struct platform_device *pdev,\n>  \n>  \t/* Disable all interrupts before registering the PMECC handler. */\n>  \twritel(0xffffffff, pmecc->regs.base + ATMEL_PMECC_IDR);\n> -\n> -\t/* Reset the ECC engine */\n> -\twritel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL);\n> -\twritel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL);\n> +\tatmel_pmecc_reset(pmecc);\n>  \n>  \treturn pmecc;\n>  }\n> diff --git a/drivers/mtd/nand/atmel/pmecc.h b/drivers/mtd/nand/atmel/pmecc.h\n> index a8ddbfca2ea5..817e0dd9fd15 100644\n> --- a/drivers/mtd/nand/atmel/pmecc.h\n> +++ b/drivers/mtd/nand/atmel/pmecc.h\n> @@ -61,6 +61,7 @@ atmel_pmecc_create_user(struct atmel_pmecc *pmecc,\n>  \t\t\tstruct atmel_pmecc_user_req *req);\n>  void atmel_pmecc_destroy_user(struct atmel_pmecc_user *user);\n>  \n> +void atmel_pmecc_reset(struct atmel_pmecc *pmecc);\n>  int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op);\n>  void atmel_pmecc_disable(struct atmel_pmecc_user *user);\n>  int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user);","headers":{"Return-Path":"<linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org; spf=none (mailfrom)\n\tsmtp.mailfrom=lists.infradead.org (client-ip=65.50.211.133;\n\thelo=bombadil.infradead.org;\n\tenvelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=lists.infradead.org\n\theader.i=@lists.infradead.org header.b=\"o+Invvyz\"; \n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=infradead.org header.i=@infradead.org\n\theader.b=\"FsMwNX8a\"; dkim-atps=neutral"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n\t[65.50.211.133])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3y744Z19nYz9t2m\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu,  5 Oct 2017 18:23:26 +1100 (AEDT)","from localhost ([127.0.0.1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux))\n\tid 1e00V3-0000kU-3a; Thu, 05 Oct 2017 07:23:17 +0000","from merlin.infradead.org ([2001:8b0:10b:1231::1])\n\tby bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux))\n\tid 1e00V0-0000jJ-TX\n\tfor linux-mtd@bombadil.infradead.org; Thu, 05 Oct 2017 07:23:15 +0000","from mail.free-electrons.com ([62.4.15.54])\n\tby merlin.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux))\n\tid 1e00Ux-0008IE-V9\n\tfor linux-mtd@lists.infradead.org; Thu, 05 Oct 2017 07:23:13 +0000","by mail.free-electrons.com (Postfix, from userid 110)\n\tid BB19820961; Thu,  5 Oct 2017 09:22:49 +0200 (CEST)","from bbrezillon (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr\n\t[90.63.216.87])\n\tby mail.free-electrons.com (Postfix) with ESMTPSA id 331A82095E;\n\tThu,  5 Oct 2017 09:22:49 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20170209; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=3su3khLEumyosyN1oWLnlmMbz/MdiA3tbr9A2wLRIhE=;\n\tb=o+InvvyzNCguIQ\n\tuFbLIVPYuyLGIdOh4MqKt70D4sjk8JoG/ij4BdOFKzeDoUgWsK8rKuSM7KwLOpu/SodsD2+QXjEtq\n\tdFH7aZUYdPxUMXdTX5X6osbT2i0XMg++0nRUfG3F39/3JTirKLc6GmEETS9WhrSR0Ro3piaCPMTpj\n\t41dgj5s8cxD1VHpG5xGMIverErAaINghzcZaNcRsyoe00tnmetM+ECiDUjVXAFHBL2TiLbZhaEGVE\n\tOZF+7VdfY8dKbSz8ggS++Rvvq3wtScb1tb/7+zxe/VrTO/q5KTO4utCfblgCoAavJkGZGcVrgdTh4\n\tM/2Jas468/9dSHO2EeiA==;","v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=infradead.org; s=merlin.20170209;\n\th=Content-Transfer-Encoding:Content-Type:\n\tMIME-Version:References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Sender\n\t:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:\n\tResent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:\n\tList-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=xLBWsfYr8K8GHPNku/pY6bmKgSIVfJp3eVlGiMrMVqA=;\n\tb=FsMwNX8aw1xzEr07TnTZo8HXqk\n\tBWG1UV9qUJOcj2xd63haLvzY6yv1bVnP43s9QmXRPW/3+jal088vc7GIdFtSyYay7lZxH3AMUfyoY\n\tfhc8ljezbZGp+J/LRrhzxtfX5q3Mjb+aIuuKERLeGMsBb/b6Q4zlvB2Xqnc5pMEyH4T1h3d28JmWl\n\tLqgwIAe/sCbhIZK1Y+ufFO/zVSsEWYqNn2LzEoWI0mk4PICOSBKELw46c/6AN+gtjVpmBcWrXVLN2\n\tjl7gyf3oXCSwECUwVj7sr2f8XnWfP0eoiCK+ARtM/bRFX8wsBZjOkYZMIqTGIUnemOsUeY8iiuHoY\n\tpksKulDQ==;"],"X-Spam-Checker-Version":"SpamAssassin 3.4.0 (2014-02-07) on\n\tmail.free-electrons.com","X-Spam-Level":"","X-Spam-Status":"No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT\n\tshortcircuit=ham autolearn=disabled version=3.4.0","Date":"Thu, 5 Oct 2017 09:22:49 +0200","From":"Boris Brezillon <boris.brezillon@free-electrons.com>","To":"Romain Izard <romain.izard.pro@gmail.com>","Subject":"Re: [PATCH v4 4/8] mtd: nand: atmel: Avoid ECC errors when leaving\n\tbackup mode","Message-ID":"<20171005092249.103518f8@bbrezillon>","In-Reply-To":"<20170928094627.31017-5-romain.izard.pro@gmail.com>","References":"<20170928094627.31017-1-romain.izard.pro@gmail.com>\n\t<20170928094627.31017-5-romain.izard.pro@gmail.com>","X-Mailer":"Claws Mail 3.14.1 (GTK+ 2.24.31; x86_64-pc-linux-gnu)","MIME-Version":"1.0","X-Spam-Note":"CRM114 invocation failed","X-Spam-Score":"-1.9 (-)","X-Spam-Report":"SpamAssassin version 3.4.1 on merlin.infradead.org summary:\n\tContent analysis details:   (-1.9 points)\n\tpts rule name              description\n\t---- ----------------------\n\t--------------------------------------------------\n\t-0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay\n\tdomain\n\t-0.0 SPF_PASS               SPF: sender matches SPF record\n\t-1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n\t[score: 0.0000]","X-BeenThere":"linux-mtd@lists.infradead.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"Linux MTD discussion mailing list <linux-mtd.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/linux-mtd/>","List-Post":"<mailto:linux-mtd@lists.infradead.org>","List-Help":"<mailto:linux-mtd-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=subscribe>","Cc":"Michael Turquette <mturquette@baylibre.com>, linux-kernel@vger.kernel.org,\n\tThierry Reding <thierry.reding@gmail.com>,\n\tAlexandre Belloni <alexandre.belloni@free-electrons.com>,\n\tLee Jones <lee.jones@linaro.org>, linux-clk@vger.kernel.org,\n\tRichard Weinberger <richard@nod.at>,\n\tMarek Vasut <marek.vasut@gmail.com>, \n\tLudovic Desroches <ludovic.desroches@microchip.com>,\n\tAlan Stern <stern@rowland.harvard.edu>, linux-serial@vger.kernel.org, \n\tJiri Slaby <jslaby@suse.com>, Josh Wu <rainyfeeling@outlook.com>,\n\tlinux-pwm@vger.kernel.org, Richard Genoud <richard.genoud@gmail.com>, \n\tGreg Kroah-Hartman <gregkh@linuxfoundation.org>,\n\tlinux-usb@vger.kernel.org, Stephen Boyd <sboyd@codeaurora.org>,\n\tNicolas Ferre <nicolas.ferre@microchip.com>,\n\tWenyou Yang <wenyou.yang@atmel.com>,\n\tCyrille Pitchen <cyrille.pitchen@wedev4u.fr>,\n\tlinux-mtd@lists.infradead.org, \n\tBrian Norris <computersforpeace@gmail.com>,\n\tDavid Woodhouse <dwmw2@infradead.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"\"linux-mtd\" <linux-mtd-bounces@lists.infradead.org>","Errors-To":"linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}}]