From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932753AbbBIK7j (ORCPT ); Mon, 9 Feb 2015 05:59:39 -0500 Received: from mailout3.samsung.com ([203.254.224.33]:29074 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932339AbbBIK7f (ORCPT ); Mon, 9 Feb 2015 05:59:35 -0500 X-AuditID: cbfee690-f79ab6d0000046f7-c5-54d89315e6e2 From: Amit Daniel Kachhap To: linux-pm@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, khilman@linaro.org, rjw@rjwysocki.net, len.brown@intel.com, ulf.hansson@linaro.org, tomasz.figa@gmail.com, kgene.kim@samsung.com, s.nawrocki@samsung.com, thomas.ab@samsung.com, pankaj.dubey@samsung.com, m.szyprowski@samsung.com, geert+renesas@glider.be, Amit Daniel Kachhap Subject: [PATCH RFC v4 2/3] PM / Domains: Save restore slave pm runtime devices Date: Mon, 09 Feb 2015 16:32:05 +0530 Message-id: <1423479726-23140-3-git-send-email-amit.daniel@samsung.com> X-Mailer: git-send-email 2.2.0 In-reply-to: <1423479726-23140-1-git-send-email-amit.daniel@samsung.com> References: <1423479726-23140-1-git-send-email-amit.daniel@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprCIsWRmVeSWpSXmKPExsWyRsSkSld08o0Qg95uZYuGqyEWc2dPYrTo XXCVzeLr4RWMFrOm7GWy2PT4GqvF5V1z2Cw+9x5htJhxfh+Txdojd9ktFm39wm5x5vQlVovD b9pZLTqWMVqs2vWH0eL42nAHAY+JZ3U9ds66y+6xeM9LJo871/aweWxeUu+x5Wo7i0ffllWM Hp83yQVwRHHZpKTmZJalFunbJXBlrD38iq1gr0DFoz+n2RsY9/F2MXJySAiYSPzsucIGYYtJ XLi3Hsjm4hASWMooMfHkSlaYor0t85khEosYJa6tXMAK4Uxgkjjb+YgFpIpNwFji58797CC2 iICMxNQr+8GKmAUWMEscnbQYrEhYwF/i8bQXYEUsAqoSN3qPgdm8Au4S30//YoRYJyex5dYj sDingIfEjNNtYLYQUE3HqQWMIEMlBN6yS0zdv5kVYpCAxLfJh4AWcAAlZCU2HWCGmCMpcXDF DZYJjMILGBlWMYqmFiQXFCelF5noFSfmFpfmpesl5+duYgRG1ul/zybsYLx3wPoQowAHoxIP 74XP10OEWBPLiitzDzGaAm2YyCwlmpwPjN+8knhDYzMjC1MTU2Mjc0szJXHe11I/g4UE0hNL UrNTUwtSi+KLSnNSiw8xMnFwSjUwVs4/yfX/yrv8o5UpXXOfnHhy4sGbMwtnTk2LKNp/4JK6 WVZgsk38+7BYoc1ajlElDwJ/Ld+57vieZ7kTNpgf01F8ckkwNGpW8BmZqLp7lcdUMquEL8Yd Wst3saA4sPrymQV3HhpxWF6Zovjwdk7I+WsKAcLObyViWFYJvlp6PHqR6O/GtUIefkosxRmJ hlrMRcWJAGjK+ginAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrHIsWRmVeSWpSXmKPExsVy+t9jAV3RyTdCDCb2SVo0XA2xmDt7EqNF 74KrbBZfD69gtJg1ZS+TxabH11gtLu+aw2bxufcIo8WM8/uYLNYeuctusWjrF3aLM6cvsVoc ftPOatGxjNFi1a4/jBbH14Y7CHhMPKvrsXPWXXaPxXteMnncubaHzWPzknqPLVfbWTz6tqxi 9Pi8SS6AI6qB0SYjNTEltUghNS85PyUzL91WyTs43jne1MzAUNfQ0sJcSSEvMTfVVsnFJ0DX LTMH6HwlhbLEnFKgUEBicbGSvh2mCaEhbroWMI0Rur4hQXA9RgZoIGENY8baw6/YCvYKVDz6 c5q9gXEfbxcjJ4eEgInE3pb5zBC2mMSFe+vZuhi5OIQEFjFKXFu5gBXCmcAkcbbzEQtIFZuA scTPnfvZQWwRARmJqVf2gxUxCyxgljg6aTFYkbCAv8TjaS/AilgEVCVu9B4Ds3kF3CW+n/7F CLFOTmLLrUdgcU4BD4kZp9vAbCGgmo5TCxgnMPIuYGRYxSiaWpBcUJyUnmuoV5yYW1yal66X nJ+7iREct8+kdjCubLA4xCjAwajEw3vx8/UQIdbEsuLK3EOMEhzMSiK8+3tuhAjxpiRWVqUW 5ccXleakFh9iNAW6aiKzlGhyPjCl5JXEGxqbmJsam1qaWJiYWSqJ8yrZt4UICaQnlqRmp6YW pBbB9DFxcEo1ME5VVJ/xT1FgxtppJzZNL6iwXXjsvVpR88Ev1V+mGx3n+Ox7s2mNp871nsPG L64uLH6ivyOs20zl68c53Pffvjbe6yr2fEH3irKVh/0ftjXqbFz6K0qgn0X5U43TvLfzr0iv nvjF7o2OlMSjpm9Pc8rPmq2cLXNChtW6z+aHll/1pIj4+bwn5uopsRRnJBpqMRcVJwIAedP+ ZPECAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Based on the runtime request of the active device, the callbacks of the passive pm runtime devices will be invoked. Signed-off-by: Amit Daniel Kachhap --- drivers/base/power/domain.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index c5280f2..160e74a 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -49,6 +49,7 @@ static LIST_HEAD(gpd_list); static DEFINE_MUTEX(gpd_list_lock); +static void __pm_genpd_restore_devices(struct generic_pm_domain *genpd); static struct generic_pm_domain *pm_genpd_lookup_name(const char *domain_name) { @@ -176,6 +177,8 @@ static int genpd_power_on(struct generic_pm_domain *genpd) pr_warn("%s: Power-%s latency exceeded, new value %lld ns\n", genpd->name, "on", elapsed_ns); + __pm_genpd_restore_devices(genpd); + return ret; } @@ -397,6 +400,9 @@ static int __pm_genpd_save_device(struct pm_domain_data *pdd, struct device *dev = pdd->dev; int ret = 0; + if (dev->power.slave == true) + gpd_data->need_restore = 0; + if (gpd_data->need_restore > 0) return 0; @@ -453,6 +459,28 @@ static void __pm_genpd_restore_device(struct pm_domain_data *pdd, } /** + * __pm_genpd_restore_devices- Restore the pre-suspend state of all device + * according to the restore flag. + * @genpd: PM domain the device belongs to. + */ +static void __pm_genpd_restore_devices(struct generic_pm_domain *genpd) +{ + struct pm_domain_data *pdd; + struct generic_pm_domain_data *gpd_data; + struct device *dev; + + /* Force restore the devices according to the restore flag */ + list_for_each_entry(pdd, &genpd->dev_list, list_node) { + dev = pdd->dev; + gpd_data = to_gpd_data(pdd); + if (dev->power.slave == true) { + gpd_data->need_restore = 1; + __pm_genpd_restore_device(pdd, genpd); + } + } +} + +/** * genpd_abort_poweroff - Check if a PM domain power off should be aborted. * @genpd: PM domain to check. * -- 2.2.0