From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756710AbbJUWIi (ORCPT ); Wed, 21 Oct 2015 18:08:38 -0400 Received: from mail-by2on0105.outbound.protection.outlook.com ([207.46.100.105]:44097 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756563AbbJUWId (ORCPT ); Wed, 21 Oct 2015 18:08:33 -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 v5 1/7] mtd: nand: gpmi: add gpmi dsm supend/resume support Date: Wed, 21 Oct 2015 16:41:35 -0500 Message-ID: <1445463701-5921-2-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1445463701-5921-1-git-send-email-b45815@freescale.com> References: <1445463701-5921-1-git-send-email-b45815@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11OLC002;1:FygHhhgPRzpwSkNwktmGZHGhU8kRQyJlVa+GfPA1wkvRcuvFWysx51Dt+e29boGJjGxnkZVsI0UUeDvapMgVz4lfLdSQElK7uHwLmxIODWR4i2FpEu9sYILGoKhlrtIqryuKqZMi9ybJ3kn1kucutN/ZL4I9HQqXKONWIyKgcQnZ3UlIxBDXoDQ6rx5LcP04umk/GCCP0t1zHA6zNQAtxyAmLOEuvRUlKcb6fqnR/Wx59XKmOYgVzu3K9cPR88FpjAvJOHBBDrNxKmpXQLFbb1EoTmiLrmfoWKKh27roR+3RGpeLkZuMtIIYSBfE1E83YwAYsY+LLOsc5rp29LMCZnwA/haKmzFVUKjkDLIGOcL4w62pX5NvtFp/g5f4gt5DcgwB24B04T4PcsmXlIUEYg== 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)(33646002)(81156007)(5008740100001)(11100500001)(92566002)(6806005)(77096005)(5001920100001)(97736004)(5007970100001)(36756003)(105606002)(64706001)(106466001)(47776003)(2351001)(46102003)(229853001)(50466002)(50226001)(48376002)(19580395003)(85426001)(76176999)(50986999)(19580405001)(104016004)(87936001)(189998001)(2950100001)(5003940100001)(5001960100002)(110136002)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR03MB558;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;DM2PR03MB558;2:4bWSrN0/1YT/f4IRWM4Ox32nNK4U/fb7o06UM3Y7s51Dj+Y5ONdu4L3voiO6hTpZB0aJnXOBMQnQbEetcOGu0ExQsced3BxP4fzrm6XNGXwG6vyCwMuDn3Pm6BBxsZsMVCVB8FZubjpzIp8EKeDlbz4ra1h4ZE/QDR8csnm2SrE=;3:KPSZQ/4FA/UPk52xUxnKgW76gVKCq0Ddq+HI+3IwkQWIOcQwz3araRMmi8HL8J0uIg7DOQElWpUbmaQJxq/MhteB5ogbDufEyk+DT5B+S4dvNp4xtlsQ+RhUqgBz7OkILGdCmFLBI2F1pjsC06RKDSFofQzHQbjAXBKZQJ+rEt7EtLMELYGGmVdbRgGpF6Ekq2FRVwHrMpPiTCHZm5FjQb+XSyjnX0YMXAwgyFvA4m0=;25:D43jJ+IXyZaTwdkDQWjy+Lc4HkDkufaebMGdb0m0dxBEtYyychHGybX/IJw7+jBsVncmGz6+/x/tvwb3f5U99mpfVA2X7bkcBcz+Ch08vT+6YxeZX+CMR4OaGIWCKG0eQ28Om/bA8KGxNxtBJZ31Kc1wETz4lFd4oR6L4489vE3shKpvi2tNJHP/4NaMUDRuQakV1CN4GPwsptRNqSwSxS1v7lmogJdqAHO+EG3rk22BqveFVfykL+y6WVGRPqdm X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR03MB558; X-Microsoft-Exchange-Diagnostics: 1;DM2PR03MB558;20:MNYDAhOgof0O65qZstVOx/+TEdEDZm/HscZIH6oA0rLrgjekjnBsRZupeKyVkt6Thr3T3wj10meyGe2BSwLwU4wGoFlx3IChO4iGisfG4OjDuuPxu73iBUGoZ1cKGrj7srzYb60AZoha60OBrRiGQXaC2bqk+mwfRcGquGnlEN72LwlsvMXLjMTZnKTYEjeunRl7/7huikcyRNKx1/xsv53y+//QcxpwT/yKsX7vAZZZJMYaPmV5DaBWNK3Ortbd6XxRbEpvdvPOVn/10IjAiMsY/Gdozu7nFMGncANodhdPyCIl+bTWlY8p/Nu84X/WxP6b8P4SXmdSqyWWi5pIHwU6i840VL+/QsWbbcqWGmA=;4:Scdac0cOPpgvo4C4z+J2IQS14OYf0b5lNbfxOiFLBscqqEeBuHWkGESt3JPeMkfI1q3qzvwOf0Ueemptm/fBV3T6gdMe0TWeUJIa9BuuLPMhcoCHAjXWyzVq329SgwpA1JEz8KLKJIJG7nuI5w4fNAReujsZAmNzAuFta3oZ/Rh4eWefi2MPZrLBUgBp8Kp5yR9pdIM/7igS84VPwqaUfUoqy4ja8iEg+mNIAqlHoyzcK3kXeGOFEIqx0aE8ZecSe+Y2CoVWe2alDdl5Onmxd5B/IDpPDkCgkjFJJov+mexvGI9cVYfB35fzAg1OQZpnH2RQ4KFs9DTdlIkVSPfP+2XXBEYSOIQvKGUYs3HYIPSEEg0MLfOzUbwp9IF3xHn1 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001)(102115026);SRVR:DM2PR03MB558;BCL:0;PCL:0;RULEID:;SRVR:DM2PR03MB558; X-Forefront-PRVS: 073631BD3D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR03MB558;23:tMbYuWpzunbWbSc2bDKsJrerYSwoqJpdPuYv70XN5n?= =?us-ascii?Q?k1wR5GHmBRyh3KhVR//6ZhSpfftrPCx4rHZ4vbpLnVT0WJQBjB2TXLeyV3gj?= =?us-ascii?Q?kRpsEP0tDDxIYQOglSggV5v6ahnJ1i2+6MnJXJtQv9Rt7NgBhcoWHcuS/vq1?= =?us-ascii?Q?//+WkZFw50RflozquEHYYRe/yVrYY1NnyrclOhGXN9+mtL9BhkoccHNBvUWP?= =?us-ascii?Q?3GJiuGq85DImIWfCaliy9Hl8QOr4ZVIT+7eQTdz0YRhMWurrxhB2cv7Wo4m1?= =?us-ascii?Q?QhiK2y861/VZ178kwSoxyDn1SVIteN/T6eJaRAusrR7ZpgaRwcAV2IA2AcCO?= =?us-ascii?Q?1F0nwJCDjxaF2eCgylDLEN0PcgdlY8QYV18VqAJ47+KBpivQMR4b/bnnZE3d?= =?us-ascii?Q?Yz8hLnj1dfZG41kPLa3DUY4aAVK6qUgXDe1v71zM4mqUarRztYw5GU593gBg?= =?us-ascii?Q?F3Akrrs79ktPN/emsmEblRYgSSSyTCO22+2e665cd+ywUrq05vBMs2AESWPv?= =?us-ascii?Q?0YLYOg6krqVqEN7OhR73SuFm0heMNcjHmsQ3WXmh+48zIv0HiuOeyN6jje+E?= =?us-ascii?Q?5YDRSTxj+AjSKCKdao8x0X3uVU/559M8SNMMmu6I46T7BzLxDff7/yfm4EW3?= =?us-ascii?Q?4tAKztIZ4ATj2jIjulG7qrnUzDkZV9N2A7p16M2Xd+0+NyOUDy1O0eWXQQK3?= =?us-ascii?Q?YtUwNN8QIyP0SyhrZZO4Bl0nuqMbYJ9f3da01DGic6I5y4bwFCOpd6O0LbYJ?= =?us-ascii?Q?AU/3wU0brKItGDzdCEOyC2NmoqN4Z8h/HODg6awxuCM3UqzDl+1j7TeQSuwb?= =?us-ascii?Q?M4tJJDqHhd2WBVfHXCLd8nIonRAli834301fiqMZLI8KUNb99dc5YmS0p6I8?= =?us-ascii?Q?VE5xwU+ruqiE+oO1ayA4pTJgzlVWoTfzqj3CK9CLNHMIlrVUcuGxN1hHKLHn?= =?us-ascii?Q?/y07s5EsIlJm15AhO4BPMAodOpC/jXJCqHekps4ZFzxtLY5AV5P+DftupCej?= =?us-ascii?Q?fJ5utANKl48L61W5PuEINkHxezkHbtiX4POygOriRuGIjk8WSzbeSIa3ouor?= =?us-ascii?Q?BFNMmkMBpTxYmtHvZMbb+7RGjM3BNmYjygO6RsYQAjhaAplA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR03MB558;5:SYkFg05TbvW13o4CraKT2KPBGRBCI69opHOJapMfFDb+04R3zr9QJbOOPPixkbpCGw0TMqqqJABQuNcGbsiXMjCRbl4fFK8QpjOO6Z74sbUJCc5/dR1SRFSi7mI3DPRrlyABcfPdWG3CQlECazYYnQ==;24:4UKN+1ANDARoabWcV3F0g0s1VwZZZANJIr6vcaA5GntbmHrdZbm0Xq0B1Nd3tWg59jQ3BhmFlt4sPzYF1c4u2m54oH7QwJnKE3qDdZo+EP8=;20:6UYrsCUB9vYYp1CbHdwfj6tT4CD9sBDgRxAy/H+YNKB73MbBbK2C0xaz6FJtjroBNE5WAksw6jbC1Lb/GYetJQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2015 21:52:36.2076 (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: DM2PR03MB558 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