Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/819050/?format=api
{ "id": 819050, "url": "http://patchwork.ozlabs.org/api/patches/819050/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pwm/patch/20170927083555.16580-5-romain.izard.pro@gmail.com/", "project": { "id": 38, "url": "http://patchwork.ozlabs.org/api/projects/38/?format=api", "name": "Linux PWM development", "link_name": "linux-pwm", "list_id": "linux-pwm.vger.kernel.org", "list_email": "linux-pwm@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170927083555.16580-5-romain.izard.pro@gmail.com>", "list_archive_url": null, "date": "2017-09-27T08:35:51", "name": "[v3,4/8] mtd: nand: atmel: Avoid ECC errors when leaving backup mode", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "69c0145aba6342a154e8dcfa7654629cd7cc2ca6", "submitter": { "id": 8236, "url": "http://patchwork.ozlabs.org/api/people/8236/?format=api", "name": "Romain Izard", "email": "romain.izard.pro@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pwm/patch/20170927083555.16580-5-romain.izard.pro@gmail.com/mbox/", "series": [ { "id": 5310, "url": "http://patchwork.ozlabs.org/api/series/5310/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pwm/list/?series=5310", "date": "2017-09-27T08:35:48", "name": "Various patches for SAMA5D2 backup mode", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/5310/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/819050/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/819050/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<linux-pwm-owner@vger.kernel.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=linux-pwm-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"jbfL4Wdp\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y2B7c152Cz9t4Z\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 27 Sep 2017 18:39:08 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752698AbdI0IiS (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tWed, 27 Sep 2017 04:38:18 -0400", "from mail-wm0-f68.google.com ([74.125.82.68]:49704 \"EHLO\n\tmail-wm0-f68.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1752491AbdI0IgS (ORCPT\n\t<rfc822; linux-pwm@vger.kernel.org>); Wed, 27 Sep 2017 04:36:18 -0400", "by mail-wm0-f68.google.com with SMTP id r74so15372103wme.4;\n\tWed, 27 Sep 2017 01:36:16 -0700 (PDT)", "from localhost.localdomain (146.187.3.109.rev.sfr.net.\n\t[109.3.187.146]) by smtp.gmail.com with ESMTPSA id\n\tr6sm9699900wrg.40.2017.09.27.01.36.14\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tWed, 27 Sep 2017 01:36:15 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=YbTyumyy6P4kge3veVl/A0z9dzATwB6TcaPmHuC1BkA=;\n\tb=jbfL4WdpgAFTGIUHTMUkozrT8YPYvH/Qe3M/a3Z1dN3sK3+xHrTKrq1L+GrmSWLvEz\n\tIEQ/6/+PQFd3yvhgfCLGF/CMXzebyu+kmOH7AjhZ252ReTObm0W8XnJusQbzpJwFZceK\n\tjWVRYuoXPb7F2MnBEIrJD1p0FfRjDaqUWEdPBiFK83vlydVVnh4R94e9klHsbB2n+TZW\n\tOaiN+0be9kWZuaRTz5HEdnqMcxpapFAqWeTl8JWbqzWLO9IHakXvH9vJEVFowoa3f4IR\n\tXUvT89QoKjeMa/kFSevm66QOsXZ9yfk6pLQTw77vCO4Y4C8sRqMLdcXU3EDFoKxoKV25\n\tIJPw==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=YbTyumyy6P4kge3veVl/A0z9dzATwB6TcaPmHuC1BkA=;\n\tb=jCdg+BaiF1LWI1DYXT9AtVgYq3SZZ3Ob0YH0sDVOfGg4aFyIseOzldQR+xEfzHunBg\n\tBIRPSz1EcTO3e5ZMPeYMJMUbEkZa1BbNr64GPniZhZDWZrp2xHmXqTwDUfCe5TcccpoJ\n\tH4dP1ivYizYHAOlXLz2a+/Urlyls5cyWmg7lvS8dravNdkRpRqKLXTJQbyodXSbY9L3l\n\tpN82G8PN9AMQ5Wiz2b2VfvHn85CwJaja6wSMTBaKFrQkHBLYcbc6FvNzGWadyU7L+zvv\n\t96t9D9sqMEZZndeOyZg+jpeSxXaoAYYntNMShsRzNavb+EwLHUNdHJbXTqNP7J1JVDmO\n\tQelw==", "X-Gm-Message-State": "AHPjjUi5al8DGWexOEQ9V3h71klCrxyAfYZoZT5ocVSSjYYptdT1mQp1\n\tbADRUJgwHMr7MfEX/1VnhP0=", "X-Google-Smtp-Source": "AOwi7QCDvaTM95g9jizq059H+Q/H/WJwHn5cqLxwodS6V9OvQfJiuMBrYNYZfbKgx8so/m+IqdnIRw==", "X-Received": "by 10.28.140.18 with SMTP id o18mr863571wmd.145.1506501376157;\n\tWed, 27 Sep 2017 01:36:16 -0700 (PDT)", "From": "Romain Izard <romain.izard.pro@gmail.com>", "To": "Boris Brezillon <boris.brezillon@free-electrons.com>,\n\tMichael Turquette <mturquette@baylibre.com>,\n\tStephen Boyd <sboyd@codeaurora.org>, Lee Jones <lee.jones@linaro.org>,\n\tWenyou Yang <wenyou.yang@atmel.com>, Josh Wu <rainyfeeling@outlook.com>,\n\tRichard Weinberger <richard@nod.at>,\n\tDavid Woodhouse <dwmw2@infradead.org>,\n\tBrian Norris <computersforpeace@gmail.com>,\n\tMarek Vasut <marek.vasut@gmail.com>,\n\tCyrille Pitchen <cyrille.pitchen@wedev4u.fr>,\n\tThierry Reding <thierry.reding@gmail.com>,\n\tRichard Genoud <richard.genoud@gmail.com>,\n\tGreg Kroah-Hartman <gregkh@linuxfoundation.org>,\n\tJiri Slaby <jslaby@suse.com>, Alan Stern <stern@rowland.harvard.edu>,\n\tLudovic Desroches <ludovic.desroches@microchip.com>,\n\tNicolas Ferre <nicolas.ferre@microchip.com>,\n\tAlexandre Belloni <alexandre.belloni@free-electrons.com>", "Cc": "linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tlinux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org,\n\tlinux-serial@vger.kernel.org, linux-usb@vger.kernel.org,\n\tRomain Izard <romain.izard.pro@gmail.com>", "Subject": "[PATCH v3 4/8] mtd: nand: atmel: Avoid ECC errors when leaving\n\tbackup mode", "Date": "Wed, 27 Sep 2017 10:35:51 +0200", "Message-Id": "<20170927083555.16580-5-romain.izard.pro@gmail.com>", "X-Mailer": "git-send-email 2.11.0", "In-Reply-To": "<20170927083555.16580-1-romain.izard.pro@gmail.com>", "References": "<20170927083555.16580-1-romain.izard.pro@gmail.com>", "Sender": "linux-pwm-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<linux-pwm.vger.kernel.org>", "X-Mailing-List": "linux-pwm@vger.kernel.org" }, "content": "During backup mode, the contents of all registers will be cleared as the\nSoC will be completely powered down. For a product that boots on NAND\nFlash memory, the bootloader will obviously use the related controller\nto read the Flash and correct any detected error in the memory, before\nhandling back control to the kernel's resuming entry point.\n\nBut it does not clean the NAND controller registers after use and on its\nside the kernel driver expects the error locator to be powered down and\nin a clean state. Add a resume hook for the PMECC error locator, and\nreset its registers.\n\nSigned-off-by: Romain Izard <romain.izard.pro@gmail.com>\n---\nChange 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 drivers/mtd/nand/atmel/nand-controller.c | 3 +++\n drivers/mtd/nand/atmel/pmecc.c | 22 ++++++++++++++--------\n drivers/mtd/nand/atmel/pmecc.h | 1 +\n 3 files changed, 18 insertions(+), 8 deletions(-)", "diff": "diff --git a/drivers/mtd/nand/atmel/nand-controller.c b/drivers/mtd/nand/atmel/nand-controller.c\nindex f25eca79f4e5..86c2199380c2 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 (nand->pmecc)\n+\t\tatmel_pmecc_resume(nand->pmecc);\n+\n \tlist_for_each_entry(nand, &nc->chips, node) {\n \t\tint i;\n \ndiff --git a/drivers/mtd/nand/atmel/pmecc.c b/drivers/mtd/nand/atmel/pmecc.c\nindex 146af8218314..ff09c0f25dd4 100644\n--- a/drivers/mtd/nand/atmel/pmecc.c\n+++ b/drivers/mtd/nand/atmel/pmecc.c\n@@ -765,6 +765,12 @@ 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+\n int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op)\n {\n \tstruct atmel_pmecc *pmecc = user->pmecc;\n@@ -797,14 +803,17 @@ 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 \n+void atmel_pmecc_resume(struct atmel_pmecc_user *user)\n+{\n+\tatmel_pmecc_reset(user->pmecc);\n+}\n+EXPORT_SYMBOL_GPL(atmel_pmecc_resume);\n+\n int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user)\n {\n \tstruct atmel_pmecc *pmecc = user->pmecc;\n@@ -855,10 +864,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 }\ndiff --git a/drivers/mtd/nand/atmel/pmecc.h b/drivers/mtd/nand/atmel/pmecc.h\nindex a8ddbfca2ea5..488a90f1965d 100644\n--- a/drivers/mtd/nand/atmel/pmecc.h\n+++ b/drivers/mtd/nand/atmel/pmecc.h\n@@ -63,6 +63,7 @@ void atmel_pmecc_destroy_user(struct atmel_pmecc_user *user);\n \n int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op);\n void atmel_pmecc_disable(struct atmel_pmecc_user *user);\n+void atmel_pmecc_resume(struct atmel_pmecc_user *user);\n int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user);\n int atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector,\n \t\t\t void *data, void *ecc);\n", "prefixes": [ "v3", "4/8" ] }