Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/819476/?format=api
{ "id": 819476, "url": "http://patchwork.ozlabs.org/api/patches/819476/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pwm/patch/20170928094627.31017-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": "<20170928094627.31017-5-romain.izard.pro@gmail.com>", "list_archive_url": null, "date": "2017-09-28T09:46:23", "name": "[v4,4/8] mtd: nand: atmel: Avoid ECC errors when leaving backup mode", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "5bf226fc12dd3a70b05a306fde8bdd02a6d2427b", "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/20170928094627.31017-5-romain.izard.pro@gmail.com/mbox/", "series": [ { "id": 5525, "url": "http://patchwork.ozlabs.org/api/series/5525/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pwm/list/?series=5525", "date": "2017-09-28T09:46:20", "name": "Various patches for SAMA5D2 backup mode", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/5525/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/819476/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/819476/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=\"VCp6Y1HF\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y2qcr1ZFjz9t3v\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 28 Sep 2017 19:48:12 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752577AbdI1Jr7 (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tThu, 28 Sep 2017 05:47:59 -0400", "from mail-wm0-f68.google.com ([74.125.82.68]:48996 \"EHLO\n\tmail-wm0-f68.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1752691AbdI1Jqq (ORCPT\n\t<rfc822; linux-pwm@vger.kernel.org>); Thu, 28 Sep 2017 05:46:46 -0400", "by mail-wm0-f68.google.com with SMTP id m127so1045454wmm.3;\n\tThu, 28 Sep 2017 02:46:44 -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\tz10sm3272395wre.6.2017.09.28.02.46.42\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 28 Sep 2017 02:46:43 -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=ekmUElve1eO9lFnfDY02U3uv6BFDIO3z+pfaU9Ayz0M=;\n\tb=VCp6Y1HFYfdPv1tkjLkFoDDbeVhR+pDtkstWO2bmtRPSGk1sI6w3x3YrFvtcmObHzY\n\t6z4mHrE544OGrIsykpXnM3yNf3+13VySm17/cQTZJN8BJ9TfVWRMz37Z5V4j0tPL773d\n\tBesKG7JEqjf2ZlOxKiWW040lelS1aNIrsYSQWUST4cQYGWjv3HbP+QD8qpoTiZUuV05R\n\t0AB1JMWRgUoOVojqVOKcm3zYNDX7VvNHCADitzVszcBCTp8RIGPpr82Kmpi86u9qJGQn\n\t0HypKCfJ5zQb8vCrSa5zk+nJPQvrBAGACWGjxngWsd9yWQbJneIHhfUmh1pt0HYl8ltz\n\trZMA==", "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=ekmUElve1eO9lFnfDY02U3uv6BFDIO3z+pfaU9Ayz0M=;\n\tb=fD6284yMGOv0GQPkf6Suuj43/cgOdxrMhv1ZRzvoE66LTuAQrrHDbI/4zNhVl3wt/7\n\t517pChrJveYYUrzwKTmLGJeUqVOuIyOgeRwCAqAFQgovneJ0TPtXCgA5PVKjfeikie6B\n\tFFEgprXE65VO/d2SizpRhdVkpIMpjRRpLkenO0taTETOVvU5L9PDSpwqJIoW7WldgKnJ\n\tx/LfSl2WJYtq8Uggjx1w5ouC+92PUhVMEwRSkScv6RNimqSMJK9RTmMQCe50/+UjHSfV\n\tgwMaojkUWGNsJF1NfoJeyWvz44ldWvbEp0cVAhLMbTothGAXIFxDW6UB6RPEs16gyj5T\n\tJ/6g==", "X-Gm-Message-State": "AMCzsaUVlrEYL9l3cx2Ms804W2SRzMW/Gs5QUvjqJFMFcwxP4v9pXtAS\n\txOvjFQ9nGDJJszvTq7QjlgM=", "X-Google-Smtp-Source": "AOwi7QDNJz5hgGMatKKtMkVtKfrygnvWxSRzoM0OykizAp6/p8faG93WHnSN66Dq+U5Y/AcZlRzZIg==", "X-Received": "by 10.28.17.79 with SMTP id 76mr520386wmr.74.1506592003906;\n\tThu, 28 Sep 2017 02:46:43 -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 v4 4/8] mtd: nand: atmel: Avoid ECC errors when leaving\n\tbackup mode", "Date": "Thu, 28 Sep 2017 11:46:23 +0200", "Message-Id": "<20170928094627.31017-5-romain.izard.pro@gmail.com>", "X-Mailer": "git-send-email 2.11.0", "In-Reply-To": "<20170928094627.31017-1-romain.izard.pro@gmail.com>", "References": "<20170928094627.31017-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---\nChanges 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\nChanges 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(-)", "diff": "diff --git a/drivers/mtd/nand/atmel/nand-controller.c b/drivers/mtd/nand/atmel/nand-controller.c\nindex 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 \ndiff --git a/drivers/mtd/nand/atmel/pmecc.c b/drivers/mtd/nand/atmel/pmecc.c\nindex 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 }\ndiff --git a/drivers/mtd/nand/atmel/pmecc.h b/drivers/mtd/nand/atmel/pmecc.h\nindex 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);\n", "prefixes": [ "v4", "4/8" ] }