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: 936721 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="T7JlmJ3a"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41H9xN3jydz9ry1 for ; Fri, 29 Jun 2018 19:16:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935450AbeF2JQG (ORCPT ); Fri, 29 Jun 2018 05:16:06 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:32963 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966399AbeF2JPz (ORCPT ); Fri, 29 Jun 2018 05:15:55 -0400 Received: by mail-lf0-f68.google.com with SMTP id u14-v6so1252969lfu.0 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=Jx+oUP6CrDUykUqAaqTVsgCFTZDNdF1yHxlM/ogXGqfk6HdxeBjYiWFQaLe3hmlDn/ soAW4b0XRtlcBXBW3EJFt4O0p4oduQg7LlMZk1tlD9+3hbfRFEuVtjfiQN8rtKt6ng7I wXzkJ6Bhu/jNcfXaNLxF7VSusbE2BxzZZkAirh4yrDtAKwX7WPF+xigX1Cwhta7tg3Tp sXZHHpCM6oyo2EJSW77xQMISEXsx5R+FyyukDYZ7GDY5c6bAaHqf9mge+N1UfaXbrJGp e9WXRQWcdZ2nBAV2rv76s+7MWmFLFa1j0xeoFQG3EOCmXG5oF2qVrHEVy4xesYSqbcdA sAhA== X-Gm-Message-State: APt69E3FjQVflyhe44X5CzhbO/fkq7Y6IrjWuB7iFMflNHLTc7ZPwjVx OFtut6ckwIFVD5ySSL3o7WAN+A== 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-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org 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; }