Home | History | Annotate | Download | only in acpi
History log of /src/sys/dev/acpi/acpi_cpu_pstate.c
RevisionDateAuthorComments
 1.54  07-Dec-2020  jmcneill acpicpu: Add support for ACPI P-states and T-states on Arm.
 1.53  15-Nov-2011  jruoho branches: 1.53.66;
Add comment.
 1.52  18-Oct-2011  jruoho branches: 1.52.2;
Convert to use cpufreq(9).
 1.51  22-Jun-2011  jruoho Get rid of RUN_ONCE(9). Should fix PR # kern/44043.
 1.50  22-Jun-2011  jruoho Contrary to the previous, use aprint_error(9) but suppress warnings
caused by the (optional) BIOS-based dynamic voltage and frequency scaling.
 1.49  04-Jun-2011  jruoho Change some printfs to aprint_debug(9).
 1.48  01-Apr-2011  jruoho branches: 1.48.2;
Maintain the state properly during firmware-based DVFS.
 1.47  19-Mar-2011  jruoho Like in rest of the acpi(4) stack, queue all resume hooks.
 1.46  17-Mar-2011  jruoho Properly set the frequency during suspend and resume. Should fix problems
introduced in the revision 1.42. Pointed out by Taylor C. Campbell.
 1.45  05-Mar-2011  jruoho branches: 1.45.2;
Add __cpu_simple_lock_t. Use it, x86_read_psl(), and x86_disable_intr() to
disable interrupts locally and protect the access to APERF and MPERF. Also
rationalize the MD initialization sequence.
 1.44  01-Mar-2011  jruoho Move also the evcnt(9) event counters to one place. No functional change.
 1.43  01-Mar-2011  jruoho Simplify by moving the debug printfs to one place. No functional change.
 1.42  01-Mar-2011  jruoho Move the xcall(9) that does the P- and T-state transformations from the MD
layer to the main code. Makes the caches coherent and provides consistent
vmstat(1) output. This is still not quite right, given that most of the
cross-calls are typically unnecessary with the dependency coordination.
 1.41  27-Feb-2011  jruoho Move acpicpu(4) from "acpinodebus" to "cpufeaturebus".
 1.40  25-Feb-2011  jruoho Start to derive the percpu(9) (or per-domain) state coordination
mechanisms by parsing the _CSD, _PSD, and _TSD objects by default.
 1.39  25-Feb-2011  jruoho Add preliminary support for the IA32_APERF and IA32_MPERF frequency counters.
These are not yet used for anything and only Intel is supported at the moment.
 1.38  23-Feb-2011  jruoho Lower the worst-case latency in P- and T-state transitions to 1 usec.
The previous 10 usec was based on the Intel's Core family. It may have been
improved since that. Also provide an arbitrary upper bound for BIOS bugs.
 1.37  30-Jan-2011  jruoho Improve error reporting.
 1.36  30-Dec-2010  jruoho branches: 1.36.2; 1.36.4;
Change the default behavior to enforce the maximum frequency when the
firmware requests to do so. This cures severe overhating (> 120 C) observed
on many laptops, being also on par with the specification(s). This can be
reverted by using the new "hw.acpi.cpu.dynamic" sysctl variable.
 1.35  20-Dec-2010  jruoho Use branch annotations in couple of places. Add two comments.
 1.34  28-Oct-2010  jruoho Only override data from XPSS if the conventional _PSS did not contain the
required information. Problem found and diagnosed by jakllsch@; on some AMD
systems vendors fill _PSS correctly, but do not duplicate the data in XPSS.
 1.33  21-Aug-2010  jmcneill - don't clobber the data found by _PSS if XPSS validation fails
- XPSS spec says that Status{,Mask} and Control{,Mask} buffers are 8 bytes
- use ACPI_GET64 macros instead of memcpy when reading from buffers

This makes acpicpu work again on my VIA C7-M, whose firmware reports
malformed XPSS packages but has a working _PSS
 1.32  20-Aug-2010  jruoho Give a hint about a driver conflict.
 1.31  20-Aug-2010  jruoho Check the cached value also when setting a state.
 1.30  18-Aug-2010  jruoho Use the idea from cegger@ and fill the (X)PSS structure during initialization.
 1.29  17-Aug-2010  jruoho Adjust locking for previous.
 1.28  17-Aug-2010  jruoho Clarify the initialization of the dynamic maximums/minimums. Reset these to
defaults upon suspend. As we do not know how well the firmware maintains
state, do not run the callbacks that evaluate the maximum/minimum on resume.
 1.27  17-Aug-2010  jruoho Add support for the optional dynamic minimum (in terms of MHz) via _PDL.
Comparable to T-states, this gives effectively a window of available
performance states for passive cooling. An example:

Init: max = 0, min = Pn.

Time j. Time j + 1.
----------- -----------
2000 MHz P0 max P0
P1 P1 max
P2 ==> P2
P3 P3 min
P4 P4
P5 min P5
500 Mhz Pn Pn
----------- -----------

Search: repeat (i = P0; i <= P5) repeat (i = P1; i <= P3)
 1.26  16-Aug-2010  jruoho branches: 1.26.2;
Fix comments.
 1.25  16-Aug-2010  jruoho Two changes:

1. Initialize P-states properly to P0. It is processor-specific
what value we might get without initialization. (Some AMD CPUs
have even specific registers for the state after cold reset.)

2. Following design notes for Windows, set the lowest-power P-state
upon suspend and restore the saved state after resume.
 1.24  16-Aug-2010  jruoho Now that the deferred configuration actually works as expected and documented,
use config_defer(9) instead of config_finalize_register(9), and simplify the
code paths around the initialization.
 1.23  16-Aug-2010  jmcneill make it compile again
 1.22  16-Aug-2010  jruoho If XPSS is used, only invalidate P-states if the control MSR address is zero.
If the status address is zero, we will bluntly bypass the transition check.
 1.21  16-Aug-2010  jruoho Add support for Extended PSS ACPI Method Specification from Microsoft.
This will greatly simplify supporting PowerNow! on conforming systems.
 1.20  16-Aug-2010  jruoho Do not error out neither in P-states nor in T-states if the method for the
dynamic maximum is nonexistent. Unsurprisingly, there is vagueness in the
standards; in ACPI 3.0 and 4.0 it is clearly indicated that also these methods
must be present, but the earlier standards are less stringent. Without too
much effort, at least one old P4-system was located that lacks _PPC.
 1.19  14-Aug-2010  jruoho Do not accidentally write zeros to (PSTATE_CNT and CST_CNT) registers.
 1.18  14-Aug-2010  jruoho Do not queue functions via sysmon_taskq(9) in the pmf(9) resume hooks.
There is a small and unlikely race when the drivers are loaded as modules;
suspend, resume, queue a function, and immediately unload the module.
 1.17  13-Aug-2010  jruoho Instead of packing structures that do not need to be __packed, remove two
CTASSERT(9) macros. Fixes build failure on AMD64 noted by cegger@.
 1.16  13-Aug-2010  jruoho Remove some unnecessary locking. Mainly a leftover from previous revisions
where the dynamic maximum/minimum was used also when retrieving the current
state. The state-array itself changes only in C-states.
 1.15  13-Aug-2010  jruoho Merge T-state a.k.a. throttling support for acpicpu(4).

Remarks:

1. Native instructions are supported only on Intel. Native support for
other x86 vendors will be investigated. By assumption, AMD and others
use the I/O based approach.

2. The existing code, INTEL_ONDEMAND_CLOCKMOD, must be disabled in
order to use acpicpu(4). Otherwise fatal MSR races may occur.
Unlike with P-states, no attempt is done to disable the existing
implementation.

3. There is no rationale to export controls to user land.

4. Throttling is an artefact from the past. T-states will not be used for
power management per se. For CPU frequency management, P-states are
preferred in all circumstances. No noticeable additional power savings
were observed in various experiments. When the system has been scaled
to the highest (i.e. lowest power) P-state, it is preferable to move
from C0 to deeper C-states than it is to actively throttle the CPU.

5. But T-states need to be implemented for passive cooling via acpitz(4).
As specified by ACPI and Intel documents, these can be used as the
last line of defence against critical thermal conditions. Support
for this will be added later.
 1.14  12-Aug-2010  jruoho Three small things: (1) fix off by one, (2) protect the cached P-state
(required for interaction with T-states), and (3) use aprint_debug(9)
instead of the ACPI_DEBUG_PRINT(x) macro for the dynamic frequency changes
(for the time being, people need easier way to observe the dynamic changes).
 1.13  11-Aug-2010  jruoho branches: 1.13.2;
Properly protect against garbage values.
 1.12  11-Aug-2010  jruoho Print the state information only once. The per-CPU information was quite
pointless as identical parameters are expected across processors.
 1.11  11-Aug-2010  jruoho Check the 'sc->sc_cold' flag also in P-state code, and set this flag once
we start the detachment routine.
 1.10  11-Aug-2010  jruoho Add a small additional check for the validity of the GAS register.
 1.9  11-Aug-2010  jruoho Use a define instead of a magic constant for the arbitrary P-state limit.
 1.8  11-Aug-2010  jruoho Pretty printing.
 1.7  10-Aug-2010  jruoho Use evcnt(9) for the counters.
 1.6  09-Aug-2010  jruoho On systems where both the existing EST code and the one provided by ACPI are
functional, the previously loaded EST code may have used frequencies that
are not present in the BIOS. This will cause failures since acpicpu(4) will
treat these unknown frequencies as errors. "Fix" this by initializing the
cached P-state to P0, regardless of what the true state might be.
 1.5  09-Aug-2010  jruoho When retrieving the current frequency, scan all available P-states.
Only use the dynamic maximum when setting a frequency.
 1.4  08-Aug-2010  jruoho Improve error and debug messages.
 1.3  08-Aug-2010  jruoho As per jmcneill@'s suggestion, improve error reporting.
 1.2  08-Aug-2010  jruoho Remove bogus check and allow all CPUs to use I/O-based P-states.
 1.1  08-Aug-2010  jruoho Merge P-state support for acpicpu(4).

Remarks:

1. All processors (x86 or not) for which the vendor has implemented
ACPI I/O access routines are supported. Native instructions are
currently supported only for Intel's "Enhanced Speedstep". Code for
"PowerNow!" (AMD) will be merged later. Native support for VIA's
"PowerSaver" will be investigated.

2. Backwards compatibility with existing userland code is maintained.
Comparable to the case with cpu_idle(9), the ACPI CPU driver
installs alternative functions for the existing sysctl(8) controls.
The "native" behavior (if any) is restored upon detachment.

3. The dynamic nature of ACPI-provided P-states needs more investigation.
The maximum frequency induced (but not forced) by the firmware may
change dynamically. Currently, the sysctl(8) controls error out with
a value larger than the dynamic maximum. The code itself does not
however yet react to the notifications from the firmware by changing
the frequencies in-place. Presumably the system administrator should
be able to choose whether to use dynamic or static frequencies.
 1.13.2.3  09-Oct-2010  yamt sync with head
 1.13.2.2  11-Aug-2010  yamt sync with head.
 1.13.2.1  11-Aug-2010  yamt file acpi_cpu_pstate.c was added on branch yamt-nfs-mp on 2010-08-11 22:53:15 +0000
 1.26.2.4  06-Nov-2010  uebayasi Sync with HEAD.
 1.26.2.3  22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.26.2.2  17-Aug-2010  uebayasi Sync with HEAD.
 1.26.2.1  16-Aug-2010  uebayasi file acpi_cpu_pstate.c was added on branch uebayasi-xip on 2010-08-17 06:45:59 +0000
 1.36.4.2  05-Mar-2011  bouyer Sync with HEAD
 1.36.4.1  08-Feb-2011  bouyer Sync with HEAD
 1.36.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.45.2.5  12-Jun-2011  rmind sync with head
 1.45.2.4  21-Apr-2011  rmind sync with head
 1.45.2.3  06-Mar-2011  rmind sync with head (and fix few botches with this)
 1.45.2.2  05-Mar-2011  rmind sync with head
 1.45.2.1  05-Mar-2011  rmind file acpi_cpu_pstate.c was added on branch rmind-uvmplock on 2011-03-05 20:53:02 +0000
 1.48.2.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.52.2.1  17-Apr-2012  yamt sync with head
 1.53.66.1  14-Dec-2020  thorpej Sync w/ HEAD.

RSS XML Feed