| 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. |