From: Viresh Kumar <viresh.kumar@linaro.org>
To: Stephen Boyd <sboyd@codeaurora.org>
Cc: Rafael Wysocki <rjw@rjwysocki.net>,
nm@ti.com, linaro-kernel@lists.linaro.org,
linux-pm@vger.kernel.org, khilman@linaro.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Len Brown <len.brown@intel.com>,
open list <linux-kernel@vger.kernel.org>,
Pavel Machek <pavel@ucw.cz>
Subject: Re: [PATCH 1/6] PM / OPP: reuse of_parse_phandle()
Date: Tue, 11 Aug 2015 12:12:43 +0530 [thread overview]
Message-ID: <20150811064243.GD5147@linux> (raw)
In-Reply-To: <20150811062353.GA31523@codeaurora.org>
On 10-08-15, 23:23, Stephen Boyd wrote:
> Ok. That's worth a mention in the commit text please.
-----------------------8<------------------------
Message-Id: <8c4503fe1c1c545d5f7ac68351d81d0238532b54.1439275133.git.viresh.kumar@linaro.org>
From: Viresh Kumar <viresh.kumar@linaro.org>
Date: Thu, 30 Jul 2015 16:58:19 +0530
Subject: [PATCH] PM / OPP: reuse of_parse_phandle()
We already have a better API to get the opp descriptor block's node from
cpu-node. Lets reuse that instead of creating our own routines for the
same stuff. That cleans the code a lot.
This also kills a check we had earlier (as we are using the generic API
now). Earlier we used to check if the operating-points-v2 property
contained multiple phandles instead of a single phandle.
Killing this check isn't an issue because, we only parse the first entry
with of_parse_phandle(). So, if a user passes multiple phandles, its
really his problem :)
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/base/power/opp.c | 70 +++++++++++++-----------------------------------
1 file changed, 18 insertions(+), 52 deletions(-)
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
index 204c6c945168..1daaa1a418a2 100644
--- a/drivers/base/power/opp.c
+++ b/drivers/base/power/opp.c
@@ -1250,69 +1250,33 @@ void of_cpumask_free_opp_table(cpumask_var_t cpumask)
}
EXPORT_SYMBOL_GPL(of_cpumask_free_opp_table);
-/* Returns opp descriptor node from its phandle. Caller must do of_node_put() */
-static struct device_node *
-_of_get_opp_desc_node_from_prop(struct device *dev, const struct property *prop)
-{
- struct device_node *opp_np;
-
- opp_np = of_find_node_by_phandle(be32_to_cpup(prop->value));
- if (!opp_np) {
- dev_err(dev, "%s: Prop: %s contains invalid opp desc phandle\n",
- __func__, prop->name);
- return ERR_PTR(-EINVAL);
- }
-
- return opp_np;
-}
-
-/* Returns opp descriptor node for a device. Caller must do of_node_put() */
+/* Returns opp descriptor node for a device, caller must do of_node_put() */
static struct device_node *_of_get_opp_desc_node(struct device *dev)
{
- const struct property *prop;
-
- prop = of_find_property(dev->of_node, "operating-points-v2", NULL);
- if (!prop)
- return ERR_PTR(-ENODEV);
- if (!prop->value)
- return ERR_PTR(-ENODATA);
-
/*
* TODO: Support for multiple OPP tables.
*
* There should be only ONE phandle present in "operating-points-v2"
* property.
*/
- if (prop->length != sizeof(__be32)) {
- dev_err(dev, "%s: Invalid opp desc phandle\n", __func__);
- return ERR_PTR(-EINVAL);
- }
- return _of_get_opp_desc_node_from_prop(dev, prop);
+ return of_parse_phandle(dev->of_node, "operating-points-v2", 0);
}
/* Initializes OPP tables based on new bindings */
static int _of_init_opp_table_v2(struct device *dev,
- const struct property *prop)
+ struct device_node *opp_np)
{
- struct device_node *opp_np, *np;
+ struct device_node *np;
struct device_opp *dev_opp;
int ret = 0, count = 0;
- if (!prop->value)
- return -ENODATA;
-
- /* Get opp node */
- opp_np = _of_get_opp_desc_node_from_prop(dev, prop);
- if (IS_ERR(opp_np))
- return PTR_ERR(opp_np);
-
dev_opp = _managed_opp(opp_np);
if (dev_opp) {
/* OPPs are already managed */
if (!_add_list_dev(dev, dev_opp))
ret = -ENOMEM;
- goto put_opp_np;
+ goto out;
}
/* We have opp-list node now, iterate over it and add OPPs */
@@ -1329,13 +1293,13 @@ static int _of_init_opp_table_v2(struct device *dev,
/* There should be one of more OPP defined */
if (WARN_ON(!count))
- goto put_opp_np;
+ goto out;
if (!ret) {
if (!dev_opp) {
dev_opp = _find_device_opp(dev);
if (WARN_ON(!dev_opp))
- goto put_opp_np;
+ goto out;
}
dev_opp->np = opp_np;
@@ -1345,9 +1309,7 @@ static int _of_init_opp_table_v2(struct device *dev,
of_free_opp_table(dev);
}
-put_opp_np:
- of_node_put(opp_np);
-
+out:
return ret;
}
@@ -1413,14 +1375,15 @@ static int _of_init_opp_table_v1(struct device *dev)
*/
int of_init_opp_table(struct device *dev)
{
- const struct property *prop;
+ struct device_node *opp_np;
+ int ret;
/*
* OPPs have two version of bindings now. The older one is deprecated,
* try for the new binding first.
*/
- prop = of_find_property(dev->of_node, "operating-points-v2", NULL);
- if (!prop) {
+ opp_np = _of_get_opp_desc_node(dev);
+ if (!opp_np) {
/*
* Try old-deprecated bindings for backward compatibility with
* older dtbs.
@@ -1428,7 +1391,10 @@ int of_init_opp_table(struct device *dev)
return _of_init_opp_table_v1(dev);
}
- return _of_init_opp_table_v2(dev, prop);
+ ret = _of_init_opp_table_v2(dev, opp_np);
+ of_node_put(opp_np);
+
+ return ret;
}
EXPORT_SYMBOL_GPL(of_init_opp_table);
@@ -1517,7 +1483,7 @@ int of_get_cpus_sharing_opps(struct device *cpu_dev, cpumask_var_t cpumask)
/* Get OPP descriptor node */
np = _of_get_opp_desc_node(cpu_dev);
- if (IS_ERR(np)) {
+ if (!np) {
dev_dbg(cpu_dev, "%s: Couldn't find opp node: %ld\n", __func__,
PTR_ERR(np));
return -ENOENT;
@@ -1541,7 +1507,7 @@ int of_get_cpus_sharing_opps(struct device *cpu_dev, cpumask_var_t cpumask)
/* Get OPP descriptor node */
tmp_np = _of_get_opp_desc_node(tcpu_dev);
- if (IS_ERR(tmp_np)) {
+ if (!tmp_np) {
dev_err(tcpu_dev, "%s: Couldn't find opp node: %ld\n",
__func__, PTR_ERR(tmp_np));
ret = PTR_ERR(tmp_np);
next prev parent reply other threads:[~2015-08-11 6:42 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-10 6:31 [PATCH 0/6] PM / OPP: Add debugfs support Viresh Kumar
2015-08-10 6:31 ` [PATCH 1/6] PM / OPP: reuse of_parse_phandle() Viresh Kumar
2015-08-10 6:31 ` Viresh Kumar
2015-08-11 6:02 ` Stephen Boyd
2015-08-11 6:10 ` Viresh Kumar
2015-08-11 6:23 ` Stephen Boyd
2015-08-11 6:42 ` Viresh Kumar [this message]
2015-08-10 6:31 ` [PATCH 2/6] PM / OPP: restructure _of_init_opp_table_v2() Viresh Kumar
2015-08-10 6:31 ` Viresh Kumar
2015-08-10 19:23 ` Stephen Boyd
2015-08-11 0:23 ` Viresh Kumar
2015-08-11 0:31 ` Stephen Boyd
2015-08-11 2:25 ` Viresh Kumar
2015-08-11 6:08 ` Stephen Boyd
2015-08-11 6:57 ` Viresh Kumar
2015-08-11 8:37 ` Viresh Kumar
2015-08-11 2:33 ` Viresh Kumar
2015-08-11 6:09 ` Stephen Boyd
2015-08-10 6:31 ` [PATCH 3/6] PM / OPP: Prefix exported opp routines with dev_pm_opp_ Viresh Kumar
2015-08-10 6:31 ` Viresh Kumar
2015-08-10 19:24 ` Stephen Boyd
2015-08-10 6:32 ` [PATCH 4/6] PM / OPP: Move opp core to its own directory Viresh Kumar
2015-08-10 6:32 ` Viresh Kumar
2015-08-10 19:51 ` Stephen Boyd
2015-08-11 0:25 ` Viresh Kumar
2015-08-10 6:32 ` [PATCH 5/6] PM / OPP: Move cpu specific code to opp/cpu.c Viresh Kumar
2015-08-10 6:32 ` Viresh Kumar
2015-08-11 6:09 ` Stephen Boyd
2015-08-10 6:32 ` [PATCH 6/6] PM / OPP: Add debugfs support Viresh Kumar
2015-08-10 6:32 ` Viresh Kumar
2015-08-10 19:50 ` Stephen Boyd
2015-08-11 6:35 ` Viresh Kumar
2015-08-11 6:37 ` Viresh Kumar
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=20150811064243.GD5147@linux \
--to=viresh.kumar@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=khilman@linaro.org \
--cc=len.brown@intel.com \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=nm@ti.com \
--cc=pavel@ucw.cz \
--cc=rjw@rjwysocki.net \
--cc=sboyd@codeaurora.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.