All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulf Hansson <ulf.hansson@linaro.org>
To: "Rafael J . Wysocki" <rjw@rjwysocki.net>, linux-pm@vger.kernel.org
Cc: Bjorn Andersson <bjorn.andersson@linaro.org>,
	Stephen Boyd <sboyd@kernel.org>,
	Saravana Kannan <saravanak@google.com>,
	Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
	Kevin Hilman <khilman@kernel.org>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	linux-kernel@vger.kernel.org
Subject: [PATCH] PM: domains: Don't attach a device to genpd that corresponds to a provider
Date: Fri,  9 Jul 2021 14:56:11 +0200	[thread overview]
Message-ID: <20210709125611.135920-1-ulf.hansson@linaro.org> (raw)

According to the common power domain DT bindings, a power domain provider
must have a "#power-domain-cells" property in its OF node. Additionally, if
a provider has a "power-domains" property, it means that it has a parent
domain.

It has turned out that some OF nodes that represents a genpd provider may
also be compatible with a regular platform device. This leads to, during
probe, genpd_dev_pm_attach(), genpd_dev_pm_attach_by_name() and
genpd_dev_pm_attach_by_id() tries to attach the corresponding struct device
to the genpd provider's parent domain, which is wrong. Instead the genpd
provider should only assign a parent domain, through
pm_genpd_add_subdomain() or of_genpd_add_subdomain().

Let's fix this problem in genpd by checking for the "#power-domain-cells"
property in the OF node for the struct device that is about to be attached.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---

This turned up when I was reviewing a couple of genpd realted Qcom patches [1],
from Dmitry Baryshkov (on cc).

I haven't been able to run much tests, so help with that would be greatly
appreciated. If someone encounter issues, I am happy to help to fix those.

Kind regards
Ulf Hansson

[1]
https://lkml.org/lkml/2021/7/9/7
https://lkml.org/lkml/2021/7/9/8

---
 drivers/base/power/domain.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index a934c679e6ce..21991fb56a19 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -2699,6 +2699,10 @@ int genpd_dev_pm_attach(struct device *dev)
 	if (!dev->of_node)
 		return 0;
 
+	/* Don't try to attach a genpd provider. */
+	if (of_find_property(dev->of_node, "#power-domain-cells", NULL))
+		return NULL;
+
 	/*
 	 * Devices with multiple PM domains must be attached separately, as we
 	 * can only attach one PM domain per device.
@@ -2737,6 +2741,10 @@ struct device *genpd_dev_pm_attach_by_id(struct device *dev,
 	if (!dev->of_node)
 		return NULL;
 
+	/* Don't try to attach a genpd provider. */
+	if (of_find_property(dev->of_node, "#power-domain-cells", NULL))
+		return NULL;
+
 	/* Verify that the index is within a valid range. */
 	num_domains = of_count_phandle_with_args(dev->of_node, "power-domains",
 						 "#power-domain-cells");
-- 
2.25.1


             reply	other threads:[~2021-07-09 12:56 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-09 12:56 Ulf Hansson [this message]
2021-07-09 13:06 ` [PATCH] PM: domains: Don't attach a device to genpd that corresponds to a provider Geert Uytterhoeven
2021-07-09 13:22   ` Ulf Hansson
2021-07-09 13:35     ` Geert Uytterhoeven
2021-07-09 13:48       ` Ulf Hansson
2021-07-09 13:57         ` Geert Uytterhoeven
2021-07-09 14:02           ` Ulf Hansson
2021-07-09 13:46     ` Bjorn Andersson
2021-07-09 13:58       ` Ulf Hansson
2021-07-09 14:16         ` Bjorn Andersson
2021-07-09 18:49 ` kernel test robot
2021-07-09 18:49   ` kernel test robot
2021-07-09 19:01 ` kernel test robot
2021-07-09 19:01   ` kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210709125611.135920-1-ulf.hansson@linaro.org \
    --to=ulf.hansson@linaro.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=geert+renesas@glider.be \
    --cc=khilman@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=saravanak@google.com \
    --cc=sboyd@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.