Thread (15 messages) 15 messages, 3 authors, 2021-01-19

Re: [PATCH v3 1/3] PM: domains: Make set_performance_state() callback optional

From: Ulf Hansson <hidden>
Date: 2021-01-18 11:02:49
Also in: linux-pm, lkml

On Mon, 18 Jan 2021 at 08:28, Viresh Kumar [off-list ref] wrote:
On 18-01-21, 04:13, Dmitry Osipenko wrote:
quoted
Make set_performance_state() callback optional in order to remove the
need from power domain drivers to implement a dummy callback. If callback
isn't implemented by a GENPD driver, then the performance state is passed
to the parent domain.

Tested-by: Peter Geis <redacted>
Tested-by: Nicolas Chauvet <redacted>
Tested-by: Matt Merhar <redacted>
Suggested-by: Ulf Hansson <redacted>
Reviewed-by: Ulf Hansson <redacted>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/base/power/domain.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index 9a14eedacb92..a3e1bfc233d4 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -339,9 +339,11 @@ static int _genpd_set_performance_state(struct generic_pm_domain *genpd,
                      goto err;
      }

-     ret = genpd->set_performance_state(genpd, state);
-     if (ret)
-             goto err;
+     if (genpd->set_performance_state) {
+             ret = genpd->set_performance_state(genpd, state);
+             if (ret)
+                     goto err;
+     }
Earlier in this routine we also have this:

if (!parent->set_performance_state)
        continue;

Should we change that too ?
Good point! I certainly overlooked that when reviewing. We need to
reevaluate the new state when propagating to the parent(s).

To me, it looks like when doing the propagation we must check if the
parent has the ->set_performance_state() callback assigned. If so, we
should call dev_pm_opp_xlate_performance_state(), but otherwise just
use the value of "state", when doing the reevaluation.

Does it make sense?
quoted
      genpd->performance_state = state;
      return 0;
@@ -399,9 +401,6 @@ int dev_pm_genpd_set_performance_state(struct device *dev, unsigned int state)
      if (!genpd)
              return -ENODEV;

-     if (unlikely(!genpd->set_performance_state))
-             return -EINVAL;
-
      if (WARN_ON(!dev->power.subsys_data ||
                   !dev->power.subsys_data->domain_data))
              return -EINVAL;
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>

--
viresh
Kind regards
Uffe
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help