From patchwork Wed Dec 2 22:47:40 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Han Xu X-Patchwork-Id: 551972 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 6807C1402DE for ; Thu, 3 Dec 2015 10:03:07 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1a4GOS-0000km-1i; Wed, 02 Dec 2015 23:01:00 +0000 Received: from mail-by2on0137.outbound.protection.outlook.com ([207.46.100.137] helo=na01-by2-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1a4GOA-0008MY-K4 for linux-mtd@lists.infradead.org; Wed, 02 Dec 2015 23:00:45 +0000 Received: from CH1PR03CA009.namprd03.prod.outlook.com (10.255.156.154) by CY1PR03MB1438.namprd03.prod.outlook.com (10.163.17.148) with Microsoft SMTP Server (TLS) id 15.1.331.20; Wed, 2 Dec 2015 23:00:18 +0000 Received: from BL2FFO11FD016.protection.gbl (10.255.156.132) by CH1PR03CA009.outlook.office365.com (10.255.156.154) with Microsoft SMTP Server (TLS) id 15.1.331.20 via Frontend Transport; Wed, 2 Dec 2015 23:00:18 +0000 Authentication-Results: spf=permerror (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=freescale.com; Received-SPF: PermError (protection.outlook.com: domain of freescale.com used an invalid SPF mechanism) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD016.mail.protection.outlook.com (10.173.160.224) with Microsoft SMTP Server (TLS) id 15.1.337.8 via Frontend Transport; Wed, 2 Dec 2015 23:00:17 +0000 Received: from chopperman.am.freescale.net (chopperman.am.freescale.net [10.81.16.64]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id tB2N0EQO025347; Wed, 2 Dec 2015 16:00:16 -0700 From: Han Xu To: Subject: [PATCH v8 1/7] mtd: nand: gpmi: add gpmi dsm supend/resume support Date: Wed, 2 Dec 2015 16:47:40 -0600 Message-ID: <1449096466-18064-2-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1449096466-18064-1-git-send-email-b45815@freescale.com> References: <1449096466-18064-1-git-send-email-b45815@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD016; 1:sP+nbwPvQh2EKffxNMNLIfMsI48mekZ6s+F9Ew4yuJ1Mvah3or/1OVBGOEEXLKYK80PUXWBpzAojkjOxPr7vZ/hmymBxV3S1jmBjfOyxh+/7dPf1xagjXnmuW2KLLTilaX+nJX2GKwmbsnbTX+RnExlEy2N3fnNdJAEbeXbZAYKs4aAUc9fc7xx3ayd+Nomd3NbS+y+vu0v/42qC6RZLOCRR9XL0U7SMaHqCvJxDgvIJiSf2K62GN5lR5Z8IxfM77LNsgu6Rt2Hj9WMgTziPt5Unfto2cp1TVOkWhbSbLdS94TYKHBGUlybxQvcFSaVr8HTrWMOQ9zZcD2mtN5O2iCSA64+ypBgHm0AjepP1ja87TnEQxldXfR1rJp9hLOuUilyI1q4C+EaP15fonazbmw2YUEmk/EgRk845AjsJf25dDslpmYtrXo1orwGroDqR X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(448002)(199003)(189002)(1220700001)(110136002)(81156007)(47776003)(6806005)(1096002)(92566002)(104016004)(5008740100001)(5001960100002)(97736004)(586003)(50986999)(11100500001)(189998001)(19580395003)(5003940100001)(19580405001)(48376002)(76176999)(87936001)(50226001)(50466002)(85326001)(2950100001)(229853001)(77096005)(33646002)(106466001)(36756003)(2351001)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:CY1PR03MB1438; H:tx30smr01.am.freescale.net; FPR:; SPF:PermError; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1438; 2:RWFxVHyjh/iEnxbU4v2sU/2sBTcP0yw14Gx9oMTMubovZcPypbr67p2khDeLjOIuqe75xAQOQJgX+8sPDKpa+mp+eaJ9aWRBfPnuVIKImQiOYD9ijB1rsZiTUCllB7LO5dt4P/6I05hnYQgI5lNbsQ==; 3:7sGgy1aZC3My3naFw/1H1xjPww8zQFZ0StAInO5argjJbFNvySi+TVPbzpSIF7tVbwKyaZx+XhCEjM0lUQL5nFAPxR7PnR+0W0+Vkd1wjdrDNkniHbhTmiTGeHsogJLpqRwaItAABVtQ7y+RE1dxq7KpOH1YdhufBFsd+SNBi9w/QW/3OqEFe4NtslYrCb/Epzer1rIhUzx0TMl+cyXeyE1EXzjJwiQvmimx9GT1w2Q=; 25:++dwrxSTDs0Zz5KkzTnqk1g2FbiIYdZVoLr3JTyzeVaDQJgNdltuIzIW2ChzpOBil7R1x/iHDJNQ0qsIRRdYoihOrowlDLouOV2xM7XP+WOjrfCSutXR8Ejs7l+fiKlH1Rbiwh2z8ZLGONnHz0bTSswtB0HWGKrJwH3cFw8I1L98OZSYNCXSgrG34AJeerskMpeSSxlI8Mx2N2FEYv459P9eHAecT1YAnwQiXxFWbIKKf5OlGcH5ITtLohgEh1wT9vgAUxoGvU3Khzl6723HPg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1438; X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1438; 20:mYOqhlGD0A5UkD1P621h5FaPE2+NV/dYPcbR8rNCJb+VF9A9xG+4LDC60wSdimqynxLEfb5FLXq/tRdyeP2d+sx5ca+89hO7e1CI3wm7DC+8WNf9rXMFf6fJRNcvc+xmqqWou8i/E9xbJBGIN+rwJM/N67a7hiY11KocmeNybqYOBnzQl2vhPn8i2UKW27Xe+xqdpnj6RtyKXvMBDc0A+3x11jcuK1H6iqUs/Ds5z4TTzF1ktkB9WO/MsYSNoa3csTTWEQoRvRIqtajJ0domL8bvb6vah7BXletJjnKj03rgxRcBg0l76FkG6dgQizm7cINSG5bRfEcdz8xDxLrbfLdXjc+rqDHWfx46U4yYb4s=; 4:qJWV70loIucNK+fZlst/Jg0Zbke8EL1+TZml3WhSXdyQBGLtMhUuI6fzWTNYjMgArCj3D9p1ANtUiihVM3sKEuTCg6lNrLwComBKBaUoqBPsvq+sBc5uDUuQjzyWQSMjFq8igPLISXlBmL5VDYOc+gmjtU9+wAVsRsrfxtWS2yLikmJfbFXi7BrUW0J5JusHhAAyQ+H6R3U91FKmrb2Wf/pAioRtQBLGecLvOQVyY/YywyIzE9jklfaU0gzD1yyj4/qUGMFkXj4qetPz47C4UrAeQTgMNYuXgsXphcxz5M4JWWaG3JWdUxxcH8shI2xZg5CqE9AQ0dqqImR4Dzk61VJrwl/wEZaHWl5ob1P1CmQuuOZiNc6whiEGQTeeVQqXG99T46TrnxlXrYxYTetVvIBqHRy0fiVtd5mmnMbViORgWvFF7Dvksd2LpDsBK88U X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(10201501046)(3002001); SRVR:CY1PR03MB1438; BCL:0; PCL:0; RULEID:; SRVR:CY1PR03MB1438; X-Forefront-PRVS: 077884B8B5 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR03MB1438; 23:0LwHvJ72Vmr8TBjPMtFjC6sabb2zw/3XAsOavr2Sd?= =?us-ascii?Q?dGPh64GRQ/GeWVLiGfvkOShor+IQVbhN07k1HnD3tjmgZorgjSjk/SuCpx3O?= =?us-ascii?Q?MASQge+Pyip/Y6JW9Xo8TpuQrFCYM5KylD+4hCsFOyeD1u6ALl9ckerSZbZs?= =?us-ascii?Q?tlygtvftvTsAFTxJpC/UWOtr8ZzFvR9OxdHgU05Hr4c3WC1EXkCZZbimtO6s?= =?us-ascii?Q?jlEYqEO8MaUVAGRErc1tN6kZT0ANHA3O+/8H7xIBVV8K3ZOPDwihBuTQ8tSI?= =?us-ascii?Q?Ya/Jr99p9vtv1sxhVsa8xg18ln70AGrvlfUmjiUn7xSIG1ndNqcpjV1lRx+n?= =?us-ascii?Q?3B2EC97dXIGwbHCUczREuXKZyfvR1yw+ZAuJ9KumfTw79X7YC3yIkGaZWYZS?= =?us-ascii?Q?2+JtZv43p93eJzKxIA5yPHaMDT2m+RMumIDk8E0j9NPZpfnWgOdaaFmDpbDl?= =?us-ascii?Q?64DmIQO1mflfjgdWZ6COVga/lGnSc6tpj2d7rxEniesZUOKf/PX2JxG0fz0A?= =?us-ascii?Q?KUpdcmipcA/hTpEEr8CxzkhXYTQF93E9lUNk6DXyXUuW7lMr3t0sr0WyLQ9a?= =?us-ascii?Q?wguac/1neOYcXhzYAawCIE88z3Y8xytQwPAoSqbeSAbcPL/P8tTot2Qq44Yd?= =?us-ascii?Q?iRaezvuWXSlNjYhq+UAQOTHYZuMZd+pVsiQIOdBW+yCz7ikyWn+bY4CG3SWA?= =?us-ascii?Q?yPHdQrki1nriwnLkXTncovKIVIfgS8ZYQYSz91buEjFCN53+LRqktWfOttJx?= =?us-ascii?Q?gCEbN2dQ7InFkwQjxhBYfn9eDOgtSS9+Ccz+O90X1K2IcFrmKev2kSl+4L/a?= =?us-ascii?Q?3MLFIvG/6tY7Dr7U1UvE3YQBmljjniq/QjjfW7b7dXMzAr3QgmR9RhDBYIWw?= =?us-ascii?Q?ZKCKxCTOhtYmNky1aOglLBnaA5boqFhP3jB7+IADleR0a5rjPjCbuAW/Mt5/?= =?us-ascii?Q?c1ZeSSEKWlDGcZe37hF/2FJ8wqKtX2LTuaa70X2qgCo6Co9yZCjMG7KBawV/?= =?us-ascii?Q?bs=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1438; 5:p0/hTTxyAY0YQNNBRkkrSMrA4nTorgH6VV/zK+C4uHJQ51GsORXJp6dBUVMXa6UuuSX+cXnWkOsohr32pGpk8Zbl6e8oYniO+UrnuBjVmbhqLNokb/XcWQ0gwRo03XTSO5W8mpJjcptzm18h3SAoUw==; 24:aAL24m01QvubmVKyQMEDH5hoVVw4ZMkCK6DPSE4uf06dmy8Tvjxnkk8DOZCwMlvkaA3u7YoSjZEuoXmfhI1FZ7yDvLrPY3tN5CWfnULjRX8= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Dec 2015 23:00:17.6545 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR03MB1438 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151202_150042_872140_7C799D1C X-CRM114-Status: GOOD ( 17.45 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [207.46.100.137 listed in wl.mailspike.net] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [207.46.100.137 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: fabio.estevam@freescale.com, boris.brezillon@free-electrons.com, vinod.koul@intel.com, linux-kernel@vger.kernel.org, b45815@freescale.com, linux-mtd@lists.infradead.org, hofrat@osadl.org, dmaengine@vger.kernel.org, dan.j.williams@intel.com, computersforpeace@gmail.com, dwmw2@infradead.org Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Huang Shijie i.MX6SX supports deep sleep mode(DSM) that may turn off GPMI/BCH power during suspend, add gpmi nand suspend/resume function to release DMA channel in suspend function and re-init GPMI/BCH controller during resume function. Although it is not necessary to restore GPMI/BCH registers value for i.MX6QDL, the code doesn't distinguish different platforms to keep the code simple. Signed-off-by: Huang Shijie Signed-off-by: Han Xu --- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 47 +++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c index 5a9b696..ba5975f 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c @@ -1,7 +1,7 @@ /* * Freescale GPMI NAND Flash Driver * - * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. + * Copyright (C) 2010-2015 Freescale Semiconductor, Inc. * Copyright (C) 2008 Embedded Alley Solutions, Inc. * * This program is free software; you can redistribute it and/or modify @@ -2035,9 +2035,54 @@ static int gpmi_nand_remove(struct platform_device *pdev) return 0; } +#ifdef CONFIG_PM_SLEEP +static int gpmi_pm_suspend(struct device *dev) +{ + struct gpmi_nand_data *this = dev_get_drvdata(dev); + + release_dma_channels(this); + return 0; +} + +static int gpmi_pm_resume(struct device *dev) +{ + struct gpmi_nand_data *this = dev_get_drvdata(dev); + int ret; + + ret = acquire_dma_channels(this); + if (ret < 0) + return ret; + + /* re-init the GPMI registers */ + this->flags &= ~GPMI_TIMING_INIT_OK; + ret = gpmi_init(this); + if (ret) { + dev_err(this->dev, "Error setting GPMI : %d\n", ret); + return ret; + } + + /* re-init the BCH registers */ + ret = bch_set_geometry(this); + if (ret) { + dev_err(this->dev, "Error setting BCH : %d\n", ret); + return ret; + } + + /* re-init others */ + gpmi_extra_init(this); + + return 0; +} +#endif /* CONFIG_PM_SLEEP */ + +static const struct dev_pm_ops gpmi_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(gpmi_pm_suspend, gpmi_pm_resume) +}; + static struct platform_driver gpmi_nand_driver = { .driver = { .name = "gpmi-nand", + .pm = &gpmi_pm_ops, .of_match_table = gpmi_nand_id_table, }, .probe = gpmi_nand_probe,