From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757094AbbJVJor (ORCPT ); Thu, 22 Oct 2015 05:44:47 -0400 Received: from mail-bn1bon0079.outbound.protection.outlook.com ([157.56.111.79]:20287 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751465AbbJVJoj (ORCPT ); Thu, 22 Oct 2015 05:44:39 -0400 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; rock-chips.com; dkim=none (message not signed) header.d=none;rock-chips.com; dmarc=bestguesspass action=none header.from=xilinx.com; Subject: Re: [RESEND PATCH v4 3/3] mmc: sdhci-of-arasan: add runtime pm support To: Shawn Lin , Michal Simek , Soren Brinkmann , "Ulf Hansson" References: <1445504810-5642-1-git-send-email-shawn.lin@rock-chips.com> CC: , From: Michal Simek Message-ID: <5628AFFA.5040206@xilinx.com> Date: Thu, 22 Oct 2015 11:44:26 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <1445504810-5642-1-git-send-email-shawn.lin@rock-chips.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-21894.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD048;1:55NmYhRB4I+aTcQVneu7XKRApAL6is0jhlugFg3JX+rOrhjA/I+iXkbDA/P1FwNEk8QkfgwrQoFyATWYS7wlHg23kw4q/yh6mL4W7ZOowEHOdcrhHKSN031JLZE/TRvRjBKUQSDMwHgFb7KAHIFMtKJyKUC+L7g6SBMg9OuqBwhx0RPmyCtI2onOvqooCQmCjCitRGvdHeOd3pcBgxDNyLf7IkMvu7HRMD7ocKlGKq4DVMovB/m/bggs0AcovmM7uA4xrNg4EMlzTAzubWVfvjLRBYVbicmz1UXHqPxTCH+u9UaOMgjbVenL1V2udcPB4fR3jc4+2BB45J5lMEpbHgU+O49JCIhx5YUHH+0Jw3SBXWM6ZOw0Y407ydL4KMo3dpL9zAAHUM4owXQ+VnqQuA== X-Forefront-Antispam-Report: CIP:149.199.60.100;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(438002)(3190300001)(164054003)(24454002)(377454003)(479174004)(189002)(199003)(5007970100001)(64706001)(87936001)(2950100001)(47776003)(59896002)(230783001)(86362001)(5001770100001)(81156007)(4001350100001)(5001960100002)(83506001)(65956001)(46102003)(64126003)(189998001)(77096005)(50986999)(33656002)(76176999)(65806001)(63266004)(87266999)(5008740100001)(23746002)(54356999)(80316001)(36756003)(11100500001)(50466002)(65816999)(36386004)(6806005)(19580405001)(92566002)(19580395003)(106466001)(107986001)(5001870100001)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:BL2FFO11HUB019;H:xsj-pvapsmtpgw02;FPR:;SPF:Pass;PTR:unknown-60-100.xilinx.com,xapps1.xilinx.com;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11HUB019;2:NDCwDnttXZodXwKz9it2tbrT6h3IngyRc9lJH0EMqm83r0h2dzXfRU3SrK3oSa4bH3BGdl0vjTHuIHoFPZXfws+9cIxI0h6MPbMMN0L703iw88qu1eS7Xssp8sYsAgQVd2Zfq56v5e7QBpTzkI9jqFvd6fBV+P4nm8IbFulte8A=;3:glFRZfh8nhi8V02Po6u8ZjVkTtSPgl2laOAUNqDVMoWhLuNcejFZqvqwlSmlfYZhWU656EKeRqSRooIWqAZta+syDNC4oJTSArmQsm0gDSNnv6DIEOzZCpxXB3sRvWGJyQkVEsdSWhmgqSRcMaBTUAnduvSbiVw2pZcvIqwJlt1CEQTkHHUH/OK3efTTs9F+i65maTZ+itPVRw+7SF/G/HkJ/7baY7lWGIJfRi7Ld6znrzQaWUjmrHOlJATzvqc38OSDBmPIS/TtMVIDuhco2w==;25:qCI1h14ZVzwIMKDhdCAtK/yGmXcJj9uCEDWifShEidxq2OYXoQXXavl0UgJnXvJqjYZvOtXRui5QeXic+D5BMATMyIWQ47PGjI+WOP2YNwD0L8xeY7mUd5dGLs+W3ArKNL1ZYhnKrbbs6+/XQRjS4FWFun7zG3c92rOzXa7RV7kTzs1d5o4wn5I2HtpFfvX4WwWMPwrnaXROOb99tlkTCzSj2FGdD4QvJZ6CobWUTEM5SLQ/bXsRke5FExRx8e8IlKmys9s0lxt2i51V+88NyQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501001);SRVR:BL2FFO11HUB019; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11HUB019;20:f354MG/mEf0NGL/FhfAoQlZbfEv+KJTgAE7bDrmtLaGgH2VZZeaGBvCuMlLLwGC7ZJupmUdkFfbtQ5Srlqs8kF+T59qhu6YNes9IkqS3CaL66LgF7FdGngqo+j0YoMkVvmqq1CxPtZ1DZQJmVTvTcNijqQM4aRHae6PkiLk+YqtPq12IowFgkwgeoQ5tVzKMiBPy8Q5aKKoJ0R4Lzk/TPmW/kA2RL+HGp76BUbhB1j+Bsm5tGZQDCxxyP+B9gixCqX/VXxBIB5I6306m6orpsx5/sNsVVk7hkxZqXK8jbXyGaMS4PtdeXKwiTZ132I4hts1uEyTKfOJXeo/Vqt5rmaebUbf1QJhuyf4fvncRaYDqhkn3ip+cG+xzjllw9UgFRyUdgbaLVHJ4iAj4XC++COdeJNvvJazah4UAVniraA9biU/NAn86SD4fHuAnJ1BV1rzuOzwL0C0hqji1EqlRPzdZdIOCOKA3iC9QC6Q9xmcEYNE6bembQnc0lZ0ltGng;4:daUmeRFsqkGaJlQiFraDLcQN7ek2Yii4T/aJdZ/ZVnbOgGJQ462MpyTk22TFB32nGAdTn6ytidrBumk3DQIy6W73XER/BbEac2DJ6BeK2/xNmo41m0FOTI0R9OtxiHxwW3Qvq3gINW2rGqrT5zTN0IcTTb8ajPamWjemj8highcQd5y1z/JIvEjAbtZ2yBsGgkoL1uL3sEa2dWJ3QHG2j9vlW85HVFGV15c1Sj2g39w6c1a1/scuW4ltptxyZuyy/bjmqp670XeiqT+XwoOyCbBdd1ahMrO+xI3E94R1s4z7YqHRh8kzdU1oo/c0x7LrISgFbxFENidslQ93I97ERKp8m44jQhP969Pyh6meFeQlxYAUoTCnsaagT0RJlgBmbcPLjYoWdccoobiuNSowmkOSCaOjVQv9t7JTrCaybW4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001)(10201501009)(10115024)(102215026);SRVR:BL2FFO11HUB019;BCL:0;PCL:0;RULEID:;SRVR:BL2FFO11HUB019; X-Forefront-PRVS: 0737B96801 X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BL2FFO11HUB019;23:Ga524SYSBN9GJ7vw8DKBqeNruRT1wMnvBxJi?= =?Windows-1252?Q?nqdEZr7SQ/JLWNJpPMAWCEhbyIHWVTDHn7P6ERfqU/MpMU5fHTfhwgZb?= =?Windows-1252?Q?1wR+1saHQOwFeKfrAQkdsdny6tdtqSXsgtKI4pwpBunHbe+qGOZdiKIA?= =?Windows-1252?Q?dIH19MUZ6+151apU7uXWFtRRuarEaoDZRul8vyd3jCc2MM20AoDaN2Th?= =?Windows-1252?Q?wEiMaHmjOdP+KCGKxCcc7PuFy+aScTSQoqyuaJpAa15H554JlTY0ziAV?= =?Windows-1252?Q?MrotnqASsL5+YgKjfI+eVIosYTJl2ncfsaPrwYoSUvYYTfwKZc/vjil8?= =?Windows-1252?Q?+bewKZggT2jerUnNsUE7QsRnbPF3PEfN3oUwN8QmYP8r8yV6SHfQI22/?= =?Windows-1252?Q?Vmg5yzN1Nvrzc3kfoekWjNchbADF10Wj0lxUDgDxyfVIxas+vJNvl/be?= =?Windows-1252?Q?IcirZf0LpOJekPxgDZxPiWkbuZn59DbG4neM4PvqEeEWhBjT3H9C7gnY?= =?Windows-1252?Q?icaBuA75Sded0E7XqznpoPe9cxQQnBWnzbaf78xecLATynPH0pckHw/+?= =?Windows-1252?Q?YKt5TeNcjOrNVbJRbqROrQYPAFlwADzvQ8O8VQolB8H5b25Hmpetx0wn?= =?Windows-1252?Q?aYyyUeHi2ntssLHgE3Sihc5eVJIC55zj2gwJGVYQ1113KmSWA4pQ7ZfO?= =?Windows-1252?Q?o9nYLcEHwObEDlj80bCon1Cf5uxBFAwivOrOGcdJ/NSKBFiT7N59sGMf?= =?Windows-1252?Q?PQbYunE6NR16uMDKpne7fRD7ij58V6vJLhwadw/L4Ra1yb/gL3OEURfY?= =?Windows-1252?Q?/dL49gkUFKPEdxzjQ9wckpa6FwutkU3+L87NLe/TNTyuNOpkxQENqVwX?= =?Windows-1252?Q?+aZk6US/M6k47/56kJMQtxETwbOKy19hdYKpGrSXPeQSegXYNJ+6e93B?= =?Windows-1252?Q?z+HIZXnX0ir9PBvEWwiMYAOIPPO94xjXg4bPBB0MmNGIevIJb635455v?= =?Windows-1252?Q?ywAkpc2x+3vc799Uav4m3H1ZwnfWemLl2lXIiMIv0vD5+zSmNhqxc1oD?= =?Windows-1252?Q?F3/HTA/A1E9gg5RgVBYa75nciMzxARdu5NMJcZrVNgImSThaFA/XxojM?= =?Windows-1252?Q?BZEkhK8ktb14aIJ24VKENaAp1MZyqu5TrW20OUoNzJLYBgtelldelGZk?= =?Windows-1252?Q?5ZNsTK1D//E6KdWjb/rjRoSNANgayT2a+TS8KrqQ9jkO+n8BrlB3vCk8?= =?Windows-1252?Q?OGMvZLfx3g/s+nSTis7HZg5hbg6CPP3uiwtJ8AiJkx+Kaw5qdmJeoCE9?= =?Windows-1252?Q?8NoAfdJxEk0mEwPOV/VthXLFG+PgxjIpj66W/LaSGfBNvJsLYAr58xen?= =?Windows-1252?Q?V9YlUyBKCaiyFY6pBwFh9xHQg8/foF8M1BNM3TN4mSew03JAb37igjYX?= =?Windows-1252?Q?SFURxp3qajMRC87H6T6W?= X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11HUB019;5:IELOSeL3f6fCDFtxuPiI/UrQHgRDS6V2/56dyE9+78qKIxvLt4CJDGaM3cbBhIkSu8jxsHhpG2+wRkSwOs5yyZwS3E5QHHS9jDXu/OUOD21/5x/8j0A3fxQS1c7/CVb1JJowQiW5IYSai/2pBdEhvA==;24:CFArinZypljPO7Vbj6F8DATzv9xjjW8rLAJ+1fWZBdcVK0SVfb8FlxBbSwiLEOrSJ9OlkqBnKJtCcdnK8IYZmGXKrOTF3hE9kigTIj3iPFs= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2015 09:44:36.9649 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.100];Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2FFO11HUB019 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11HUB021;2:X6t+UhTHONetNnWzzOs1xDGbLZZwbkWWmB4JBh20VM9kxNmLaLgIPkNsf1ic10v2PpO5hOgPsR4Vn6hQpr8BqaVKNozCK/qy2UFXLfWelEMm/ZojcxS7Q+BZEii8qrMELDudclvDV3tR7WShHT/wYlzwKFs4gy8zErogm4g6UCs=;23:JOW0xq+R1I70z+jZ3LWS1Au6MUZZilQaW0DuXigk8YuJ0e9CE+S5kYLlDSMOi6Uh8VlnW8lK6CAsRQ5epBT5lS+pwLciMlEfrjnjvtjCNvwrfymCR/PjB7q2coK6yMPQrUZDMd4/BWPAvI6OqCWqqsqXpVInS/xL/bLNsHPy4qXmOX9Pd8ejkSRUiyZohpFL X-OriginatorOrg: xilinx.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/22/2015 11:06 AM, Shawn Lin wrote: > This patch add runtime_suspend and runtime_resume for > sdhci-of-arasan. Currently we also power-off phy at > runtime_suspend for power-saving. > > Signed-off-by: Shawn Lin > > Serise-changes: 4 > - remove ifdef for PM callback statement > - fix missing pm_runtime_set_active > - remove pm_runtime_dont_use_autosuspend from remove hook > - add pm_runtime_force_suspend|resume for PM callback to > deal with suspend invoked from rpm > - remove wrappers of phy ops > > --- > > Changes in v2: None > > drivers/mmc/host/sdhci-of-arasan.c | 85 ++++++++++++++++++++++++++++++++++++-- > 1 file changed, 82 insertions(+), 3 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c > index 4f30716..fb1915c 100644 > --- a/drivers/mmc/host/sdhci-of-arasan.c > +++ b/drivers/mmc/host/sdhci-of-arasan.c > @@ -30,6 +30,8 @@ > #define CLK_CTRL_TIMEOUT_MASK (0xf << CLK_CTRL_TIMEOUT_SHIFT) > #define CLK_CTRL_TIMEOUT_MIN_EXP 13 > > +#define ARASAN_RPM_DELAY_MS 50 > + > /** > * struct sdhci_arasan_data > * @clk_ahb: Pointer to the AHB clock > @@ -71,6 +73,46 @@ static struct sdhci_pltfm_data sdhci_arasan_pdata = { > SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, > }; > > +#ifdef CONFIG_PM > +static int sdhci_arasan_runtime_suspend(struct device *dev) > +{ > + struct sdhci_host *host = dev_get_drvdata(dev); > + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); > + struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv; > + int ret; > + > + ret = sdhci_runtime_suspend_host(host); > + if (ret) > + return ret; > + > + if (!IS_ERR(sdhci_arasan->phy)) > + phy_power_off(sdhci_arasan->phy); > + > + clk_disable(sdhci_arasan->clk_ahb); > + clk_disable(pltfm_host->clk); > + > + return 0; > +} > + > +static int sdhci_arasan_runtime_resume(struct device *dev) > +{ > + struct sdhci_host *host = dev_get_drvdata(dev); > + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); > + struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv; > + > + clk_enable(pltfm_host->clk); > + clk_enable(sdhci_arasan->clk_ahb); > + > + if (!IS_ERR(sdhci_arasan->phy)) > + phy_power_on(sdhci_arasan->phy); > + > + return sdhci_runtime_resume_host(host); > +} > +#else > +#define sdhci_arasan_runtime_suspend NULL > +#define sdhci_arasan_runtime_resume NULL Remove these 3 lines - they are not needed. > +#endif > + > #ifdef CONFIG_PM_SLEEP > /** > * sdhci_arasan_suspend - Suspend method for the driver > @@ -87,6 +129,12 @@ static int sdhci_arasan_suspend(struct device *dev) > struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv; > int ret; > > + ret = pm_runtime_force_suspend(dev); > + if (ret) { > + dev_err(dev, "problem force suspending\n"); > + return ret; > + } > + > ret = sdhci_suspend_host(host); > if (ret) > return ret; > @@ -140,18 +188,39 @@ static int sdhci_arasan_resume(struct device *dev) > } > } > > - return sdhci_resume_host(host); > + ret = sdhci_resume_host(host); > + if (ret) > + goto err_resume_host; > + > + ret = pm_runtime_force_resume(dev); > + if (ret) { > + dev_err(dev, "problem force resuming\n"); > + goto err_force_resume; > + } > + > + return 0; > > +err_force_resume: > + sdhci_suspend_host(host); > +err_resume_host: > + if (!IS_ERR(sdhci_arasan->phy)) > + phy_power_off(sdhci_arasan->phy); > err_phy_power: > clk_disable(pltfm_host->clk); > err_clk_en: > clk_disable(sdhci_arasan->clk_ahb); > return ret; > } > +#else > +#define sdhci_arasan_suspend NULL > +#define sdhci_arasan_resume NULL Remove these 3 lines - they are not needed. Thanks, Michal