From: Viresh Kumar <viresh.kumar@linaro.org> To: Rafael Wysocki <rjw@rjwysocki.net> Cc: linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org, Stephen Boyd <sboyd@codeaurora.org>, nm@ti.com, Viresh Kumar <viresh.kumar@linaro.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Len Brown <len.brown@intel.com>, linux-kernel@vger.kernel.org (open list), Pavel Machek <pavel@ucw.cz>, Viresh Kumar <vireshk@kernel.org> Subject: [PATCH V3 05/16] PM / OPP: Parse clock-latency and voltage-tolerance for v1 bindings Date: Tue, 9 Feb 2016 10:30:37 +0530 [thread overview] Message-ID: <953ea13dc8e1249cfe7e26ae122352798a5cab10.1454992186.git.viresh.kumar@linaro.org> (raw) In-Reply-To: <cover.1454992186.git.viresh.kumar@linaro.org> In-Reply-To: <cover.1454992186.git.viresh.kumar@linaro.org> V2 bindings have better support for clock-latency and voltage-tolerance and doesn't need special care. To use callbacks, like dev_pm_opp_get_max_{transition|volt}_latency(), irrespective of the bindings, the core needs to know clock-latency/voltage-tolerance for the earlier bindings. This patch reads clock-latency/voltage-tolerance from the device node, irrespective of the bindings (to keep it simple) and use them only for V1 bindings. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Stephen Boyd <sboyd@codeaurora.org> --- drivers/base/power/opp/core.c | 20 ++++++++++++++++++++ drivers/base/power/opp/opp.h | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c index b0f5c72f0fc3..4fafa733a1c7 100644 --- a/drivers/base/power/opp/core.c +++ b/drivers/base/power/opp/core.c @@ -582,6 +582,7 @@ static struct device_opp *_add_device_opp(struct device *dev) { struct device_opp *dev_opp; struct device_list_opp *list_dev; + struct device_node *np; /* Check for existing list for 'dev' first */ dev_opp = _find_device_opp(dev); @@ -604,6 +605,21 @@ static struct device_opp *_add_device_opp(struct device *dev) return NULL; } + /* + * Only required for backward compatibility with v1 bindings, but isn't + * harmful for other cases. And so we do it unconditionally. + */ + np = of_node_get(dev->of_node); + if (np) { + u32 val; + + if (!of_property_read_u32(np, "clock-latency", &val)) + dev_opp->clock_latency_ns_max = val; + of_property_read_u32(np, "voltage-tolerance", + &dev_opp->voltage_tolerance_v1); + of_node_put(np); + } + srcu_init_notifier_head(&dev_opp->srcu_head); INIT_LIST_HEAD(&dev_opp->opp_list); @@ -861,6 +877,7 @@ static int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt, { struct device_opp *dev_opp; struct dev_pm_opp *new_opp; + unsigned long tol; int ret; /* Hold our list modification lock here */ @@ -874,7 +891,10 @@ static int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt, /* populate the opp table */ new_opp->rate = freq; + tol = u_volt * dev_opp->voltage_tolerance_v1 / 100; new_opp->u_volt = u_volt; + new_opp->u_volt_min = u_volt - tol; + new_opp->u_volt_max = u_volt + tol; new_opp->available = true; new_opp->dynamic = dynamic; diff --git a/drivers/base/power/opp/opp.h b/drivers/base/power/opp/opp.h index 416293b7da23..fe44beb404ba 100644 --- a/drivers/base/power/opp/opp.h +++ b/drivers/base/power/opp/opp.h @@ -138,6 +138,8 @@ struct device_list_opp { * @dentry: debugfs dentry pointer of the real device directory (not links). * @dentry_name: Name of the real dentry. * + * @voltage_tolerance_v1: In percentage, for v1 bindings only. + * * This is an internal data structure maintaining the link to opps attached to * a device. This structure is not meant to be shared to users as it is * meant for book keeping and private to OPP library. @@ -156,6 +158,10 @@ struct device_opp { struct device_node *np; unsigned long clock_latency_ns_max; + + /* For backward compatibility with v1 bindings */ + unsigned int voltage_tolerance_v1; + bool shared_opp; struct dev_pm_opp *suspend_opp; -- 2.7.1.370.gb2aa7f8
WARNING: multiple messages have this Message-ID (diff)
From: Viresh Kumar <viresh.kumar@linaro.org> To: Rafael Wysocki <rjw@rjwysocki.net> Cc: linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org, Stephen Boyd <sboyd@codeaurora.org>, nm@ti.com, Viresh Kumar <viresh.kumar@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>, Viresh Kumar <vireshk@kernel.org> Subject: [PATCH V3 05/16] PM / OPP: Parse clock-latency and voltage-tolerance for v1 bindings Date: Tue, 9 Feb 2016 10:30:37 +0530 [thread overview] Message-ID: <953ea13dc8e1249cfe7e26ae122352798a5cab10.1454992186.git.viresh.kumar@linaro.org> (raw) In-Reply-To: <cover.1454992186.git.viresh.kumar@linaro.org> In-Reply-To: <cover.1454992186.git.viresh.kumar@linaro.org> V2 bindings have better support for clock-latency and voltage-tolerance and doesn't need special care. To use callbacks, like dev_pm_opp_get_max_{transition|volt}_latency(), irrespective of the bindings, the core needs to know clock-latency/voltage-tolerance for the earlier bindings. This patch reads clock-latency/voltage-tolerance from the device node, irrespective of the bindings (to keep it simple) and use them only for V1 bindings. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Stephen Boyd <sboyd@codeaurora.org> --- drivers/base/power/opp/core.c | 20 ++++++++++++++++++++ drivers/base/power/opp/opp.h | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c index b0f5c72f0fc3..4fafa733a1c7 100644 --- a/drivers/base/power/opp/core.c +++ b/drivers/base/power/opp/core.c @@ -582,6 +582,7 @@ static struct device_opp *_add_device_opp(struct device *dev) { struct device_opp *dev_opp; struct device_list_opp *list_dev; + struct device_node *np; /* Check for existing list for 'dev' first */ dev_opp = _find_device_opp(dev); @@ -604,6 +605,21 @@ static struct device_opp *_add_device_opp(struct device *dev) return NULL; } + /* + * Only required for backward compatibility with v1 bindings, but isn't + * harmful for other cases. And so we do it unconditionally. + */ + np = of_node_get(dev->of_node); + if (np) { + u32 val; + + if (!of_property_read_u32(np, "clock-latency", &val)) + dev_opp->clock_latency_ns_max = val; + of_property_read_u32(np, "voltage-tolerance", + &dev_opp->voltage_tolerance_v1); + of_node_put(np); + } + srcu_init_notifier_head(&dev_opp->srcu_head); INIT_LIST_HEAD(&dev_opp->opp_list); @@ -861,6 +877,7 @@ static int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt, { struct device_opp *dev_opp; struct dev_pm_opp *new_opp; + unsigned long tol; int ret; /* Hold our list modification lock here */ @@ -874,7 +891,10 @@ static int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt, /* populate the opp table */ new_opp->rate = freq; + tol = u_volt * dev_opp->voltage_tolerance_v1 / 100; new_opp->u_volt = u_volt; + new_opp->u_volt_min = u_volt - tol; + new_opp->u_volt_max = u_volt + tol; new_opp->available = true; new_opp->dynamic = dynamic; diff --git a/drivers/base/power/opp/opp.h b/drivers/base/power/opp/opp.h index 416293b7da23..fe44beb404ba 100644 --- a/drivers/base/power/opp/opp.h +++ b/drivers/base/power/opp/opp.h @@ -138,6 +138,8 @@ struct device_list_opp { * @dentry: debugfs dentry pointer of the real device directory (not links). * @dentry_name: Name of the real dentry. * + * @voltage_tolerance_v1: In percentage, for v1 bindings only. + * * This is an internal data structure maintaining the link to opps attached to * a device. This structure is not meant to be shared to users as it is * meant for book keeping and private to OPP library. @@ -156,6 +158,10 @@ struct device_opp { struct device_node *np; unsigned long clock_latency_ns_max; + + /* For backward compatibility with v1 bindings */ + unsigned int voltage_tolerance_v1; + bool shared_opp; struct dev_pm_opp *suspend_opp; -- 2.7.1.370.gb2aa7f8
next prev parent reply other threads:[~2016-02-09 5:02 UTC|newest] Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-02-09 5:00 [PATCH V3 00/16] PM / OPP: Introduce APIs to transition OPPs Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 01/16] PM / OPP: get/put regulators from OPP core Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 19:04 ` Stephen Boyd 2016-02-09 5:00 ` [PATCH V3 02/16] PM / OPP: Disable OPPs that aren't supported by the regulator Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 03/16] PM / OPP: Introduce dev_pm_opp_get_max_volt_latency() Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 19:04 ` Stephen Boyd 2016-02-09 5:00 ` [PATCH V3 04/16] PM / OPP: Introduce dev_pm_opp_get_max_transition_latency() Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar [this message] 2016-02-09 5:00 ` [PATCH V3 05/16] PM / OPP: Parse clock-latency and voltage-tolerance for v1 bindings Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 06/16] PM / OPP: Manage device clk Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 07/16] PM / OPP: Add dev_pm_opp_set_rate() Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 19:06 ` Stephen Boyd 2016-02-09 5:00 ` [PATCH V3 08/16] cpufreq: dt: Convert few pr_debug/err() calls to dev_dbg/err() Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 09/16] cpufreq: dt: Rename 'need_update' to 'opp_v1' Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 10/16] cpufreq: dt: OPP layers handles clock-latency for V1 bindings as well Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 11/16] cpufreq: dt: Pass regulator name to the OPP core Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 19:07 ` Stephen Boyd 2018-07-17 7:46 ` Geert Uytterhoeven 2018-07-17 7:46 ` Geert Uytterhoeven 2018-07-18 5:50 ` Viresh Kumar 2018-07-18 5:50 ` Viresh Kumar 2018-07-18 7:09 ` Geert Uytterhoeven 2018-07-18 7:09 ` Geert Uytterhoeven 2018-07-18 7:16 ` Viresh Kumar 2018-07-18 7:16 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 12/16] cpufreq: dt: Unsupported OPPs are already disabled Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 13/16] cpufreq: dt: Reuse dev_pm_opp_get_max_transition_latency() Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 14/16] cpufreq: dt: Use dev_pm_opp_set_rate() to switch frequency Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 15/16] cpufreq: dt: No need to fetch voltage-tolerance Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 5:00 ` [PATCH V3 16/16] cpufreq: dt: No need to allocate resources anymore Viresh Kumar 2016-02-09 5:00 ` Viresh Kumar 2016-02-09 19:09 ` Stephen Boyd 2016-02-11 21:19 ` [PATCH V3 00/16] PM / OPP: Introduce APIs to transition OPPs Rafael J. Wysocki
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=953ea13dc8e1249cfe7e26ae122352798a5cab10.1454992186.git.viresh.kumar@linaro.org \ --to=viresh.kumar@linaro.org \ --cc=gregkh@linuxfoundation.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 \ --cc=vireshk@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: linkBe 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.