Skip to content

Commit d6498af

Browse files
committed
Merge tag 'pm-5.15-rc1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull more power management updates from Rafael Wysocki: "These improve hybrid processors support in intel_pstate, fix an issue in the core devices PM code, clean up the handling of dedicated wake IRQs, update the Energy Model documentation and update MAINTAINERS. Specifics: - Make the HWP performance levels calibration on hybrid processors in intel_pstate more straightforward (Rafael Wysocki). - Prevent the PM core from leaving devices in suspend after a failing system-wide suspend transition in some cases when driver PM flags are used (Prasad Sodagudi). - Drop unused function argument from the dedicated wake IRQs handling code (Sergey Shtylyov). - Fix up Energy Model kerneldoc comments and include them in the Energy Model documentation (Lukasz Luba). - Use my kernel.org address in MAINTAINERS insead of the personal one (Rafael Wysocki)" * tag 'pm-5.15-rc1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: MAINTAINERS: Change Rafael's e-mail address PM: sleep: core: Avoid setting power.must_resume to false Documentation: power: include kernel-doc in Energy Model doc PM: EM: fix kernel-doc comments cpufreq: intel_pstate: hybrid: Rework HWP calibration ACPI: CPPC: Introduce cppc_get_nominal_perf() PM: sleep: wakeirq: drop useless parameter from dev_pm_attach_wake_irq()
2 parents e99f23c + be2d243 commit d6498af

File tree

8 files changed

+138
-155
lines changed

8 files changed

+138
-155
lines changed

Documentation/power/energy-model.rst

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ subsystems which use EM might rely on this flag to check if all EM devices use
101101
the same scale. If there are different scales, these subsystems might decide
102102
to: return warning/error, stop working or panic.
103103
See Section 3. for an example of driver implementing this
104-
callback, and kernel/power/energy_model.c for further documentation on this
105-
API.
104+
callback, or Section 2.4 for further documentation on this API
106105

107106

108107
2.3 Accessing performance domains
@@ -123,7 +122,17 @@ em_cpu_energy() API. The estimation is performed assuming that the schedutil
123122
CPUfreq governor is in use in case of CPU device. Currently this calculation is
124123
not provided for other type of devices.
125124

126-
More details about the above APIs can be found in include/linux/energy_model.h.
125+
More details about the above APIs can be found in ``<linux/energy_model.h>``
126+
or in Section 2.4
127+
128+
129+
2.4 Description details of this API
130+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
131+
.. kernel-doc:: include/linux/energy_model.h
132+
:internal:
133+
134+
.. kernel-doc:: kernel/power/energy_model.c
135+
:export:
127136

128137

129138
3. Example driver

MAINTAINERS

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ S: Maintained
333333
F: drivers/platform/x86/acer-wmi.c
334334

335335
ACPI
336-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
336+
M: "Rafael J. Wysocki" <rafael@kernel.org>
337337
M: Len Brown <lenb@kernel.org>
338338
L: linux-acpi@vger.kernel.org
339339
S: Supported
@@ -354,7 +354,7 @@ F: include/linux/fwnode.h
354354
F: tools/power/acpi/
355355

356356
ACPI APEI
357-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
357+
M: "Rafael J. Wysocki" <rafael@kernel.org>
358358
M: Len Brown <lenb@kernel.org>
359359
R: James Morse <james.morse@arm.com>
360360
R: Tony Luck <tony.luck@intel.com>
@@ -403,7 +403,7 @@ S: Maintained
403403
F: drivers/platform/x86/i2c-multi-instantiate.c
404404

405405
ACPI PMIC DRIVERS
406-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
406+
M: "Rafael J. Wysocki" <rafael@kernel.org>
407407
M: Len Brown <lenb@kernel.org>
408408
R: Andy Shevchenko <andy@kernel.org>
409409
R: Mika Westerberg <mika.westerberg@linux.intel.com>
@@ -4827,7 +4827,7 @@ W: http://www.arm.com/products/processors/technologies/biglittleprocessing.php
48274827
F: drivers/cpufreq/vexpress-spc-cpufreq.c
48284828

48294829
CPU FREQUENCY SCALING FRAMEWORK
4830-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
4830+
M: "Rafael J. Wysocki" <rafael@kernel.org>
48314831
M: Viresh Kumar <viresh.kumar@linaro.org>
48324832
L: linux-pm@vger.kernel.org
48334833
S: Maintained
@@ -4845,7 +4845,7 @@ F: kernel/sched/cpufreq*.c
48454845
F: tools/testing/selftests/cpufreq/
48464846

48474847
CPU IDLE TIME MANAGEMENT FRAMEWORK
4848-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
4848+
M: "Rafael J. Wysocki" <rafael@kernel.org>
48494849
M: Daniel Lezcano <daniel.lezcano@linaro.org>
48504850
L: linux-pm@vger.kernel.org
48514851
S: Maintained
@@ -7591,7 +7591,7 @@ W: ftp://ftp.openlinux.org/pub/people/hch/vxfs
75917591
F: fs/freevxfs/
75927592

75937593
FREEZER
7594-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
7594+
M: "Rafael J. Wysocki" <rafael@kernel.org>
75957595
M: Pavel Machek <pavel@ucw.cz>
75967596
L: linux-pm@vger.kernel.org
75977597
S: Supported
@@ -7844,7 +7844,7 @@ S: Supported
78447844
F: drivers/i2c/muxes/i2c-demux-pinctrl.c
78457845

78467846
GENERIC PM DOMAINS
7847-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
7847+
M: "Rafael J. Wysocki" <rafael@kernel.org>
78487848
M: Kevin Hilman <khilman@kernel.org>
78497849
M: Ulf Hansson <ulf.hansson@linaro.org>
78507850
L: linux-pm@vger.kernel.org
@@ -8310,7 +8310,7 @@ W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml
83108310
F: drivers/video/fbdev/hgafb.c
83118311

83128312
HIBERNATION (aka Software Suspend, aka swsusp)
8313-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
8313+
M: "Rafael J. Wysocki" <rafael@kernel.org>
83148314
M: Pavel Machek <pavel@ucw.cz>
83158315
L: linux-pm@vger.kernel.org
83168316
S: Supported
@@ -14969,7 +14969,7 @@ F: kernel/time/*timer*
1496914969
F: kernel/time/namespace.c
1497014970

1497114971
POWER MANAGEMENT CORE
14972-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
14972+
M: "Rafael J. Wysocki" <rafael@kernel.org>
1497314973
L: linux-pm@vger.kernel.org
1497414974
S: Supported
1497514975
B: https://bugzilla.kernel.org
@@ -17947,7 +17947,7 @@ F: arch/sh/
1794717947
F: drivers/sh/
1794817948

1794917949
SUSPEND TO RAM
17950-
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
17950+
M: "Rafael J. Wysocki" <rafael@kernel.org>
1795117951
M: Len Brown <len.brown@intel.com>
1795217952
M: Pavel Machek <pavel@ucw.cz>
1795317953
L: linux-pm@vger.kernel.org

drivers/acpi/cppc_acpi.c

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,23 +1008,14 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
10081008
return ret_val;
10091009
}
10101010

1011-
/**
1012-
* cppc_get_desired_perf - Get the value of desired performance register.
1013-
* @cpunum: CPU from which to get desired performance.
1014-
* @desired_perf: address of a variable to store the returned desired performance
1015-
*
1016-
* Return: 0 for success, -EIO otherwise.
1017-
*/
1018-
int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
1011+
static int cppc_get_perf(int cpunum, enum cppc_regs reg_idx, u64 *perf)
10191012
{
10201013
struct cpc_desc *cpc_desc = per_cpu(cpc_desc_ptr, cpunum);
1021-
int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum);
1022-
struct cpc_register_resource *desired_reg;
1023-
struct cppc_pcc_data *pcc_ss_data = NULL;
1024-
1025-
desired_reg = &cpc_desc->cpc_regs[DESIRED_PERF];
1014+
struct cpc_register_resource *reg = &cpc_desc->cpc_regs[reg_idx];
10261015

1027-
if (CPC_IN_PCC(desired_reg)) {
1016+
if (CPC_IN_PCC(reg)) {
1017+
int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum);
1018+
struct cppc_pcc_data *pcc_ss_data = NULL;
10281019
int ret = 0;
10291020

10301021
if (pcc_ss_id < 0)
@@ -1035,7 +1026,7 @@ int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
10351026
down_write(&pcc_ss_data->pcc_lock);
10361027

10371028
if (send_pcc_cmd(pcc_ss_id, CMD_READ) >= 0)
1038-
cpc_read(cpunum, desired_reg, desired_perf);
1029+
cpc_read(cpunum, reg, perf);
10391030
else
10401031
ret = -EIO;
10411032

@@ -1044,12 +1035,36 @@ int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
10441035
return ret;
10451036
}
10461037

1047-
cpc_read(cpunum, desired_reg, desired_perf);
1038+
cpc_read(cpunum, reg, perf);
10481039

10491040
return 0;
10501041
}
1042+
1043+
/**
1044+
* cppc_get_desired_perf - Get the desired performance register value.
1045+
* @cpunum: CPU from which to get desired performance.
1046+
* @desired_perf: Return address.
1047+
*
1048+
* Return: 0 for success, -EIO otherwise.
1049+
*/
1050+
int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
1051+
{
1052+
return cppc_get_perf(cpunum, DESIRED_PERF, desired_perf);
1053+
}
10511054
EXPORT_SYMBOL_GPL(cppc_get_desired_perf);
10521055

1056+
/**
1057+
* cppc_get_nominal_perf - Get the nominal performance register value.
1058+
* @cpunum: CPU from which to get nominal performance.
1059+
* @nominal_perf: Return address.
1060+
*
1061+
* Return: 0 for success, -EIO otherwise.
1062+
*/
1063+
int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf)
1064+
{
1065+
return cppc_get_perf(cpunum, NOMINAL_PERF, nominal_perf);
1066+
}
1067+
10531068
/**
10541069
* cppc_get_perf_caps - Get a CPU's performance capabilities.
10551070
* @cpunum: CPU from which to get capabilities info.

drivers/base/power/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1642,7 +1642,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
16421642
}
16431643

16441644
dev->power.may_skip_resume = true;
1645-
dev->power.must_resume = false;
1645+
dev->power.must_resume = !dev_pm_test_driver_flags(dev, DPM_FLAG_MAY_SKIP_RESUME);
16461646

16471647
dpm_watchdog_set(&wd, dev);
16481648
device_lock(dev);

drivers/base/power/wakeirq.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,11 @@
1212
/**
1313
* dev_pm_attach_wake_irq - Attach device interrupt as a wake IRQ
1414
* @dev: Device entry
15-
* @irq: Device wake-up capable interrupt
1615
* @wirq: Wake irq specific data
1716
*
18-
* Internal function to attach either a device IO interrupt or a
19-
* dedicated wake-up interrupt as a wake IRQ.
17+
* Internal function to attach a dedicated wake-up interrupt as a wake IRQ.
2018
*/
21-
static int dev_pm_attach_wake_irq(struct device *dev, int irq,
22-
struct wake_irq *wirq)
19+
static int dev_pm_attach_wake_irq(struct device *dev, struct wake_irq *wirq)
2320
{
2421
unsigned long flags;
2522

@@ -65,7 +62,7 @@ int dev_pm_set_wake_irq(struct device *dev, int irq)
6562
wirq->dev = dev;
6663
wirq->irq = irq;
6764

68-
err = dev_pm_attach_wake_irq(dev, irq, wirq);
65+
err = dev_pm_attach_wake_irq(dev, wirq);
6966
if (err)
7067
kfree(wirq);
7168

@@ -196,7 +193,7 @@ int dev_pm_set_dedicated_wake_irq(struct device *dev, int irq)
196193
if (err)
197194
goto err_free_name;
198195

199-
err = dev_pm_attach_wake_irq(dev, irq, wirq);
196+
err = dev_pm_attach_wake_irq(dev, wirq);
200197
if (err)
201198
goto err_free_irq;
202199

0 commit comments

Comments
 (0)