Commit 5e4e8c55 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pm-4.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management fixes from Rafael Wysocki:
 "These fix up recently added features (the Kryo cpufreq driver and
  performance states coverage in the generic power domains framework),
  add missing documentation for a recently added sysfs knob in the
  intel_pstate driver and fix an error in its documentation.

  Specifics:

   - Fix the initialization time error handling in the recently added
     Kryo cpufreq driver (Dan Carpenter).

   - Fix up the recently added coverage of performance states in the
     generic power domains (genpd) framework (Viresh Kumar).

   - Add missing documentation of the new hwp_dynamic_boost sysfs knob
     in the intel_pstate driver (Rafael Wysocki).

   - Fix incorrect sysfs path in the intel_pstate driver documentation
     (Rafael Wysocki)"

* tag 'pm-4.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  Documentation: intel_pstate: Describe hwp_dynamic_boost sysfs knob
  Documentation: admin-guide: intel_pstate: Fix sysfs path
  PM / Domains: Rename opp_node to np
  PM / Domains: Fix return value of of_genpd_opp_to_performance_state()
  cpufreq: qcom-kryo: Fix error handling in probe()
parents 48a3c64b e27b4d4a
...@@ -324,8 +324,7 @@ Global Attributes ...@@ -324,8 +324,7 @@ Global Attributes
``intel_pstate`` exposes several global attributes (files) in ``sysfs`` to ``intel_pstate`` exposes several global attributes (files) in ``sysfs`` to
control its functionality at the system level. They are located in the control its functionality at the system level. They are located in the
``/sys/devices/system/cpu/cpufreq/intel_pstate/`` directory and affect all ``/sys/devices/system/cpu/intel_pstate/`` directory and affect all CPUs.
CPUs.
Some of them are not present if the ``intel_pstate=per_cpu_perf_limits`` Some of them are not present if the ``intel_pstate=per_cpu_perf_limits``
argument is passed to the kernel in the command line. argument is passed to the kernel in the command line.
...@@ -379,6 +378,17 @@ argument is passed to the kernel in the command line. ...@@ -379,6 +378,17 @@ argument is passed to the kernel in the command line.
but it affects the maximum possible value of per-policy P-state limits but it affects the maximum possible value of per-policy P-state limits
(see `Interpretation of Policy Attributes`_ below for details). (see `Interpretation of Policy Attributes`_ below for details).
``hwp_dynamic_boost``
This attribute is only present if ``intel_pstate`` works in the
`active mode with the HWP feature enabled <Active Mode With HWP_>`_ in
the processor. If set (equal to 1), it causes the minimum P-state limit
to be increased dynamically for a short time whenever a task previously
waiting on I/O is selected to run on a given logical CPU (the purpose
of this mechanism is to improve performance).
This setting has no effect on logical CPUs whose minimum P-state limit
is directly set to the highest non-turbo P-state or above it.
.. _status_attr: .. _status_attr:
``status`` ``status``
......
...@@ -2487,10 +2487,9 @@ EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); ...@@ -2487,10 +2487,9 @@ EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states);
* power domain corresponding to a DT node's "required-opps" property. * power domain corresponding to a DT node's "required-opps" property.
* *
* @dev: Device for which the performance-state needs to be found. * @dev: Device for which the performance-state needs to be found.
* @opp_node: DT node where the "required-opps" property is present. This can be * @np: DT node where the "required-opps" property is present. This can be
* the device node itself (if it doesn't have an OPP table) or a node * the device node itself (if it doesn't have an OPP table) or a node
* within the OPP table of a device (if device has an OPP table). * within the OPP table of a device (if device has an OPP table).
* @state: Pointer to return performance state.
* *
* Returns performance state corresponding to the "required-opps" property of * Returns performance state corresponding to the "required-opps" property of
* a DT node. This calls platform specific genpd->opp_to_performance_state() * a DT node. This calls platform specific genpd->opp_to_performance_state()
...@@ -2499,7 +2498,7 @@ EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); ...@@ -2499,7 +2498,7 @@ EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states);
* Returns performance state on success and 0 on failure. * Returns performance state on success and 0 on failure.
*/ */
unsigned int of_genpd_opp_to_performance_state(struct device *dev, unsigned int of_genpd_opp_to_performance_state(struct device *dev,
struct device_node *opp_node) struct device_node *np)
{ {
struct generic_pm_domain *genpd; struct generic_pm_domain *genpd;
struct dev_pm_opp *opp; struct dev_pm_opp *opp;
...@@ -2514,7 +2513,7 @@ unsigned int of_genpd_opp_to_performance_state(struct device *dev, ...@@ -2514,7 +2513,7 @@ unsigned int of_genpd_opp_to_performance_state(struct device *dev,
genpd_lock(genpd); genpd_lock(genpd);
opp = of_dev_pm_opp_find_required_opp(&genpd->dev, opp_node); opp = of_dev_pm_opp_find_required_opp(&genpd->dev, np);
if (IS_ERR(opp)) { if (IS_ERR(opp)) {
dev_err(dev, "Failed to find required OPP: %ld\n", dev_err(dev, "Failed to find required OPP: %ld\n",
PTR_ERR(opp)); PTR_ERR(opp));
......
...@@ -87,8 +87,8 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) ...@@ -87,8 +87,8 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev)
int ret; int ret;
cpu_dev = get_cpu_device(0); cpu_dev = get_cpu_device(0);
if (NULL == cpu_dev) if (!cpu_dev)
ret = -ENODEV; return -ENODEV;
msm8996_version = qcom_cpufreq_kryo_get_msm_id(); msm8996_version = qcom_cpufreq_kryo_get_msm_id();
if (NUM_OF_MSM8996_VERSIONS == msm8996_version) { if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
...@@ -97,8 +97,8 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) ...@@ -97,8 +97,8 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev)
} }
np = dev_pm_opp_of_get_opp_desc_node(cpu_dev); np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);
if (IS_ERR(np)) if (!np)
return PTR_ERR(np); return -ENOENT;
ret = of_device_is_compatible(np, "operating-points-v2-kryo-cpu"); ret = of_device_is_compatible(np, "operating-points-v2-kryo-cpu");
if (!ret) { if (!ret) {
......
...@@ -234,7 +234,7 @@ struct generic_pm_domain *of_genpd_remove_last(struct device_node *np); ...@@ -234,7 +234,7 @@ struct generic_pm_domain *of_genpd_remove_last(struct device_node *np);
int of_genpd_parse_idle_states(struct device_node *dn, int of_genpd_parse_idle_states(struct device_node *dn,
struct genpd_power_state **states, int *n); struct genpd_power_state **states, int *n);
unsigned int of_genpd_opp_to_performance_state(struct device *dev, unsigned int of_genpd_opp_to_performance_state(struct device *dev,
struct device_node *opp_node); struct device_node *np);
int genpd_dev_pm_attach(struct device *dev); int genpd_dev_pm_attach(struct device *dev);
struct device *genpd_dev_pm_attach_by_id(struct device *dev, struct device *genpd_dev_pm_attach_by_id(struct device *dev,
...@@ -274,9 +274,9 @@ static inline int of_genpd_parse_idle_states(struct device_node *dn, ...@@ -274,9 +274,9 @@ static inline int of_genpd_parse_idle_states(struct device_node *dn,
static inline unsigned int static inline unsigned int
of_genpd_opp_to_performance_state(struct device *dev, of_genpd_opp_to_performance_state(struct device *dev,
struct device_node *opp_node) struct device_node *np)
{ {
return -ENODEV; return 0;
} }
static inline int genpd_dev_pm_attach(struct device *dev) static inline int genpd_dev_pm_attach(struct device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment