Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e4e8c55 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -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.
	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``
+3 −4
Original line number Original line Diff line number Diff line
@@ -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);
 * 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,


	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));
+4 −4
Original line number Original line Diff line number Diff line
@@ -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)
	}
	}


	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) {
+3 −3
Original line number Original line Diff line number Diff line
@@ -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,


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)