From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932100AbbIIWrS (ORCPT ); Wed, 9 Sep 2015 18:47:18 -0400 Received: from mail-bn1on0139.outbound.protection.outlook.com ([157.56.110.139]:45039 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753931AbbIIWqu (ORCPT ); Wed, 9 Sep 2015 18:46:50 -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 v4 1/6] mtd: nand: gpmi: add gpmi dsm supend/resume support Date: Wed, 9 Sep 2015 17:37:19 -0500 Message-ID: <1441838244-2106-2-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1441838244-2106-1-git-send-email-b45815@freescale.com> References: <1441838244-2106-1-git-send-email-b45815@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11OLC006;1:ksh8EZTf9GO8nwWeSjuqA3pULJCkSoqGKQU4vTg2ilsHuSaKor6Ni3maU3K7x9TM/uJL63H1u2oUhd95Oc50i8diCM62BQKUqQ5maABRR4C1+wABaPu5dwlLEqx+QlFdQLmY4kJrlF6qZUmADkvvfaGuDYltxFm6/IW3FtCzHjOXbpnmRAjDXHn9Jen9OT2l/HPj/bmeq6AxK27yC1rwEVgvQhB7sAZToJWzw4QeYFxg1a8hRUJazjv+2ivnwlJMVJMFFHneD/UC0PNCeSDnxTMTp3DFwAqK5fKKmBB5M2pB3dPHhR8atWYlFqRVcBpENLZT25vVfPlNKlearqvaXNLs4abvjc8Jr/32qhR4fVfJrUi7jD/3rtY4CqiD6h8utU8pbidJfYP0oI7GJoH9yg== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(2351001)(85426001)(46102003)(5007970100001)(575784001)(11100500001)(87936001)(6806004)(62966003)(64706001)(68736005)(50466002)(229853001)(2950100001)(50986999)(5001960100002)(105606002)(50226001)(48376002)(5001860100001)(92566002)(77096005)(5001830100001)(5001920100001)(19580395003)(76176999)(77156002)(36756003)(47776003)(4001540100001)(189998001)(110136002)(33646002)(19580405001)(97736004)(104016003)(81156007)(5003940100001)(106466001)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR03MB559;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;DM2PR03MB559;2:LYs0AnSR6zSZsIg9paFaFR1o2NccuscfXPV+cZu/DWSsTWolhW3dJ2pMdXIuOgiMGewlUru9YkVNaw7XW8seon2zl7vwZL2V0FAQeEl1iRZvDdR4Y9l5x5ucsaX2293LV+2y3cGvcyOtTKKIaREbyGLltjfEpqH3G3a7C541huo=;3:x78SZy7IUFsygqzI31NGx7rUvuWzfsurqLcPQn5Xbpo6U7TN2iSXhQ15EZGoM1m3V6rO0Mb6TRqjbCfrelBbBzHWO8kbJAvRa0FeLmp0i9/E1RmgM+zqw6B0NDRC+d/OZlSqdVZNdl3U4ntpjvczOAe7l3fxc97hL95czDq7F1JPlLYPeMIPVbji9l3CrR4Ks4uWN1QgRgpXYGZdjYuhPmERDIW+dvdnOng4VBd9BHw=;25:rhvNhZ5+CMNzM2SRj4fD/0w9kU+Jck7FvHpSLKqLrQ/0PofZZX9AgNw/RHNgywa0vUg2Doc4PeqH80bpbwLJquBhnxbbZny6s9sgflBbUuA2zoXuwDxsTqqOBgSJO5sIWYONky7upyzD5rug0jLopwYudTleO9fkEXpnHbKGZt3o3GngyE6MIGAAN8Wi4rI+hY6JagfM/ltXZ4GMqd6Hy43596DTYm75MA9Y4xdxCdfKmEfwmhpgshpe/rrOTXH1 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR03MB559; X-Microsoft-Exchange-Diagnostics: 1;DM2PR03MB559;20:phvkTIbp5fYJeCVKFlzoGSb5pVow8aM4CFqhcpW9clCTSHMx9Cn5OamPzw9sq3t6Spiq4i7H86xDkdofYAx3kz4JUFemVKA4HQS4ix47alE13Mj6pfrk8HU0qriNN+Kfllh5hkVSbWFJ6/DUUT0PWK8VIaTO39LKGVIqg7hvOos0OWCXIeBHpeIM+0fMwlzalJN952sKxQtBuK3mgDAf8/WVeuDa7gDYtKYYCfgnkSkUcEpp4Yr/LpxE/FzHTa0vMsv/vv3b+oSmbcJ1V7acwUZ0lbcU1RUJ1u87ORz9s+qwEiwE929SmmvcA0NfedCCPgYczVhxE8wYHfkcyh+6UDJ+cPQTUw10BtHYSfwSFuQ=;4:92Lewxln7Meq5Yd4ZNj+Q9ZtxZdKq7d0+CaBJOmU/F0DG9U0R+Hn72UnKKYl+UoZWLq5yLA/CAJpIrlM8L3fBliWJTpls1WJ6AscnOty2EdcT6BPF1TrKGSyzyU7OQcKHOmJ+ZTVeaonqxw8dtZRMoaVrRC+GpsYyvVsWd0rPcv+PXpcUAzE6kWxAJD+8vs8F5iVhsVCqKpyqxtNRUEQAEChaKwd62Li+UW1KH1M+pfwpR1uF+75DIdFimdhlcRKPl10OhglpWjmo3vCrUE+7hwvLUqYbwflxnJJpuvnSc5t9b9pUf+MECEIMgSKgc3H X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:DM2PR03MB559;BCL:0;PCL:0;RULEID:;SRVR:DM2PR03MB559; X-Forefront-PRVS: 0694C54398 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR03MB559;23:TrQwWjfZEjtnpIfaMCKk6JD3mBR8XSbxdfVoLoi2pl?= =?us-ascii?Q?IG9lXUDGKUgmV4sPYdRYbqGDxRdV1kfryEiQQn0ewMklcRx5r4EBzN06LouO?= =?us-ascii?Q?B2IdqiILcaYnqg4KKgCZBCg5MlLKJO+2LNuJZDMgBj2/UqAM0EvChbfthYga?= =?us-ascii?Q?5C4toGLX6csu3liVsMi7ajO47W+Kn2t3H3/Nw2nXzYjuLHyMG8DtJLtcWrE4?= =?us-ascii?Q?1lnOq/HW7ybvlrr+yePtSIYT1BQnWslh2sSReVZ5/nfVebybEdJUXwPzPnc5?= =?us-ascii?Q?2SO38Td7q1tQDBJmX4UiEtboCfVIAQPN6Qh2GFn0gZcoRrjI0zAbhM9bUWnd?= =?us-ascii?Q?K3ogmU2X3smEgoKXd3Ojr4Xw/tbbA+LIJyBXRHxkacjl3NGFDanLO5FVxtlw?= =?us-ascii?Q?+mK5dbrNwJanrmC9TbMSQrrmqbuiw07Km3vvMDeihU9ipeaYuU8Cr2f0y4Kx?= =?us-ascii?Q?T1wrqPK2PtfOtamfA0GHmDsFVQluiLSwGoT3hkR/066PPlkt6T4RKLm0FKsi?= =?us-ascii?Q?46IP0KXuMefp+ej3Sa+p6Ou9JbSGOKpumUKNVBHtU6ag6JAlG8A2uTw+u9/t?= =?us-ascii?Q?tAqGhlFM8cV04MqkGDmAe1B+ivCBtNmvz8p1cwwhhY+edxEZrYIrBIq7578W?= =?us-ascii?Q?YTJW7Wapb/G9dwQiYoEb5Yp4FHb7/WOxFmNHQromx8eLsNlTbgfAl3aFjmxi?= =?us-ascii?Q?BzIdxX71069IW84KrySbMdps6yYxeIiTF/iJ2d1ROGIHwMAiLR+WL7i6VzgX?= =?us-ascii?Q?oz4ScJxWrkbN31iove0aaBzJAZClLiQPx6eyjGWaHsAwXaWV6gqWPibxwpCm?= =?us-ascii?Q?mhOziszun06sQAfiSNjd/kzL52z8pIwuf8qBmbz66GNEtwXoyA5+wx0hZCNX?= =?us-ascii?Q?UOdfTw9jCiu12e+XjdvVMCYVIQHTliVubfdOLtL91W7eeOsPYvEFELjmC0Jw?= =?us-ascii?Q?a5Vz1wUjqS6JPGK7l+KCRHNG76Lny8yYteq7uJs71kvAUJ4WRQqXLYksT6j1?= =?us-ascii?Q?sbEcJSnIkWbGIYhfM0N9wJOYqyG44NKKqS/atLN8VSYErpnBT46+gz+t3yKk?= =?us-ascii?Q?THppbhL7UssDHpx5r+5rWakuQyNQSaJf0W8hP3zIa/AzGqHzMAk3NlK8lurb?= =?us-ascii?Q?EOjhSj2fajJYX+Bv4NcBOM6wf8flo1tTQvw86hz6R+2Xs36YUt5QBBSWo8rY?= =?us-ascii?Q?IBgJ0ZVCgOkxiUEy1oFtHxWlRdhhfamiQGN8wJ2sJ7C2vJBIvj5A1yY1QiMo?= =?us-ascii?Q?ucXd3vkMiQP9f72HtqnMPFVGqNW1v0mbHrjezZ?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR03MB559;5:Mygs9gpwQJBrbayu3y7myA5JlQNNLeoRHtCrmVjp+U0r2Mtu5DqO0ZOr2PswpgdkclzUkK8jLwE2s3aX898rkPbPV6JN2veUTYS+mps4K/6uZZzN8plUcQDVNL3EB+NREeI6qvLL5vPk0S4OoX7V0A==;24:V1hhMSmrZdMfebDuKI3BG3+Jh7wmwuBfUqsVK3XQioYbieOn68Voc0u+Ds83tSluuGt8IjzlfHde88Fr5DxhGbS0jZ1i6JY8KqmWJ6ZFGK0=;20:iwqKXXPqnYe5Z6W0skxywfmbG/1XuAHfTlroulzRzrDjEOFDchyYdN+SggCRnudmaiZZiEjI71u3D++f+82sTQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2015 22:46:46.1374 (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: DM2PR03MB559 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 1b8f350..dfd0ba1 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