119 lines
4.7 KiB
Plaintext
119 lines
4.7 KiB
Plaintext
IBM Power-Management Bindings
|
|
=============================
|
|
|
|
Linux running on baremetal POWER machines has access to the processor
|
|
idle states. The description of these idle states is exposed via the
|
|
node @power-mgt in the device-tree by the firmware.
|
|
|
|
Definitions:
|
|
----------------
|
|
Typically each idle state has the following associated properties:
|
|
|
|
- name: The name of the idle state as defined by the firmware.
|
|
|
|
- flags: indicating some aspects of this idle states such as the
|
|
extent of state-loss, whether timebase is stopped on this
|
|
idle states and so on. The flag bits are as follows:
|
|
|
|
- exit-latency: The latency involved in transitioning the state of the
|
|
CPU from idle to running.
|
|
|
|
- target-residency: The minimum time that the CPU needs to reside in
|
|
this idle state in order to accrue power-savings
|
|
benefit.
|
|
|
|
Properties
|
|
----------------
|
|
The following properties provide details about the idle states. These
|
|
properties are exposed as arrays. Each entry in the property array
|
|
provides the value of that property for the idle state associated with
|
|
the array index of that entry.
|
|
|
|
If idle-states are defined, then the properties
|
|
"ibm,cpu-idle-state-names" and "ibm,cpu-idle-state-flags" are
|
|
required. The other properties are required unless mentioned
|
|
otherwise. The length of all the property arrays must be the same.
|
|
|
|
- ibm,cpu-idle-state-names:
|
|
Array of strings containing the names of the idle states.
|
|
|
|
- ibm,cpu-idle-state-flags:
|
|
Array of unsigned 32-bit values containing the values of the
|
|
flags associated with the the aforementioned idle-states. The
|
|
flag bits are as follows:
|
|
0x00000001 /* Decrementer would stop */
|
|
0x00000002 /* Needs timebase restore */
|
|
0x00001000 /* Restore GPRs like nap */
|
|
0x00002000 /* Restore hypervisor resource from PACA pointer */
|
|
0x00004000 /* Program PORE to restore PACA pointer */
|
|
0x00010000 /* This is a nap state (POWER7,POWER8) */
|
|
0x00020000 /* This is a fast-sleep state (POWER8)*/
|
|
0x00040000 /* This is a winkle state (POWER8) */
|
|
0x00080000 /* This is a fast-sleep state which requires a */
|
|
/* software workaround for restoring the */
|
|
/* timebase (POWER8) */
|
|
0x00800000 /* This state uses SPR PMICR instruction */
|
|
/* (POWER8)*/
|
|
0x00100000 /* This is a fast stop state (POWER9) */
|
|
0x00200000 /* This is a deep-stop state (POWER9) */
|
|
|
|
- ibm,cpu-idle-state-latencies-ns:
|
|
Array of unsigned 32-bit values containing the values of the
|
|
exit-latencies (in ns) for the idle states in
|
|
ibm,cpu-idle-state-names.
|
|
|
|
- ibm,cpu-idle-state-residency-ns:
|
|
Array of unsigned 32-bit values containing the values of the
|
|
target-residency (in ns) for the idle states in
|
|
ibm,cpu-idle-state-names. On POWER8 this is an optional
|
|
property. If the property is absent, the target residency for
|
|
the "Nap", "FastSleep" are defined to 10000 and 300000000
|
|
respectively by the kernel. On POWER9 this property is required.
|
|
|
|
- ibm,cpu-idle-state-psscr:
|
|
Array of unsigned 64-bit values containing the values for the
|
|
PSSCR for each of the idle states in ibm,cpu-idle-state-names.
|
|
This property is required on POWER9 and absent on POWER8.
|
|
|
|
- ibm,cpu-idle-state-psscr-mask:
|
|
Array of unsigned 64-bit values containing the masks
|
|
indicating which psscr fields are set in the corresponding
|
|
entries of ibm,cpu-idle-state-psscr. This property is
|
|
required on POWER9 and absent on POWER8.
|
|
|
|
Whenever the firmware sets an entry in
|
|
ibm,cpu-idle-state-psscr-mask value to 0xf, it implies that
|
|
only the Requested Level (RL) field of the corresponding entry
|
|
in ibm,cpu-idle-state-psscr should be considered by the
|
|
kernel. For such idle states, the kernel would set the
|
|
remaining fields of the psscr to the following sane-default
|
|
values.
|
|
|
|
- ESL and EC bits are to 1. So wakeup from any stop
|
|
state will be at vector 0x100.
|
|
|
|
- MTL and PSLL are set to the maximum allowed value as
|
|
per the ISA, i.e. 15.
|
|
|
|
- The Transition Rate, TR is set to the Maximum value
|
|
3.
|
|
|
|
For all the other values of the entry in
|
|
ibm,cpu-idle-state-psscr-mask, the kernel expects all the
|
|
psscr fields of the corresponding entry in
|
|
ibm,cpu-idle-state-psscr to be correctly set by the firmware.
|
|
|
|
- ibm,cpu-idle-state-pmicr:
|
|
Array of unsigned 64-bit values containing the pmicr values
|
|
for the idle states in ibm,cpu-idle-state-names. This 64-bit
|
|
register value is to be set in pmicr for the corresponding
|
|
state if the flag indicates that pmicr SPR should be set. This
|
|
is an optional property on POWER8 and is absent on
|
|
POWER9.
|
|
|
|
- ibm,cpu-idle-state-pmicr-mask:
|
|
Array of unsigned 64-bit values containing the mask indicating
|
|
which of the fields of the PMICR are set in the corresponding
|
|
entries in ibm,cpu-idle-state-pmicr. This is an optional
|
|
property on POWER8 and is absent on POWER9.
|