From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756594AbbJUWGf (ORCPT ); Wed, 21 Oct 2015 18:06:35 -0400 Received: from mail-bl2on0117.outbound.protection.outlook.com ([65.55.169.117]:40784 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754915AbbJUWG3 (ORCPT ); Wed, 21 Oct 2015 18:06:29 -0400 X-Greylist: delayed 921 seconds by postgrey-1.27 at vger.kernel.org; Wed, 21 Oct 2015 18:06:28 EDT 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, 21 Oct 2015 16:40:03 -0500 Message-ID: <1445463608-5836-2-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1445463608-5836-1-git-send-email-b45815@freescale.com> References: <1445463608-5836-1-git-send-email-b45815@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD007;1:2Wv2HsfxUktHFYnTJ3G1EkMzlu8hFLRznCpYHTm/YcDX5lm99We3Vyoysq4NTxRIFbawlSgwcJR6QFMj1kT0XxOBsAHSpbHQ6Ppy/0ENbZDANIwL+B4Q50Llt70m3duGR2yjn4DIOhsXGaqYAlOWHcdQGDJmn/ZSK7N7r0zxC+mG9uH1ydsOM4tkY8sV1Et4EmVtXmie8zjIxcoOg+fRLYwgDS7uFnt+bWDDaAq805X7hfiufSyRIVJflkIu0Yh0uwa3erHYQ1jRlmjHzdK0xXBNXbpRgqiwap0Uog2d9FtXtFGcpfBrvDloaODYOfUKUc3gGX/U/J9G0y07/Njz73Uy3AxoB/adzcu6L3njhVUbXBOOP4DlVA+4nF86h2XFn9kWU07jSir0adi40QK/TA== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(81156007)(76176999)(97736004)(77096005)(11100500001)(50986999)(5003940100001)(229853001)(64706001)(48376002)(6806005)(5007970100001)(46102003)(47776003)(104016004)(5008740100001)(2950100001)(106466001)(87936001)(110136002)(575784001)(5001960100002)(33646002)(36756003)(92566002)(19580405001)(105606002)(19580395003)(85426001)(50226001)(189998001)(50466002)(2351001)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR0301MB1309;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB1309;2:SYh26SilfRXlIex1asu7ckHDpDR6i1cb2goaZfZ70VMK+FLvup0yEUUaDGwejhWey9ucgiwgSxKLV/4e0ltqZXKpr1oYE7SERmKrEnc8kaz0oOJJpW2vfe0blM8jmW0kXHswcuTgky5yDW9aE+AM6gb26KsOK6hIq13pWUd7XwI=;3:qwxuYfEUdnHwror7jH0QNUTWZBZi1+j/hDW6gw66fkVlDZ2RWxoUPpKGKKp5MWpMDp9S60E802YLvxzRrRQPBtWcpP4pBsVJxHoK78GPh8MO3m4tGfn19vh5s2Q5rKYjgJo7awQ6ytjoJYnHVYnylVF6DFxL19sRaGF3tUSovCMnLGOBnH45d0xdHcbMHFOCLGKIlhS+VWyP8SmqXTAlYOENfKFmRX2B7dltl/0jYaI=;25:e8Yt5d910JnloMVmyIjcjK38Vtio/4le/WhO3SQwUfleshoOkewsCRTrA4pZ4k3H1Tz45z+nM4o729Owf9vwEXgqMvtvKAxNbnbczRwKj7BrvDtGcNVhdY0EfrHi09NH97Gy+IBBsWunxHvJuou51rRbNGLEayh3g2bbkaBZdsYStripPwm8xiU5kwRG49k2n1YrDeg6qjL8CjyADiqmjY52qHkoWaRE716a/8O820RcRjqTvZnZdQZvOYRVRzQ2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB1309; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB1309;20:wDYFLOK+7GjBH/SyX4GnE2TUrqopaq3InHY2oEQ3k05AygnndrKiVx4bzisdQlRAp301+DSN/KbyErLbYdGubwzwLXyrUjXosNhdGzIHOcdXxjyO+HXR9Iz2t+GDBaMi7DJdHuG1KiPPBUPvFX6qdvVv45cnF5+Ko8mxpyhI/wDz01TpjSbwXl6VwiX66/pDDtnP/GSgwGBbCA4kRmuZbz5Hq3oxdmPG4oy9O1SZrCSigcnagRxuCsmJF78EBiSFmNgYNIJetIWqL4++wH13REtmV5AOYeksdKcLbVKvxclZbPGg174i+eQZNpdyZ0xH/LAUa9jpAogIExBJm7X75ISgM5y3XBOsxPHT6hiUni0=;4:8veWOytWLCUJh04uaeVcReJmsbNFsePpEjhwPUrjdlvEzJZ3Ay5SGOI5cSFqDFTO7UK17aL4Z5PTb8wR3aBWBeuqDJFyiuk5xdHJ2f7hRyAsfGPH7vOE5InCZbR4CRboS82MW+sSFghmm1Gd1fZQUsEsztc3pOrzcCVmHBdb2Kyi8rMNrdBbbxlI+4uiGdEJH9ZQhDN0ZfJ9dkvKoT9TWtoSLLGQES5Y81lj1O9Iiust5n9jUaQDB2miVzS9x7efbYQnkTGoPXk61xYc5kp66OlplJ1nyQnxcXNTK/AM/l4aA8zoGlNG8NKF6fGl+6lpGfdar2WDRTf7/bpR3wJDjVqTzSWOYd/ipk6hKlvKIp+OBWCPoDq4x/r3zsRGl+4G 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:DM2PR0301MB1309;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB1309; X-Forefront-PRVS: 073631BD3D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB1309;23:2olIUyKCRqAZx+WSwAFElnz31SSsbVq3bGEEqVe?= =?us-ascii?Q?BmOfZn025gQhTag8aJlHfU9zgt/Bh8jGflKtFAaLMs+HDmXGhqxxxxJR9wYR?= =?us-ascii?Q?ZpHnjHTFYLS7n0ROxSVk3Cc7HPOiNkPyj93FB7pzLESElQJfD2PaTuIEv9ZY?= =?us-ascii?Q?T9eaYNGmXIQXiyUSpUb3AkedWUJphpDNq9EVJQCxVIlCD2LF4NxXXvgAZZCS?= =?us-ascii?Q?DN7lwU3yWxt5Gob2/R+PuGrliWQ9lngCpSsepdDxYzx5ROjDuvFxUQBRYoXb?= =?us-ascii?Q?esrgy08Mya/gIRfjq1BSZaKL+CF3uOVgTJfrPbp2MO5Ft/UoFJqsY5T++kk2?= =?us-ascii?Q?573+CITTTNZnKsksIYAPy/3txDF6AYOc4/qBKo32s7f6OsXKnwHDVWabPwj+?= =?us-ascii?Q?ipO1sIdMCt9TOexsQN7cNhtPMW2fhk7+UR22gTSD3ojs0UgA1z3QZM8Z210K?= =?us-ascii?Q?eCT5G7Qm1PPMcuAne9GiDCr0W7QyUPmhZDtpcQdDrEuLel+NrZ4lz6tarQhe?= =?us-ascii?Q?NWy0JD6gHkaed1ECwUkByCC3eGX739I2DYP3SFh2rd1+qb2zVY0hPVQqcs9H?= =?us-ascii?Q?9edFwXnljHihqkr4MDQV1xCcSBh9jRCqMQ7T4bA+1hGa4dOBKq8qj5Z2Gswy?= =?us-ascii?Q?GDituokd4pccjYoQcd66M4frbQZyHH/QeziQLZq4ryYH8DluC3eH2s1b1a67?= =?us-ascii?Q?mU6qHV6iE6Xmdj4hBlHRX25DqbztfiFWwvWCkCZtTJA0xvJjx3fbHqUNZhur?= =?us-ascii?Q?NvtHiUr6vFBdBDs6HECl+n/SDL4hERX/tJ55Ex9heNzYoPnX3XkCgR49f41N?= =?us-ascii?Q?7vbkJmzkw/5sp1gfyZEr3tyCX+Bq3dp6RQegZuwhxaCBA4VYyo9gKJcCRogj?= =?us-ascii?Q?H+P1KpDOHX5oxf0bKf7tW19k1Y07Dmm4giL8u4wOdXOgPHTmJHMuIarp5LLn?= =?us-ascii?Q?UVVA6SNV+r/+uE5wf9OxieZYWfqTZAAd264WGYZNPD87WwTEMt5vWyLuLOyc?= =?us-ascii?Q?EB1weUaTzwfWyiMAZaEsnrL3lm00XAS6hFNzrGpJ9BrBEcpLzt0QqSNT6itc?= =?us-ascii?Q?cSOK03A9pcU0ggwtyujrT13WTncwPxv3P0jpphFmG/PJXRwlp7A=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB1309;5:fxJfgv/EFMfs3XcvLQ0iGQKIU24fHuPNPAcBSEAfymomqORCCCM6mG/ftJiZ/6KWc01U0/1oW9dA6E0SrH32cvogHtFwiBM0hPiIdfWPIGL39wFBV1uIOaWEU+/Djw7Y9c0/ThEXwQQx+XV5/6foTw==;24:wzRHy9Waa/kTrIDr3qgc/6vOYjRoAej4yUdMBwoYOPRrPp/pXxb5ihm8y+ftwwb9KAMTS5oDT4jK/IReVCtOwjnkYGnEchR74ICjnf49150=;20:X9vrKopMCtFJXHrAW/8RWev1ewvv0bVGSTrBAjMGN8UbqjkFePWNHWKzK7IpZtaOUioBMc7YByUoK/faFLZd4g== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2015 21:51:04.5220 (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: DM2PR0301MB1309 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