From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932308AbbJ0WTT (ORCPT ); Tue, 27 Oct 2015 18:19:19 -0400 Received: from mail-bl2on0137.outbound.protection.outlook.com ([65.55.169.137]:60672 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752138AbbJ0WQw (ORCPT ); Tue, 27 Oct 2015 18:16:52 -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 v7 1/7] mtd: nand: gpmi: add gpmi dsm supend/resume support Date: Tue, 27 Oct 2015 17:05:34 -0500 Message-ID: <1445983540-27155-2-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1445983540-27155-1-git-send-email-b45815@freescale.com> References: <1445983540-27155-1-git-send-email-b45815@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD042;1:GBJuZBNTQtP+br6gbvDDGrv0tnOysSGBsTfIffpS3+j4kM5DeVHFJL6KNjLMvxM9cK5Md7OF1vPBhKW0pcan4A60uYxAaDDusiJYkC06YVRwGzmmcTiTOTQK5Nda7mFe3sIGbD9+WDNasYnXeUIcTD6IyNeidb+DTDbp5WDJbM885KZts4DabG1Yeqe8lY/tJndpWy62uv9XUBCNIdS37D3PlD4klb/kGaoN7+YjW5eTGsg9rEbFCAxsJKkYe0qQTFXQfW4onKXJOg7CdjwhKO2DpjIcE+KUMGOYueNsBLqv3SliNnGFtHpKj9bVS7CstVe8hcJXrnyUARvE2gkZLYluW1Sm/hVTMnDtSgI28DBvWSz+lWWiiDGxmqywSROL5G6HZL807sJHTuUoTTp6xg== 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)(50226001)(6806005)(19580395003)(50466002)(92566002)(48376002)(47776003)(19580405001)(33646002)(5008740100001)(77096005)(2950100001)(5007970100001)(97736004)(81156007)(50986999)(76176999)(105606002)(104016004)(106466001)(11100500001)(36756003)(87936001)(2351001)(229853001)(5003940100001)(85426001)(189998001)(110136002)(5001960100002)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:BL2PR03MB548;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;BL2PR03MB548;2:mKb7jxgQgJijAz9nH9y4cBkRaeHGCZNhAMIb7A2Ee8wos8ZGLxUq/VOMWzQu+zdHdxvjevFH0qs13wda5cVUqrfeng1WO4G8sp3vAjQ+Ih2InrZjqR0m+263seA82g56iyUD0id1BxEfuHdlsP1CDwoeS104SSXvZf7QdMAeVuA=;3:APlHGHGqIp8H6fm+3vLt2EY2Objlpi6Uu28CmyUFDqoEm0pL6DQoQixn1kxZ+9ik+1rB7sCwIaXxuYvoGujKmAR7doi1Fu+ob/taaCOB0tO7//fq25pqHiiQXA/Sqall2f9Y520B2TapsmneHraOBPXQIA4GTWlc499FlDFRPt/dJdvZWMCggKXfP9HYdlKllhglqIPMBxo1xtwOqK7QN+R1XJtdpX4all/jgPqJfN8=;25:9pzN5ggq6Uj73/2UoQKtfzV/aEnh9A/nyxJAqDDQPS+tWLYOqalqRnHG/S9tHB43VbbrT3v9dm3kg9k13YTVybGODcej+oq8/qPthkGtt60fuCQhlw3EEjzjc9lZtkwqEPCspKJBJKWzl0uYooZZuBFMGTqBVBreVQYVKsN2Ihrr8q6Wv/SsrVrbU0gIFbpsCTigocMCrBa8fmjZMUuOHSPhVrjcnIcP+V5+m/1GuK3ca89BI4T3ljHTA4EuXgQwfqZo0W6xzA3jt1h4rtjnRg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB548; X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB548;20:CCocGFKbCCLmB0ip98Wf1TioJZjaV0gSitdRGITXwNAXSD0TYj94ML5s92EOut7hbOmKAJT6y6aUbL+wxqwXl6Ma1U2QQjmLp6EdxH0gCR++pR8bhkVBCAl5HS205Z+LRBXoxgmDwRiNZggkbCRpdj8IUF8lpfeIYDX643QCLXRhlMAVufQWoiOf5eBuYoPOZPCPb1/Z2d6DRqkMqfoSlrVwQcuFtICRyX+IVgKkNVUpvtL4pAZp2Mi3JjKqKdEleWkleFpvR7fy77zX9/CKAefxCtez4nl3wiCDUeuZBG8Fn/Odgqj0Fa6a6ez0onvF3gS9SqZhLpEu/s0Gd4zGlWHDKgkV22qIfbPlf5YLQDQ=;4:QZ04iq4nJ4ZaikrDS2XE7Uu5CzkuKxFVqRcpG8fkI0vPws1viW3i+91vp3cGgJacv1GtWTAoOGXZwXGz3yRncta/PZNN2O6pkc5lJgMEtj9A33uthi3cOFNYnbrT1lcQYntCjE1GSa/n0rdsYvKSB4E9SZ/yTSoA8zhf7R5qB0vm9ls2HzrjYqimXwqBa504DWDDgkWBUzIGqh/7g2ZszE17VxudFjC9C+FVT6iHquhxlG4BnJpK6uTE4PucdswX4cwK6+eFO3xWtepDAdCIf0cO9+KuH+11vfbASAJ0cc2G+HPXqkKp9Ww3rb3VgxRFLorxItZ1zTqxaRB+8HRhmKbwIlUJTNBFPeQACRO7Zaamb7rBUrt6kOkYh+kK7aTX7lHi6grLW4D+Kkm99viAqw== 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)(5005006)(520078)(3002001)(10201501037)(102215026);SRVR:BL2PR03MB548;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB548; X-Forefront-PRVS: 0742443479 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BL2PR03MB548;23:5oe2AcdfHYHBkGW0y0JtOdU3cFIB4RuD7gqz9TW8uz?= =?us-ascii?Q?wra/WRcPwrMZZhx8Z+PuC1OftnEhDZpPk/SnHFeTw8lMXuEXZ3yh+a84upAX?= =?us-ascii?Q?Z2Gw8XTRd3f4s/IlDPS938BogSCPVaN79XtVWSe+z14CpQNtgL3D1hU/zjsq?= =?us-ascii?Q?jcg8nWqW/4t1/EdaeYURkEVGbKw75ity6aPN5TWkgKijTc/mrVk4HgRPQ1Sj?= =?us-ascii?Q?WtKAIXFkq0IxeV+e9CExTwF4pJiGfyLu9VAmbTHClxy69xsP/G+L2mhePvEK?= =?us-ascii?Q?gw3luASImum5BzWCWGrLS7Wg732DtXRNXZnzJUJxyaWr3aGbMZFoo86Mxsou?= =?us-ascii?Q?b2BhsFrWmxPE/wWvPZ8MSBGh9H2hxBs55Qi6AzLWElA9ZZHzAuotTlbuJyU4?= =?us-ascii?Q?Xnk7EntyAZ8r02Gzerk7PyQczhnbOLDps3GgVQZg2R0uzftmcd+LEi7ykqff?= =?us-ascii?Q?XYmYFJPneYg0iGOzjThfXfLMpAgG0gPRIMcrzirnJCN6ptjtCPEqqyNAs5Nv?= =?us-ascii?Q?WDCv+NSrv4LXdg/h4haFmAKe8WmpQ9q2o6t1LcMOuXOmTOCPSyd/iV4jebIC?= =?us-ascii?Q?Dk83ybnqksCVm4giMsEO7f5bjzCL+MGZk1VzixoItkVoK3rG8lbfXvINbB9I?= =?us-ascii?Q?bcnl+yfV32S7DNOsogLB3XxhGo+uMarpVnpZj7QJHg26t7imA397b7a2Tffu?= =?us-ascii?Q?5lFitPNnoucwUw3yyVy8PCxuDrNw4yEa+ok1aPgO2p8UUEoldhT1e9pSMl2L?= =?us-ascii?Q?NT+OcydiYhEvnI/2X3W1qqyXfsMM2BIhp+oC93Pzr5MIzCwRedorvxzmQADD?= =?us-ascii?Q?x8jEB30QvcA75ysw0P/ZdIhtFOqaReSc2eRz9Rym7vmEqRMlLZXCAPALIvQM?= =?us-ascii?Q?MKIiqELI4ewOohIdDIBov1vG+Lc8EikBM4lGhXSBGsZnLJ9VybwqsRh5yAfW?= =?us-ascii?Q?RPPDbZFRV+CUMivv89d7TdaVe72va+DeWgc/GOcwQZUIuBS/BR9pCpfEiy1S?= =?us-ascii?Q?0uEGS8Aji69k7tBfHhio27ePReh75rJd61ZjHBdI/EEw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB548;5:mG05JufujgbviYwG0rDnGTrjnHgxM6YNvfIMIQqkWyHxaJp9OuYYDktBNmwP1S/wkHi8W8yQVl96PrLUON1iUd2gmJ/cYnYHwzWmzBXSXwwzCt1HIo1uw2x9lJateh70YhSppeqtmhlndec9mwCPIQ==;24:O8d5v493cbaVEJB8ygDDeb2KBAg4UEHvwUSMu+ncOooXu95irB5pY4aVyWQ5k2/vf0grSAxAI2mYalsxFrYhzwBdkj2soOJ0I4+dVyaNO2w=;20:n+SeUyGLrepTJcNVKWEUnjUjZP1iularGKOdk+GX6KH7bRIkYKhcP8hdJ0B8djVAX8JC/fK9+2v1uvY51B/Rgg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2015 22:16:49.5922 (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: BL2PR03MB548 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 | 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 2064ada..0961b93 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,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, -- 1.9.1