From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965799AbbJVUG2 (ORCPT ); Thu, 22 Oct 2015 16:06:28 -0400 Received: from mail-bn1bbn0107.outbound.protection.outlook.com ([157.56.111.107]:18446 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758177AbbJVUFi (ORCPT ); Thu, 22 Oct 2015 16:05:38 -0400 Authentication-Results: spf=fail (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; From: Han Xu To: CC: , , , , , , , , , , Subject: [PATCH v6 1/7] mtd: nand: gpmi: add gpmi dsm supend/resume support Date: Thu, 22 Oct 2015 14:54:30 -0500 Message-ID: <1445543676-19876-2-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1445543676-19876-1-git-send-email-b45815@freescale.com> References: <1445543676-19876-1-git-send-email-b45815@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11OLC005;1:Nm7p0IiFARigawd2njfVkn99GmfY6dOLBszb8+G4ttTr5RMCn7LAyr69W0v4M+2wn+CFK3PxIwn1CeF0+MNONys8g7VUh2rtSD+BMXopCWIWwUbjGPemC6LXr6u3VDC0H1CPoydh9SpYE1JTgyoeZnpmfBuqRm/Gwd3alSa1tUE16w20TGClm9HOSw2d8UtdRw3LWlrNng5anvX5ggIhWc6PantPfBXIAkaNgs+4mlwCxLeoBXU0wg11D7dhtHe7cgTSERtY44Uj34fNSxvpq1o6Lj1yTpudr87cQ/GbLBzWswKrq9sQf5OufhdqO1i9NS6nbU+oxT66Fm+7yBvUXAUK54/HxYKtH3xWKdXuTECKVc+beCCi4WMYAHd0E6VL61tTkxq9Xq666V12ffx/ew== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(47776003)(5003940100001)(50226001)(19580395003)(19580405001)(87936001)(189998001)(85426001)(110136002)(5001960100002)(106466001)(229853001)(50986999)(76176999)(105606002)(2351001)(33646002)(81156007)(97736004)(6806005)(11100500001)(5007970100001)(104016004)(92566002)(2950100001)(48376002)(5008740100001)(50466002)(77096005)(36756003)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:BY2PR03MB555;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB555;2:/UFo0BbrCQbQti5vDPB7RvhdQp7Upm3r0VAsjt1kjcR6cpV6Z5MsXU1ntGUCG7CXFjxShoFJWwsjqEGqe3BKJawfNBBc0Ez2CWDqQaS16hX70o3w3rksuwpAlaoswbc+xdjJcmHI27LHQMbEoFJmR1ly0jtvouL6pOja5WhYISU=;3:e9OV1f9HSqMjsxqzkw0lXyw2oa/ZqzjDVZsD8oW4dhXohnkx/VBchgqrQzWU5APe6fhrLK8lb0P5J4Or2F0IJLd78wcbKTOY0QVcqeT5Vfu3akz7VWIgNrwvViiKuG7xNT5v7YvgTMThVs5E1EE8L4JYjFegd5czcW41mVYRU3BPNOxALBUT47NYDDQ3/RakxWUjwQMFDgZf2BqNBJfZW4mPh50GwnRYuxZloFjdwf0=;25:YIJmOuVaQwF4Qc9BzqnAvZfO45BbZ4VXSZno3OaDUAPhgj1wgMHjlc7dzdNV1P89O0Ye2triHmbnh9uoGVUpazUAcy7EbjDPVK/QvB6TKo/+EjkJwEmN3kUZXCKy2/SwIrlYzpAWEH8Jk+D8MCmUsOBueafKlzMiIKKtwN0S+lgiDMVZbH5/UlLIUuZT8lpws7xCDileWUU0U8M2wddJY581694AcOr8pOWeJPrN6KiFmcEb1GOfJ3p34FBVGmBK X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR03MB555; X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB555;20:Ic1wNxuMdGklv/T3zkO4dqXTGxK1/IUiKAzxsbSn2GKUuvV8wa6A1vHSE6RarOTcroSIo01yBZnW9U4Mo5BCzlcLOXbbKrDbngVcAExt4clRGRbyqkb5MR3wGwLXPNUhHXj0n01BGjfMxhkb8VoPkwdFgvOW3IMoyOzpkPM7Kzz+iLKUmAxzX86j3oKQwz3FyBvC3zqT62YUOGGNLJi8DsFyWnVBzgZAT4HCa77pVBCtGsY/OxbgHkRXMRusswz/crhpF42A6Fh0sb0ezoaxqbW8yrbbZeV5MhzVdmhUM735H7/UsdIH1mmCHWtJkH1BwnImq/uCinHZL64IhJhl9QfCcHKh6CbAeURxazGBwII=;4:KlLWaZNRWlKMhmJ3EaldAwg8xz7t68Yen1acCmTElx5QuIrL+gdbXXknWFwHRKqU1usIYn4PufzVRI/FtC4R1qP/HE7DMM/59BOeTnPfxIMwwxRUacVqriqRlIOO64zg/kzx3YT2M+TGgonkmjeMwA1vsCbAeG1QtvC1JlQTJtdvPaX+vvJrDVkP6nQ6HJ8P8496Fq8WhD2+I6zYfi+rfBruc6bGigb1Os0+TMlqXgOmVvQbJWWjT+TxjFh4PT78Dyz+jop0p3UluRx0olw65A+XCTzuZCa0GK8agMSYVIYJw1XlC61ZYWt/AXtY8cR+91BjwoXQo4rC2yl+Sfc35qx4pNOxVBouePArDxbg1w9CJFfgRXnmBufXaAduLtud X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(3002001)(102215026);SRVR:BY2PR03MB555;BCL:0;PCL:0;RULEID:;SRVR:BY2PR03MB555; X-Forefront-PRVS: 0737B96801 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR03MB555;23:ARwWXhN9Iue7ltaDsruM6prLHsVr7gj6LN+ICheh8l?= =?us-ascii?Q?02b2qQBAtLhmzLS/2doIK+J5jkKfF93CMOY9RW6Jwdwcc9e8KtfjgPB+/5jU?= =?us-ascii?Q?XGvhMO8PPwR3RS/imqeEHtitJyew8omwb3JYf+NqJKNeyMhtDJl7h3KrJTy1?= =?us-ascii?Q?1OOxv1KobHE/z491GToi8UgOQfQ5qxeemeL9FVWV4OT9WoAMwcpSuSOITyi+?= =?us-ascii?Q?G195WTctrGhbU0MO4kuxAbwVSUBFRcpNvUhDcFMK9lvqHri8IP8w8qQroyYS?= =?us-ascii?Q?M9e5PUpubrXCFsm2JQWBBdkp0exg+tyiEz59lpXkeJNFRhaqe6EXiEvg1AqC?= =?us-ascii?Q?NNMPRP91FEChf13U/YI3KxdvPYVq+l9o+Bl50kVAJ6eRWAASEHNgSsiNl/rM?= =?us-ascii?Q?RQMUw5eRyR7MujO31KlbKtN8k4BRitr8JDyqRAsop/bUZNjznkxwN5HPHrBl?= =?us-ascii?Q?BOk2R1MkLDY2MMf2ZiRYF07Yfvervm7e+pmXiL0T6KYtYm/gCe1aCkauzmUX?= =?us-ascii?Q?UfOJAwfxTZ2eqjIDju8f/6+fP5vtGrQ2WUYGi/bY+iTz5YpFB0p4ub1uem2x?= =?us-ascii?Q?QLstQGT/O6a03KmL992Yg060XwqC5keabnNuwtMi87YOGEGmGlQ469lN5Bh+?= =?us-ascii?Q?B+6nfnPLxVusB5VUSULFK3ZVCUI9JRrpXtjjKigsqZ07de7ulhtbBjIpWLKT?= =?us-ascii?Q?cVmShlNbmkC3JKUil8OylCh/hsTPKLp6sHKCXrQT4wsJoJ1u9zP8jlTRli0Y?= =?us-ascii?Q?fmOqGWhGRjMhlYvGDRYde6yxJCWwLOrOLQARJuaDsyzv2l193HtNFVkRZ7eF?= =?us-ascii?Q?rXbYEeilDuyNIWu6UmzEsP9AHE/aNrza1Gxhmyi9eOyrtkLHBFB/Jmxf8tPP?= =?us-ascii?Q?fEdsak2PMx7DsCWylxfUy7Uvof4/Wr+VdmX8F/24e+lMpNqc+xIV1xJZE/9F?= =?us-ascii?Q?PFObgARXoit+C4friMcdOQUy058J1U0CBmYWgukcv6vw2SlNZQ14pFh3bkAF?= =?us-ascii?Q?5KBq21ttzTQd3jzP5XNFROy7DZMgBsmzMReFLX6hdjUQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB555;5:K2O1X0VOw6ZGOH9uXEZ8QXA9vepXrTouFKirWDVT6F6YaBnP1fXSxq5Ju/f4q60BQcjkV+qZCtNkE75tEKmxjjGFokBUtWtQj0qDBVpIIca+pDDVwAnNOyJgN6wT7q7yLBVasvXgutFkVc3BTZSdNA==;24:NMBOM8KHvlnpzIz6kUy5vT5Sf7nOXDXc5Qua/F/+0Bydz0FbT5rtw4AI5vXb/zEPw05qkzl0jVqBg2jWYWknvITLuVKlh3zbT3678vQLlHM=;20:20PbH8URo5jy9fLvUBYlOt9y+yDhvY+VZuyGv1QIoPWydykZbEN5H07vu9eNqoTQjS38nPABn8D/dKLQiFQjYw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2015 20:05:34.7102 (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: BY2PR03MB555 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.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 | 45 +++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c index 2064ada..61a39cb 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 @@ -2036,9 +2036,52 @@ static int gpmi_nand_remove(struct platform_device *pdev) return 0; } +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; +} + +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, -- 1.9.1