From patchwork Fri Jun 29 09:15:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 10495909 X-Patchwork-Delegate: rjw@sisk.pl Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3F62E601C7 for ; Fri, 29 Jun 2018 09:16:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3BA52297BD for ; Fri, 29 Jun 2018 09:16:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2DE59297BE; Fri, 29 Jun 2018 09:16:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C2B99297A5 for ; Fri, 29 Jun 2018 09:16:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935452AbeF2JQG (ORCPT ); Fri, 29 Jun 2018 05:16:06 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:35077 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966393AbeF2JPz (ORCPT ); Fri, 29 Jun 2018 05:15:55 -0400 Received: by mail-lf0-f66.google.com with SMTP id i15-v6so6289714lfc.2 for ; Fri, 29 Jun 2018 02:15:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=CLMRKj5KWuRuKyfAm+vqQVbCS5qqfMLjSG1gP+Lq7Fo=; b=T7JlmJ3adtCzonlNNnHELinEW8KnBamU7j6BidBXRIBYaSnPSEuuZf0bBViLm+xTdl /VEoHmt1ZGWb7591wRo2TgqKo77j0xgimXtVem6kwrCBZN5+37XUgAZBkaeEGc0RvK4U xy+eWbF3R56DguZty7SwvZzIifg/S+tSzLAtU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=CLMRKj5KWuRuKyfAm+vqQVbCS5qqfMLjSG1gP+Lq7Fo=; b=eZKNTVO+6t9UKPDfwg2/MPIViCpQfH+AvpxBvE6NMh7kBH27SLmNrZ90GifMZq2rWl U88/DftHpt4QVAosZW3sUsi5+3vYe5JTz1lG2C9FKgYZdF1OxS2K60Ips8DlnjZIL0p7 fmos89FX2YgUUIIKSV22F++YP5LIAc6jxwOK0paB289xzuxXZKtvGTYm8CyQP/yX2goP 7QiX4hBduNMi5wf+/Ar3uw5bEAwjjyzFGiAReHs9QP0HyU/R/h+WzQcIGKS8GhwrwL8o 3rldVh/s2OgPd8T6+DeXOc5yXRRvHZ5SjXP47JdPks1MncQHjz9uM6aIBR/yRZyf5d+W uRpw== X-Gm-Message-State: APt69E062obTucuLnbZPKCGLfj5suyYGdgQMZL5qFn15G3x40T/Fanu1 0MX1UmagJcuqVaZDp98j+xN33A== X-Google-Smtp-Source: AAOMgpfNgQ4PjMuSfKZNTVOV2edndrZ+ZOPkwqzKY7H1VKNkxaFzH/5caJY48ZAzoP9H34c5VbZymw== X-Received: by 2002:a19:dd81:: with SMTP id w1-v6mr9767661lfi.114.1530263753579; Fri, 29 Jun 2018 02:15:53 -0700 (PDT) Received: from localhost.localdomain (h-158-174-22-210.NA.cust.bahnhof.se. [158.174.22.210]) by smtp.gmail.com with ESMTPSA id v24-v6sm808963ljc.24.2018.06.29.02.15.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 29 Jun 2018 02:15:52 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: Ulf Hansson , Jon Hunter , Geert Uytterhoeven , Todor Tomov , Rajendra Nayak , Viresh Kumar , Kevin Hilman , linux-arm-kernel@lists.infradead.org, linux-tegra@vger.kernel.org, linux-arm-msm@vger.kernel.org Subject: [PATCH] PM / Domains: Don't power on at attach for the multi PM domain case Date: Fri, 29 Jun 2018 11:15:37 +0200 Message-Id: <20180629091537.26864-1-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.17.1 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There are no legacy behavior in drivers to consider while attaching a device to genpd - for the multiple PM domain case. For that reason, let's instead require the driver to runtime resume the device, via calling pm_runtime_get_sync() for example, when it needs to power on the corresponding PM domain. This allows us to improve the situation during attach. Instead of always power on the PM domain, which may be unnecessary, let's leave it in its current state. Additionally, to avoid the PM domain to stay powered on, let's schedule a power off work. Fixes: 3c095f32a92b ("PM / Domains: Add support for multi PM domains...") Signed-off-by: Ulf Hansson Acked-by: Viresh Kumar --- drivers/base/power/domain.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index c298de8a8308..9e8484189034 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -2235,7 +2235,7 @@ static void genpd_dev_pm_sync(struct device *dev) } static int __genpd_dev_pm_attach(struct device *dev, struct device_node *np, - unsigned int index) + unsigned int index, bool power_on) { struct of_phandle_args pd_args; struct generic_pm_domain *pd; @@ -2271,9 +2271,11 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device_node *np, dev->pm_domain->detach = genpd_dev_pm_detach; dev->pm_domain->sync = genpd_dev_pm_sync; - genpd_lock(pd); - ret = genpd_power_on(pd, 0); - genpd_unlock(pd); + if (power_on) { + genpd_lock(pd); + ret = genpd_power_on(pd, 0); + genpd_unlock(pd); + } if (ret) genpd_remove_device(pd, dev); @@ -2307,7 +2309,7 @@ int genpd_dev_pm_attach(struct device *dev) "#power-domain-cells") != 1) return 0; - return __genpd_dev_pm_attach(dev, dev->of_node, 0); + return __genpd_dev_pm_attach(dev, dev->of_node, 0, true); } EXPORT_SYMBOL_GPL(genpd_dev_pm_attach); @@ -2359,14 +2361,14 @@ struct device *genpd_dev_pm_attach_by_id(struct device *dev, } /* Try to attach the device to the PM domain at the specified index. */ - ret = __genpd_dev_pm_attach(genpd_dev, dev->of_node, index); + ret = __genpd_dev_pm_attach(genpd_dev, dev->of_node, index, false); if (ret < 1) { device_unregister(genpd_dev); return ret ? ERR_PTR(ret) : NULL; } - pm_runtime_set_active(genpd_dev); pm_runtime_enable(genpd_dev); + genpd_queue_power_off_work(dev_to_genpd(genpd_dev)); return genpd_dev; }