Power management fixes for 4.18-rc3
- 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). -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJbNefKAAoJEILEb/54YlRxOgoQALdhhtDm7fDHEh+TJhN4Y8X8 9PfvRwLQEypyQi2uBl1dQHXjCjt6IYhBzHXN8nMgxPBHQDsMqMmk+lQa5KB2RazM xXdMTb6nO4Rd333rsm6hSN+hRFGIOnzFYLmEMMV7nYNIGK6y3Xfo+XFlIBpoLE/h mHh4A75mFDIf5bABx+mYVhCfQ4ADwDXqdadkdYKVN4RwmnbLw80dV1FrfBGF+JnS 9oUPkdueG13q4QA3DveAxtTrO3X7DnlMXbOYDrNoQia2rHKtxzy3ubkTAsbvWn91 AuEWYWGTbutdBY+ga7smLBGzXUA7iIjNQfvMNZiqB0CGSpD0TzdVXJ9/+h0w+ru7 Dkw/3ytV7k8LLFO3wZvIc6DQ7Hsq2PxL/Rbm0WNvfv6JhdVmiw4tuP2F8TV9uv28 ej1w2n1NGUM0Yfi7wL7AyICZMOiwzxZgBpY63AGpk7mNvhZ7oqHzC/ENvJ3l6SLb lCviClAeBM+c/VOEXjleMtmf7VSRfvRhrKAl0dL7xLqbW2BrTw3vCmpuYKqMIlQB 5rpCslgiOqufBvHHdca7UU+9iwuaI66nD6o4KV6VnB1a01THs7D0kgvV0Wj+Xocb xdKQ7TbzI6VdYZJ4pPM2ub1rb+fWnQ7d/ASNy/O3C3lV3FYfxPw82idBdfdRq3sa 0kIEAQLHJIC1TrrZzNsg =842O -----END PGP SIGNATURE----- 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()
This commit is contained in:
commit
5e4e8c55c9
|
@ -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``
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue